des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак

Yii сэмулировать нажатие ajaxLink?

формирую дерево с помощью
CHtml::ajaxLink(
                                    $text = $rows[$i]['title'], array('req'), $ajaxOptions = array(
                                'type' => 'POST',
                                'update' => '#content',
                                'data' => array('id' => $rows[$i]['id']),
                                    ), $htmlOptions = array(
                                    )
                            ),


контролер
public function actionReq()
    {        
        $content = $this->renderPartial('application.views.site.pages.frameset');
    }


фрэйм
$page = $_POST['id']; 
 $page = Page::model()->findByPk($page)->link;    
    echo '
    <iframe id="ifr" src="' . $page . '" align="left" seamless>    
    </iframe>';


так вот я хочу писать в сессию $_POST['id'], и если он есть, отдавать его во фрейм. как это реализовать?

UPD

что я хочу реализовать - простое дерево сайта.
в базе есть путь до страницы (если она внешняя, как например https://toster.ru)
или до представления (если она реализована на yii)
соответсвенно нужно сделать чтобы переходы были максимально мягкими для пользователя (и еще нужно крывать от него url).
таким образом на ajaxlink можно безболезненно рефрешить только content.
путь с прямыми ссылками не есть тру.
и вот идут два подхода - через ajaxlink отдаем в iframe id элемента из базы и отображаем.
но косяк - при перезагрузке страницы по f5 сбрасываются открытые пункты дерева. выход достаточно простой - хранить в сессии путь до элемента меню.
----
но вот проблема с представлениями yii - отображать их во фрейме желания нет. как разрулить такую ситуацию. сейчас сделал через путь до вьюшки, а во вью у представления выставил такой же layout как основного меню. но тогда проблема обратного перехода к дереву с выбором iframe, так отображается в той же модели в которой представление
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ответы на вопрос 1
1.CHtml::ajaxLink. Если Вы формируете список, то лучше не использовать CHtml::ajaxLink, так как в итоге если у вас достаточно много элементов в списке, то код будет захламлен одинаковыми функциями в js, которые будут отличаться только $rows[$i]['id'], лучше в виде написать одну функцию на все ссылки этого списка, а параметр $rows[$i]['id'] передавать в атрибут типа data-id, либо как вариант формировать простую ссылку указывая путь в href атрибут, а при клике на эту ссылку отправлять аякс запрос по этому пути, тогда лишних танцев с $rows[$i]['id'] не будет.
2. Запросы типа $page = Page::model()->findByPk($page)->link; лучше делать в контроллере а не в виде, нарушается принцип MVC.
3. Для получения ответа на Ваш вопрос можете более точно сформировать то что Вам нужно? Я к примеру понял что Вам нужно проверять если ли значение link с $_POST['id'] в сессии, и если оно есть передавать во фрейм, и если его нет то запрашивать, сохранять в сессию и опять же передавать во фрейм?

Как вариант:
public function actionReq($id)
    {        
        $model = Page::model()->findByPk($id);
        if ($model === null) {
            throw new CHttpException(404, 'Не найден запрашиваемый элемент.');
        }
        $this->renderPartial('application.views.site.pages.frameset',array('link'=>$model->link));
    }

Тогда путь к этой функции будет ...$this->createUrl('req',array('id'=>$rows[$i]['id']))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы