DbHelp.ru
Маленький Yii блог
Комментарии
DeD: Запрацювало тільки після заміни if (isset($_GET['root'])) на if...
Denis: Если что- можете поюзать полный код уроков: https://github.com/d...
Гость: www.youtube.com/watch?v=vZqNhOsaHRU - ролик по проекту DruYiid
Mj: Мдааа так было интересно, ех... Но лучше поздно чем нико...
Mj: Добавте оповещание по email



Сервер Ultima Online - Forest Wars (от создателя данного блога)

Обновление содержимого через AJAX используя renderPartial()

Рубрика: Перевод Cookbook

Оцените эту статью:

Рейтинг: 0.00 (0)
12 Окт. 2009
Опубликовать в Twitter Написать в Facebook Опубликовать в своем блоге livejournal.com

Yii Framework Blog img Yii Framework Blog img Yii Framework Blog img http://dbhelp.rucookbook

Наиболее легкий способ обновления содержимого через Ajax, это использование метода partialRender(). Давайте научимся им пользоваться!

---

 

 

Для этого примера у меня есть три файла : контроллер (HelloWorldController.php) и два отображения (index.php и _ajaxContent.php)

controllers/HelloWorldController.php:

class HelloWorldController extends CController
{
    public function actionIndex()
    {
        $data = array();
        $data["myValue"] = "Данные загружены";
 
        $this->render('index', $data);
    }
 
    public function actionUpdateAjax()
    {
        $data = array();
        $data["myValue"] = "Данные обновлены через AJAX";
 
        $this->renderPartial('_ajaxContent', $data, false, true);
    }
}

В actionIndex() я устанавливаю myValue равной значению "Данные загружены" и передаю её в "index.php" и "_ajaxContent.php". actionUpdateAjax() - используйется для изменения переменной, и через renderPartial отдает новое значение.

views/helloWorld/index.php

<div id="data">
   <?php $this->renderPartial('_ajaxContent', array('myValue'=>$myValue)); ?>
</div>
 
<?php echo CHtml::ajaxButton ("Update data",
                              CController::createUrl('helloWorld/UpdateAjax'),
                              array('update' => '#data'));
?>

При клике на кнопку (ajaxButton) вызывается actionUpdateAjax() и полученное значение вставляется в div "data".

views/helloWorld/_ajaxContent.php

<?php echo $myValue ?>

Просто отображаем $myValue

 

Вот и все. Запускайте index.php?r=helloWorld и пользуйтесь!

 



Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
Другие yii статьи:

  1. Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Урок 6 : Регистрация и авторизация. Часть 1"

  2. ... "DbHelp.ru - второе дыхание"

  3. Вот в отпуске побывал впервые в жизни... а некоторые так за всю жизнь ни разу там и не бывают как ... "Не будите программиста!"

[guest] RSol

Было сказано: Понедельник, 12 Октябрь 2009

А почему так:

CController::createUrl('helloWorld/UpdateAjax'),

я обычно использую


array('helloWorld/UpdateAjax'),

и все работает?

[adm] zolter

Было сказано: Понедельник, 12 Октябрь 2009

Дело в том что когда ты делаешь через createUrl, Yii сам формирует путь согласно правилу (если найдет) указанному в маршрутах твоего приложения.

[guest] RSol

Было сказано: Вторник, 13 Октябрь 2009

у меня тоже формирует :-)

[adm] zolter

Было сказано: Вторник, 13 Октябрь 2009

хы )

[guest] Sam

Было сказано: Среда, 14 Октябрь 2009

partialRender → renderPartial

[adm] zolter

Было сказано: Среда, 14 Октябрь 2009

Сенк. Просто с англ. названия переводил, что то пропустил между глаз :)

[guest] Гость

Было сказано: Пятница, 13 Ноябрь 2009

А как навесить на изменение текстового инпута вызов аякс-метода? То есть как suggest на Google и т.п., когда под вормой ввода открываются подсказки?

[guest] Гость

Было сказано: Понедельник, 16 Ноябрь 2009

Решение было простейшее — CAutoComplete
Вопрос снят.

[adm] zolter

Было сказано: Понедельник, 16 Ноябрь 2009

Сори показалось что ответил вам . Там в кукбуке официальном еще пример есть по этому поводу

[guest] Гость

Было сказано: Понедельник, 16 Ноябрь 2009

А yii в любой ОС работает (кроссбраузерный)?)

[adm] zolter

Было сказано: Понедельник, 16 Ноябрь 2009

Уии использует jQuery. Он в принципе поддерживает все современные браузеры

[guest] Гость

Было сказано: Понедельник, 16 Ноябрь 2009

И хотел бы узнать во всех Операционных системах yii работает

[adm] zolter

Было сказано: Понедельник, 16 Ноябрь 2009

Это php фреймворк. Он будет работать везде где вы поднимите веб-сервер. Для windows к примеру xampp, для linux - lampp. Для макинтошей тоже что то есть. Так что да.

[guest] Саша

Было сказано: Пятница, 20 Август 2010

А как же Yii::app()->request->isAjaxRequest
Такой подход будет более гибким

[guest] zolter

Было сказано: Пятница, 20 Август 2010

Это ж перевод. Но "Yii::app()->request->isAjaxRequest" конечно следует использовать для проверки действительно ли ajax запрос.

[guest] Гость

Было сказано: Четверг, 01 Март 2012

как быть когда я подгружаю контент с еще одной ajaxButton ?
фреймворк почему-то вешает на него событие первой кнопки, т.к. id прописывается id="yt0", хотя должен быть id="yt1"

[guest] zolter

Было сказано: Четверг, 01 Март 2012

Посмотрите api про renderPartial, там третий или четвертый параметр отвечает будет генерироваться js код для динамических объектов на подгружаемой странице или нет

[guest] Гость

Было сказано: Вторник, 21 Август 2012

У меня в <div id="data"></div> загружается вся страница

[guest] Гость

Было сказано: Вторник, 21 Август 2012

>[guest] Гость
>Было сказано: Вторник, 21 Август 2012
>У меня в <div id="data"></div> загружается вся страница

переведите статью до конца

Note: if using accessRules() in your controller file, you will need to modify accessRules() by adding the appropriate part of the function name to a rule set - in this case 'updateajax' like this:

[guest] Гость

Было сказано: Воскресенье, 07 Июль 2013

Спосибо

[guest] Гость

Было сказано: Пятница, 08 Август 2014

ioioioiiioioi

Оставить комментарий


Код:
Имя: