Скрытая страница

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Скрытая страница

Сообщение stitch_mif »

Доброго времени суток!
Я недавно начала пользоваться Yii Framework и очень нужна помощь.
На сайте есть страница на php. Но она не должна быть доступной ни с кнопок, ни ссылок, а только если в адресной строке ручками дописать адрес.
Например есть станица:
http:\\site\page1
и есть страница page1hidden
Эта скрытая должна открыться ТОЛЬКО если изменю в адресной строке ручками на: http:\\site\page1\page1hidden.
Подскажите как это сделать?
NEW_NAME
Сообщения: 216
Зарегистрирован: 2013.07.15, 09:52

Re: Скрытая страница

Сообщение NEW_NAME »

Не давать на нее ссылки/обрабатывать нажатия ссылок. Еще можно вот это покопать getenv("HTTP_REFERER") и на самой странице проверять. Это даже скорее в общие вопросы, а не про Yii
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Re: Скрытая страница

Сообщение stitch_mif »

Просто нагуглившись и ничего применительного не найдя, я поняла что один из вариантов как можно это осуществить - это написав в config именно в yiiшном необходимое условие. Но как это сделать я не представляю.
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Скрытая страница

Сообщение masson »

А смысл какой? Самому от себя что-то спрятать? Просто не пишите ссылки и кнопки с этим адресом и всё :)
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Re: Скрытая страница

Сообщение stitch_mif »

masson писал(а):А смысл какой? Самому от себя что-то спрятать? Просто не пишите ссылки и кнопки с этим адресом и всё :)
Такое у меня задание. Надо сделать чтобы эта страница была доступна с сайта только таким способом.
Shappy
Сообщения: 86
Зарегистрирован: 2013.09.19, 12:31

Re: Скрытая страница

Сообщение Shappy »

NEW_NAME уже писал, HTTP_REFERER проверяй значение... Когда вбиваешь url сама, значение пустое будет, точнее вроде как вообще не будет такого хедера... Если хедер есть и не пуст, значит была переадресация.
Аватара пользователя
Neuromance
Сообщения: 716
Зарегистрирован: 2011.09.06, 13:04

Re: Скрытая страница

Сообщение Neuromance »

page1hidden - это get-параметр же? если да, то так? В page1Action SiteController

Код: Выделить всё

$ph = Yii::app()->request->getParam('page1hidden');
if(isset($ph)) $this->renderPartial(page1hidden');
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Re: Скрытая страница

Сообщение stitch_mif »

Neuromance писал(а):page1hidden - это get-параметр же? если да, то так? В page1Action SiteController

Код: Выделить всё

$ph = Yii::app()->request->getParam('page1hidden');
if(isset($ph)) $this->renderPartial(page1hidden');
page1hidden - это тоже страница аналогичная page1.php
и page1hidden должен быть написан не как: &page1hidden=значение, а именно: путь+"/page1hidden"
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Re: Скрытая страница

Сообщение stitch_mif »

Neuromance писал(а):page1hidden - это get-параметр же? если да, то так? В page1Action SiteController

Код: Выделить всё

$ph = Yii::app()->request->getParam('page1hidden');
if(isset($ph)) $this->renderPartial(page1hidden');

Когда я попробовала так сделать я поняла что я не совсем правильно сформулировала проблему.
Исправлюсь.
Раньше было на странице http://index.php так:
Страница1 | Страница2 | Страница3 | Страница4
это были ссылки на другие страницы: http://index.php?X=Страница1. Которые генерировались после клика по ссылке.
и теперь надо чтобы ссылка на "Страница4" на странице http://index.php отсутствовала, но при написании ручками в адресную строку "http://index.php/Страница4" она генерировалась как раньше
Nafania
Сообщения: 1227
Зарегистрирован: 2011.01.31, 13:12

Re: Скрытая страница

Сообщение Nafania »

yii тут не причем.
IvanChe
Сообщения: 89
Зарегистрирован: 2012.11.25, 18:55

Re: Скрытая страница

Сообщение IvanChe »

Очень пытался понять проблему, но даже не полулчилось :)
Надо убрать ссылку со страница - это делается в html. Надо заходить только напрямую, ну проверь HTTP_REFERER.
Можешь подробнее описать полную задачу и в чем сложность ?
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Re: Скрытая страница

Сообщение stitch_mif »

IvanChe писал(а):Очень пытался понять проблему, но даже не полулчилось :)
Надо убрать ссылку со страница - это делается в html. Надо заходить только напрямую, ну проверь HTTP_REFERER.
Можешь подробнее описать полную задачу и в чем сложность ?

В SiteController вызывается функция которая обращается в базу и берёт весь список страниц (Страница1,Страница2,Страница3,Страница4) и передаёт это в() index.php.
В index.php этот список ждёт клика. Если выбирается какая то страница то в строке $_GET к "http://путьсайта" дописывается: ?X=Страница4.
Теперь нужно чтобы именно Страница4 в списке на сайте не отображалась, и была доступна при наборе в адресной строке: http://путьсайта/Страница4.
Проблема в том что когда я пробовала делать по совету:
$ph = Yii::app()->request->getParam('Страница4');
if(isset($ph)) $this->renderPartial('Страница4');
рендериться всё в тот же индекс. а он ждёт список страниц для клика и дальнейшей обработки, а ни как не элемент(страницу) для мгновенной обработки.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Скрытая страница

Сообщение vova07 »

После подробностей, задача стала ещё более непонятной.
- Если вы делаете выборку из базы, нужных страниц, почему бы не исключить из этой выборки страницу 4?
- Почему в случае "страницы 4" не выдать другую виюшку которая решит вашу задачу? $this->render('myNewView', array('model' => $model));
- Нубский вариант (очень плохой), но хотя-бы и такой: удаляем ненужные значения массива через unset, или просто не выводим если там title === "Страница 4".
Если так нельзя решить вашу задачу, то я наверное реально ничего не понял.
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Re: Скрытая страница

Сообщение stitch_mif »

vova07 писал(а):.
Дело в том что я не имею правА изменять базу я могу её только считывать.
И спасибо я подумаю как реально через новую вьюшку реализовать.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Скрытая страница

Сообщение vova07 »

stitch_mif писал(а):
vova07 писал(а):.
Дело в том что я не имею правА изменять базу я могу её только считывать.
И спасибо я подумаю как реально через новую вьюшку реализовать.
А кто писал про изменения базы? Я говорил о исключении страницы в момент выборки (считывания).
Простой пример:

Код: Выделить всё

SELECT * FROM pages WHERE title <> "Страница 4"
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Re: Скрытая страница

Сообщение stitch_mif »

vova07 писал(а):
stitch_mif писал(а):
vova07 писал(а):.
Дело в том что я не имею правА изменять базу я могу её только считывать.
И спасибо я подумаю как реально через новую вьюшку реализовать.
А кто писал про изменения базы? Я говорил о исключении страницы в момент выборки (считывания).
Простой пример:

Код: Выделить всё

SELECT * FROM pages WHERE title <> "Страница 4"

было б всё так просто было бы хорошо. но к сожалению база не на MySQL, а в CMDBuild. и все данные достаются только уже существующими функциями. И функция возвращает весь список страниц без ограничения :(
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Скрытая страница

Сообщение vova07 »

Код: Выделить всё

unset($pages[ИД_СТРАНИЦЫ_4]); 
Да, и если честно то мы сейчас решаем все в слепую. Дамп массива с страницами в студию пожалуйста.
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Re: Скрытая страница

Сообщение stitch_mif »

vova07 писал(а):

Код: Выделить всё

unset($pages[ИД_СТРАНИЦЫ_4]);
Да, и если честно то мы сейчас решаем все в слепую. Дамп массива с страницами в студию пожалуйста.
в сайт контроллере в actionIndex:
$ws=new WebservicesImplService('.......')
$q=$ws->getCardMenuSchema();
$k=$q->return;
$this->render( 'index',array('k'=>$k) );

если сделать
print_r($k); то вот:

MenuSchema Object ( [children] => Array ( [0] => MenuSchema Object ( [children] => [classname] => technology [defaultToDisplay] => [description] => Технология [id] => 31705 [menuType] => class [metadata] => Array ( [0] => Metadata Object ( [key] => runtime.groupname [value] => ws ) [1] => Metadata Object ( [key] => runtime.privileges [value] => READ ) [2] => Metadata Object ( [key] => runtime.username [value] => _tu_info ) ) [parentId] => 0 [position] => 0 [privilege] => READ ) [1] => MenuSchema Object ( [children] => [classname] => employee [defaultToDisplay] => [description] => Сотрудник [id] => 29434 [menuType] => class [metadata] => Array ( [0] => Metadata Object ( [key] => runtime.groupname [value] => ws ) [1] => Metadata Object ( [key] => runtime.privileges [value] => READ ) [2] => Metadata Object ( [key] => runtime.username [value] => _tu_info ) ) [parentId] => 0 [position] => 0 [privilege] => READ ) [2] => MenuSchema Object ( [children] => [classname] => servicePackage [defaultToDisplay] => [description] => Сервис [id] => 29575 [menuType] => class [metadata] => Array ( [0] => Metadata Object ( [key] => runtime.groupname [value] => ws ) [1] => Metadata Object ( [key] => runtime.privileges [value] => READ ) [2] => Metadata Object ( [key] => runtime.username [value] => _tu_info ) ) [parentId] => 0 [position] => 0 [privilege] => READ ) [3] => MenuSchema Object ( [children] => [classname] => project [defaultToDisplay] => [description] => Проект [id] => 31536 [menuType] => class [metadata] => Array ( [0] => Metadata Object ( [key] => runtime.groupname [value] => ws ) [1] => Metadata Object ( [key] => runtime.privileges [value] => READ ) [2] => Metadata Object ( [key] => runtime.username [value] => _tu_info ) ) [parentId] => 0 [position] => 0 [privilege] => READ ) [4] => MenuSchema Object ( [children] => [classname] => WebService [defaultToDisplay] => [description] => Веб-сервис [id] => 31598 [menuType] => class [metadata] => Array ( [0] => Metadata Object ( [key] => runtime.groupname [value] => ws ) [1] => Metadata Object ( [key] => runtime.privileges [value] => READ ) [2] => Metadata Object ( [key] => runtime.username [value] => _tu_info ) ) [parentId] => 0 [position] => 0 [privilege] => READ ) ) [classname] => Class [defaultToDisplay] => [description] => Class [id] => 28436 [menuType] => superclass [metadata] => Array ( [0] => Metadata Object ( [key] => runtime.groupname [value] => ws ) [1] => Metadata Object ( [key] => runtime.privileges [value] => READ ) [2] => Metadata Object ( [key] => runtime.username [value] => _tu_info ) ) [parentId] => 0 [position] => 0 [privilege] => READ )


А в index.php:
<ul>
<?php
foreach($k->children as $child)
{ ?>
<li data_url="<?php echo 'index.php?Cll=' .$child->classname ?> " >
<?php print_r($child->description); ?>
</li>
}
</ul>

А если в индексе
print_r($chilld->description),там в форыче то вот:
технология сотрудник сервис проект веб-сервис



PS. извините что код не оформлен на сайте. буду учиться. :oops:
Я понимаю что это сложно объяснить не показывая проект(( :(
Последний раз редактировалось stitch_mif 2013.10.21, 06:37, всего редактировалось 1 раз.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Скрытая страница

Сообщение vova07 »

Ну в таком случае можно например проверять ИД страницы, и в случае если он совпадает с ИД который мы не должны выводить удалять этот элемент, или просто пропустить его в цикле.
Пример:

Код: Выделить всё

<ul>
<?php foreach($k->children as $child) {
    if ($child->id !== НУЖНЫЙ_ИД) { // Если там больше страниц то можно так: if (!in_array($child->id, $arrayWithId)) ?>
        <li data_url="<?php echo 'index.php?Cll=' .$child->classname ?> ">
            <?php print_r($child->description); ?>
        </li>
    <?php }
}
?>
</ul>
И если можно, то закэшировать эту менюшку для ускорения!
stitch_mif
Сообщения: 11
Зарегистрирован: 2013.10.18, 13:45

Re: Скрытая страница

Сообщение stitch_mif »

vova07 писал(а):Ну в таком случае можно например проверять ИД страницы, и в случае если он совпадает с ИД который мы не должны выводить удалять этот элемент, или просто пропустить его в цикле.
Пример:

Код: Выделить всё

<ul>
<?php foreach($k->children as $child) {
    if ($child->id !== НУЖНЫЙ_ИД) { // Если там больше страниц то можно так: if (!in_array($child->id, $arrayWithId)) ?>
        <li data_url="<?php echo 'index.php?Cll=' .$child->classname ?> ">
            <?php print_r($child->description); ?>
        </li>
    <?php }
}
?>
</ul>
И если можно, то закэшировать эту менюшку для ускорения!

ну предположим её тогда в списке не будет. но страница с этим "НУЖНЫМ_ИД" должна быть доступна, как я уже писала:  http://путь_как_на_страницу_со_списком_страниц/WS
Ответить