DbHelp.ru
Маленький Yii блог
Комментарии
Гость: комент
Гость: wahaha
zolter: Друпал на Yii? ))
nastia: http://drupal.org/
JB: Да там просто ад)) мне всего 3 значения нужно чтобы выпадало, все равно спасибо)...



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

Урок 3 : Первый раз, первый контроллер..

Рубрика: Создаем блог вместе

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

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

Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут возникнуть ошибки из-за несовместимости. Обычно ответы на все вопросы работы на 1.1.х были описаны в комментариях ниже статьи.

Первым делом я очень извиняюсь за такой большой перерыв в написании статей в этом разделе. Я наконец то решил проблему по которой не мог писать сообщения в данный раздел, поэтому теперь каждый новый урок будет выходить как минимум раз в неделю...

---

Хочу вам сразу сказать что мои уроки никак не пересекаются с "Blog Tutorial".
Я использую свои решения (свой подход) и не собираюсь дублировать идеи. Спасибо всем моим читателям которые натолкнули меня пересмотреть вердикт относительна данного раздела.

Я предполагаю что вы уже знакомы с:

Кодим, кодим, перекодим...

Со времён "Урока 2" мои взгляды немного изменились и я решил пересмотреть структуру одной из таблиц. Если вы следовали уроку и создавали все таблицы в базе, выполните следующие действия:

  1. воспользуйтесь phpmyadmin что бы открыть вашу базу.
  2. найдите и удалите там таблицу category
  3. используя SQL выполните следующий код:

CREATE TABLE `category` (
  `id` int(11) NOT NULL auto_increment,
  `idOwner` int(11) NOT NULL default '0',
  `name` varchar(250) NOT NULL,
  `url` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

Если вы посмотрели код запроса, то наверняка уже поняли что я добавил поддержку вложенности для категорий (возможность рализации простого дерева).

id - порядковый номер категории
idOwner - номер родительской категории (номер категории в которой находится категория)
name - название категории
url - префикс URL для категории


Объяснение почему я выбрал данный тип дерева, а не NestedSets - выходят за приделы данного урока. В двух словах я хочу сказать что я сторонник простоты и для меня перестраивать ключи всего дерева только что б вставить в него элемент - чуждо (как это происходит с NestedSets). Если вы не согласны с моим подходом в данном случае - вы можете использовать любое другое дерево.

Для того чтобы разобраться  как работает дерево - я приведу вам простой пример данных:

id | idOwner | name
1           0              Главный
2           1              Раздел 1
3           1              Раздел 2
4           1              Раздел 3
5           2              Раздел 1.1
6           3              Раздел 2.1

Пример как это будет выглядеть:
 
 | Главный
 |--- Раздел 1
 |------- Раздел 1.1
 |--- Раздел 2
 |------- Раздел 2.1
 |--- Раздел 3

Так, думаю с деревом все понятно. Переходим дальше...

Первый раз, первый контроллер...

Стандартный контроллер для Yii приложения - Site, но если вы внимательно смотрели строчки нашего конфиг файла (protected/config/main.php) вы должны были заметить :

    'defaultController'=>'post',

данная строка говорит о том что вместо "Site" нашим контроллером по умолчанию будет Post. Также в файле protected/config/main.php удалите строчки которые нам сейчас не нужны:

    'sourceLanguage' => 'en',
    'language' => 'ru',
    'theme' => 'classic',

Давайте сразу договоримся что файлы блога который мы с вами создаем вы разместили у себя на localhost. Поэтому что бы открыть первую страницу блога - в браузере вы пишите http://localhost/

Рядом с папкой protected создайте папку assets. (она нам понадобиться в будущем)

Если вы сейчас зайдете на свой блог, вы должны увидить ошибку что контроллера Post не найдено или страница не найдена (смотреть).

Войдите в protected/controllers/ и создайте файл PostController.php

<?php
    class PostController extends CController
    {          
        public function actionIndex()
        {
            $this->pageTitle = "Мой блог :: Главная страница";
           
            // создаем простой критерий поиска в котором
            // просто сортируем по колонке created
            $criteria=new CDbCriteria;
            $criteria->order = 'created DESC';
           
            // Обращаемся к моделе Posts (которую мы создадим немного позже)
            // И передаем нашу критерию, чтобы все сообщения которые
            // мы получим - были отсортированы по дате создания.
            $all_posts = Posts::model()->findAll($criteria);
           
            // Передаем переменную $all_post со всеми постами в отображение index
            // в самом отображении переменная будет доступна по имени $posts
            $this->render('index', array(
                'posts' => $all_posts,
            ));
        }
    }

Думаю комментариев будет достаточно что бы понять как это дело работает. Сохраните контроллер и запустите блог. Вы должны увидеть ошибку что Posts.php не найден (смотреть). В принципе это и не удивительно (если вы читали комментарии), нам надо создать модель Posts.

Войдите в protected/models/ и создайте файл Posts.php:

<?php
    // Стандартный шаблон для любой модели.
    class Posts extends CActiveRecord
    {       
        public static function model($className=__CLASS__)
        {
            return parent::model($className);
        }
        public function tableName()
        {
            return 'post';   // название нашей таблицы в базе данных
        }
    }

Теперь заходите к себе на блог и смотрите что увидим на этот раз :) В идеальном варианте мы должны увидить ошибку (смотреть) что не найдено отображение index.php в которое мы собственно передаем переменную $all_posts. (смотреть)

Если вы видите ошибку связанную с базой данных (смотреть) тогда вы просто забыли в файле config/main.php поменять настройки соединения с базой данных.

Теперь перейдем к созданию простого отображения (index.php) которое выведет на экран нам список всех постов из базы.

Заходим в protected/views/ создаем там папку post,
а теперь в этой папке создаем два файла

index.php:

<table border="0" width="100%" cellpadding="10" cellspacing="10">
    <?php
    if (!empty($posts))
        foreach ($posts as $key => $val) {
            $this->renderPartial('_list',array(
                'post'=>$val,
            ));
        }
    ?>
</table>

_list.php:

<tr><td>
    <table border="1" width="100%">
        <tr><td><h2>Название : <?=$post->name;?></h2>
        <tr><td><?php echo $post->created;?>
        <tr><td><?php echo mb_substr($post->text, 0, 500), "...";?>
    </table>

В файле index.php мы получаем $posts переменную которая содержит в себе все посты из нашей базы (если они есть), а затем в цикле передает информацию по отдельному посту в отображение _list.php где выводятся все данные.

Я мог бы не разбивать вывод на два файла (оставить всё в index.php), но поверьте мне, данное решение намного изящнее и удобнее. (попробуйте приучить себя к такому стилю программирования и поймете что так намного удобнее).

Теперь нам надо добавить данные о постах в базу данных. Используя phpMyAdmin - войдите в базу данных и в таблицу post по добавляйте каких то тестовых данных (2-3 записи). Если нехотите добавлять вручную - загрузите в базу мой небольшой дамп (смотреть);

Теперь если вы откроете свой блог - вы увидите посты которые у вас в базе (смотреть). Если вы видите белый экран - значит добавить посты в базу вас так и не получилось :)

Теперь давайте модифицируем наш контроллер таким образом  что б появилось постраничное листание.

<?php
    class PostController extends CController
    {          
        public function actionIndex()
        {
            $this->pageTitle = "Мой блог :: Главная страница";
           
            $criteria=new CDbCriteria;
            $criteria->order = 'created DESC';
           
            // Создаем обьект класса CPagination в который
            // передаем кол-во наших постов
            $pages=new CPagination(Posts::model()->count($criteria));
            // Сколько сообщений выводить на страницу?
            $pages->pageSize=1;
            $pages->applyLimit($criteria);
           
            $all_posts = Posts::model()->findAll($criteria);
           
            $this->render('index', array(
                'posts' => $all_posts,
                // теперь нам надо в отображение послать еще
                // и переменную $pages
                'pages' => $pages,
            ));
        }
    }

В $pages->pageSize я установил единицу для того чтобы вы (со своими двумя постами в базе) увидели виджет постраничного листания. Вы можете установить любое другое значение для удобства.

Теперь надо добавить виджит постраничного листания в отображение

<?php $this->widget('CLinkPager',array(
            'pages'=>$pages,
            'maxButtonCount' => 5, // максимальное вол-ко кнопок <- 1..2..3..4..5 ->
             'header' => '<b>Перейти к странице:</b><br><br>', // заголовок над листалкой
    )); ?>

(добавьте этот код конец файла view/post/index.php)

Вот в принципе и всё для сегодняшнего урока. Если вы войдете на страницу своего блога - вы увидите одно несчастное сообщение и элемент для листания страниц.

Мне кажется для первого практического занятия по данному уроку - материала я изложил достаточно.

В следующий раз будет два парных урока по темам:

  1. Как прикрутить регистрацию (авторизацию) средствами Yii
  2. Как создать отдельную страницу для поста


Спасибо всем что читаете мой блог.
Заходите еще!



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

  1. У меня не всегда получается регулярно писать на своем блоге по множеству причин. Что бы написать целую техническую статью ... "Новые разделы: что нового, мои проекты"

  2. Пару дней назад столкнулся с очень распространенной проблемной среди разработчиков - кодировкой. Для меня эта проблема исчезла когда я ... "Поблема с кодировкой на ZendServer"

  3. Странно, каждый день по несколько раз посещаю официальный сайт Yii Фреймворка – и только сегодня заметил новость за 15е ... "Видео урок "Как создать свой блог""

[guest] xoma

Было сказано: Пятница, 22 Май 2009

Ну наконец-то продолжение появилось! Спасибо!
Позаимствую идею с _list.php для записей!

[guest] aser

Было сказано: Пятница, 22 Май 2009

Очень хорошо что расписан процесс ручного создания контроллера и модели, но как по мне нужно было упомянуть что половину статьи можно создать из yiic shell-a двумя командами ;) как для меня это и есть большой + данного framework-а.

[adm] zolter

Было сказано: Пятница, 22 Май 2009

независимо от того будет написан контроллер и его функционал в ручную или созданный при помощи yiic - все равно его надо понимать что бы потом модфицировать. именно поэтому я расписываю ручное создание контроллеров и моделей что бы люди понимали откуда они взялись и в случае утери yiic - могли создать их в ручную :) А для тех кто в будущем соберается использовать не только yii - это бесценный опыт т.к. восновном вся эта фигня одинакова во всех фреймворках без автогенерирования кода =)

[guest] Максим

Было сказано: Суббота, 23 Май 2009

Хорошая статья, жду продолжения

[guest] Вячеслав

Было сказано: Воскресенье, 24 Май 2009

Замечательная статья.

Чуть не в тему:
В index.php и _list.php не используются закрывающие теги </td></tr>.
Сознательно?

[adm] zolter

Было сказано: Воскресенье, 24 Май 2009

Да, не закрываю их сознательно. Тег td сам закрывается перед открытием следующего тега td. Аналогично и с tr, т.е. закрывать их не обязательно, html сам это делает. Для XHTML мои способ написания не подойдет, т.к. он предполагает что все теги должны быть закрыты, а для простого html - данный подход многие используют для быстроты написания :)

[guest] Вячеслав

Было сказано: Воскресенье, 24 Май 2009

Понятно! :)
Спасибо за блог, зарегистрировался и подписался на RSS!
Тимур, есть предложения:
1. Добавь на блог форму обратной связи (а если хочется тебе сказать что-то хорошее лично? :).
2. твой 125 комментарий не привязан к статьям.
3. добавь блок контекстной рекламы - я первый кто покликаю на нем (заодно повод для статьи)
4. после чтения твоего блога возникло желание разобраться с Yii. Хотелось что-то типа Hello World. После долгих поисков нашел это приложение в дистрибутиве :-). Разобрался с работай и написал небольшую статейку. Хочу отдать тебе ее безвозмездно. Может кому пригодится.

[adm] zolter

Было сказано: Воскресенье, 24 Май 2009

Привет :)
Спасибо за хорошие отзывы :) Форму обратной связи думаю на днях добавлю, вдруг кто захочет что то хорошее написать ) По поводу хелло-ворлд можешь тут прочитать (http://dbhelp.ru/yii-create-project/page/) я тоже немного писал. Статейку с радостью приму и опубликую под твоим авторством. Кидай на zolter.od@gmail.com :) Заходи еще )

[guest] Гость

Было сказано: Воскресенье, 24 Май 2009

Спасибо за статью, а как заменить Previous и Next напрмер на Предыдущая и Следующая

[adm] zolter

Было сказано: Воскресенье, 24 Май 2009

Замените свой файл framework/messages/ru/yii.php на вот этот файлик http://dbhelp.ru/files/yii.rar

В нем уже частично переведена большая часть Yii элементов в том числе надписи на этих кнопках.

RSol

Было сказано: Воскресенье, 24 Май 2009

>как заменить Previous и Next напрмер на Предыдущая и Следующая

Я сделал так (views/post/list.php):
$this->widget('CLinkPager',array('pages'=>$pages,'nextPageLabel'=>'Вперед >','prevPageLabel'=>'< Назад'));

[guest] Гость

Было сказано: Воскресенье, 24 Май 2009

не понятно, но не работает
я и в самое приложение protected/messages подлаживал и в конфигурационном фале добавил
'sourceLanguage'=>'ru_ru',
'language'=>'ru_ru',

[adm] zolter

Было сказано: Воскресенье, 24 Май 2009

Попробуйте сделать так как предложил RSol

[guest] Гость

Было сказано: Воскресенье, 24 Май 2009

Да, действительно второй вариант рабочий.
Спасибо

[adm] zolter

Было сказано: Понедельник, 25 Май 2009

Да и первый вариант тоже рабочий :) Просто вы наверно не туда файлик залили или еще что то :)

[guest] ppy

Было сказано: Пятница, 29 Май 2009

> Да, не закрываю их сознательно.

вам не кажется что руки надо отрывать за такое ? : )

[guest] ppy

Было сказано: Пятница, 29 Май 2009

ps. За статью большое спасибо!

[adm] zolter

Было сказано: Пятница, 29 Май 2009

to ppy
почему же ? есть сторонники XHTML, а есть сторонники HTML. Так вот для второго случая - не закрытие этих тегов являеться допустимым, иначе в HTML бы не предусмотрели механизм их автоматического закрытия :) Тоже самое спорный вопрос надо ли писать <img ... /> или достаточно просто <img>. Тут как говориться на вкус и цвет, мне XHtml до лампочки, но я своё отношение к нему некому не навязываю :) А руки отрывать надо за код вида:

foreach ($array as $variable) {
$i++;
echo $array[$i];
}


:D

[guest] Гость Начинающий yii

Было сказано: Вторник, 02 Июнь 2009

21 мая 2009
>>поэтому теперь каждый новый урок будет
>> выходить как минимум раз в неделю...

1 июня...


Инициатива дело хорошее. Похвальное и не каждому доступное.

Но аудиторию лучше держать, чем постоянно ее брать по новой.
:)

[adm] zolter

Было сказано: Вторник, 02 Июнь 2009

Согласен.
К сожалению не всегда получается со временем. Статья почти готова, просто остался небольшой рерайт.

[guest] Ponf

Было сказано: Среда, 10 Июнь 2009

Есть небольшая проблема с mb_substr(), когда обрезается текст почему-то вставляется �, выглядит примерно так:
те�...
пробовал mb_strcut, то же самое(

[guest] Гость

Было сказано: Среда, 10 Июнь 2009

Пробуйте обрезать на чётное кол-во символов.
Не на 3, 5, 7 к примеру а не 2, 4, 6

[guest] Ponf

Было сказано: Среда, 10 Июнь 2009

mb_substr($post->text, 0, 499)

и
mb_substr($post->text, 0, 500)

дают одинаковый результат(
где-то один байт теряется(

[guest] Гость

Было сказано: Среда, 10 Июнь 2009

Попробуйте третим параметром принудительно указать кодировку utf8

[guest] Ponf

Было сказано: Среда, 10 Июнь 2009

сработало)
Благодарю за помощь

[guest] Гость

Было сказано: Среда, 10 Июнь 2009

пожалуйста)

[guest] Гость

Было сказано: Суббота, 20 Июнь 2009

Не хорошо называть поле в базе данных idOwner.
Это parent_id или еще как угодно, но это Родитель а не владелец, и это не придирки, просто idOwner это id пользователя или владельца - т.е. подчеркивает отношения. А в Вашем примере это Родитель - потомок.

[guest] Макс

Было сказано: Суббота, 20 Июнь 2009

В принципе это кому как нравиться и кто на это как смотрит. Есть много документации по проектированию и в некоторых из них выносят слово id вперед для показания что речь идет про связьку или счетчик. И данный подход весьма удобен для баз где используются большие поля или имена полей.

[guest] Гость

Было сказано: Вторник, 23 Июнь 2009

"Теперь заходите к себе на блог и смотрите что увидим на этот раз :) В идеальном варианте мы должны увидить ошибку (смотреть) что не найдено отображение index.php в которое мы собственно передаем переменную $all_posts. (смотреть)" --- а почему у меня после этого пункта выдает вообще левую ошибку? вот скрин http://i061.radikal.ru/0906/15/86b251ea92d0.jpg

[adm] zolter

Было сказано: Вторник, 23 Июнь 2009

Оо.. Мне жаль но у вас хостинг без поддержки PDO. Оно необходимо для работы с базой данных. Есть несколько вариантов решения этой проблемы:

1. Использовать платный хостинг (почти все они с поддержкой PDO Mysql)

2. Попробовать настроить вот этот компонент для эмуляции PDO http://dbhelp.ru/install-yii-phppdo/page/

[guest] Гость

Было сказано: Суббота, 27 Июнь 2009

Проблемы с подключением модели.
Выдаёться постоянно ошибка "Posts.php не найден"
хотя файл загружен в protected/models

Я может ошибаюсь но модели должны както подключаться в конфиге?

Увидал в примерах:

	'import'=>array(
'application.models.*',
'application.components.*',
),


Но при этом коде Апачь выдаёт ошибку и получаю:
Під час завантаження сторінки з’єднання з сервером було скинуто.

В качестве тестового сервера использую XAMP под Win XP.

[guest] Maxx

Было сказано: Суббота, 27 Июнь 2009

А вы уверены что файл Posts.php находиться в папке models и нормально открывается в текстовом редакторе? Ваш конфиг файл правильный, должно работать..

[guest] Гость

Было сказано: Суббота, 27 Июнь 2009

Та вот и беда что уверен, видать кривой XAMP.
Ладно если конфиг файл правильный то буду пробовать другие сервера.

[guest] zolter

Было сказано: Суббота, 27 Июнь 2009

Попробуйте ZendServer поставить.
Под виндой я на нем точно поднимал Yii и всё работало отлично

[adm] zolter

Было сказано: Суббота, 27 Июнь 2009

По поводу подключения моделей в конфиге:
вам самому ничего подключать ненадо. Yii динамически сам загружает все классы автоматически (в том числе моделей) в тот момент когда вы первый раз к ним обращаетесь. Поэтому в самом конфиге достаточно строчки "'application.models.*'," которая говорит о том что классы которые надо подключать находятся в папке models.

В конце урока (http://www.dbhelp.ru/blog-setup/page/) вы можете скачать архив исходников скелета приложения на Yii. Там также будет уже рабочий конфиг в принципе. Попробуйте именно его использовать

[guest] Гость

Было сказано: Суббота, 27 Июнь 2009

Я поставил последнюю версию XAMP с сайта и всё заработало.
Вы бы добавили строчку подключения модулей в листинг конфига Урока 2.
Может ещё кому пригодиться)

[guest] zolter

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

Да, спасибо.
На днях немного обновлю статью =)

[guest] Ensiferum

Было сказано: Вторник, 07 Июль 2009

Почему может быть такое? Пишу в main.php

'db'=>array(
'class'=>'system.db.CDbConnection',
'connectionString'=>'mysql:host=localhost;dbname=yii',
'username'=>'root',
'password'=>'',
'charset'=>'utf8',
)

выдает
CDbConnection failed to open the DB connection: could not find driver

Данные для коннекта правильные

[adm] zolter

Было сказано: Вторник, 07 Июль 2009


<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
print ("Connected successfully");
mysql_close($link);
?>


попробуйте этот код вставить в php файл и запустить. это для того чтобы точно отсечь предчасность yii к этой ошибке. я предполагаю что у вас не настроена поддержка mysql в php.ini (как вариант), или mysql просто не запустился в системе.

[guest] tenzor

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

может просто не установлен mysql дврайвер для PDO?

[adm] zolter

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

Не. Обычно в этом случае оно ругается что не может найти PDO.php или чтото в этом духе.

[guest] Гость

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

Не работает из четвертого урока при переходе на http://localhost/view/?url=test, хотя я делал все так же как написано.

[guest] zolter

Было сказано: Суббота, 29 Август 2009

там давалась ссылка на http://yii.dbhelp.ru/step/?n=6) , вместо неё перейдите на ссылку http://yii.dbhelp.ru/step/?n=6 (т.е. без скобки в конце). дальше загрузите эти данные к себе в базу.

если кодировка на странице будет неправильная - установите в ручную на utf-8

Виталий

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

А есть аналог метода mb_substr()? Только чтобы не по буквам, а по словам или абзацам разбивался текст. Ну или как технически/практически/идеологически правильно делать анонсы статей/новостей?

[adm] zolter

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

Я бы делал так:

$str_array = explode(" ", $text);

что бы разбить по словам.

[guest] Гость

Было сказано: Вторник, 23 Февраль 2010

позновательно :) спасибо

[guest] like2dev

Было сказано: Суббота, 20 Март 2010

$pages->pageSize = количество элементов на одной странице
заменить на
$pages->setPageSize(1);

[guest] Гость

Было сказано: Среда, 07 Апрель 2010

otlichno spasibo za statya

[guest] Гость

Было сказано: Вторник, 04 Май 2010

я новичок в yii. в файле main.php нет
'defaultController'=>'post',
Как быть?

[guest] Гость

Было сказано: Суббота, 15 Май 2010

Добавить )

[guest] Тимур

Было сказано: Среда, 14 Июль 2010

СПАСИБО! Доходчиво и красиво!

[guest] Гость

Было сказано: Среда, 14 Июль 2010

// autoloading model and component classes
'import'=>array(
'application.models.*',
'application.components.*',
),

'defaultController'=>'post',

// application components
'components'=>array(
'user'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
),

[guest] Dmitry

Было сказано: Суббота, 28 Август 2010

Подскажите, где изменить стили для паджинатора? Мне хочется сделать его поменьше

[guest] zolter

Было сказано: Суббота, 28 Август 2010

При вызове виджета ЦЛинкПэйджер укажите парраметром "cssFile" путь к вашему css файлу и он подхватит все ваши стили для оформления листалки

[guest] Гость

Было сказано: Среда, 02 Март 2011

Спасибо за интересные статьи, это мое первое знакомство с Yii.

[guest] Гость

Было сказано: Суббота, 26 Март 2011

блин немогу сделать, дошол до _list.php щас уже свю писанину стер и скапиров все когды отсюда, всераво неработает выводит:

Property "PostController.breadcrumbs" is not defined.

/var/www/testdrive/protected/views/layouts/main.php(41)
чё это может быть?

[guest] Гость

Было сказано: Суббота, 26 Март 2011

все нашол как исправить за место

render()
использовал
renderPartial()
в контролере, по другому просто неполучается, надеюсь так оно и надобыло сделать

[guest] Гость

Было сказано: Понедельник, 28 Март 2011

Property "PostController.breadcrumbs" is not defined.

/var/www/testdrive/protected/views/layouts/main.php(41)
чё это может быть?


нет свойства breadcrumbs

видимо ты наследуешь PostController от CController,
загляни в файл aplications/components/Controller.php
и увидишь public $breadcrumbs=array();

-------
решение просто
class PostController extends Controller


з.ы. добавьте BB-коды)

[guest] Larein

Было сказано: Понедельник, 28 Март 2011

забыл:
renderPartial() и render()
отличаются тем что первый не использует макет в отличии от второго. поэтому этим решать не стоит)

изучаю Yii 5-ый день, автору спасибо за блог, нашел необходимую информацию)

[guest] DEM

Было сказано: Среда, 22 Июнь 2011

У меня проблемка(((
При отображении блога (из вашего урока), то что берётся из БД выводится нормальным русским текстом, а то, что писал сам в коде (к примеру в виджете страниц ВПЕРЁД, НАЗАД или "Название" в _list.php) он выводит просто квадратики (���). Как это можно решить? в .htaccess стоит "AddDefaultCharset UTF-8" (если убрать, то весь сайт будет в крякозябрах :( )

[guest] Гость

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

>>DEM
Посмотри в конфигурационном файле php настройки кодировки - default charset = ?. У меня та же проблема была - там стояло не UTF-8, а windows-1251...

[guest] ApXaHgheJI

Было сказано: Суббота, 29 Октябрь 2011

Золтер спасибо за статью - буду сейчас смотреть все разом!
Просьба - когда используешь - applyLimit ( хоть бы сказал что это такое и зачем ) просто я как его увидел полез на офф сайт и искать в доках и так ничего и не нашел =(

П.С. еще раз спс - все пересмотрю - и то что ты делаешь не через шелл +5 - согласен люди должны понимать что зачем и куда...

[guest] Гость

Было сказано: Четверг, 15 Декабрь 2011

Виджет не отображается. В чём может быть проблема?

[guest] zolter

Было сказано: Четверг, 15 Декабрь 2011

Какой? Листалка?

[guest] Гость

Было сказано: Пятница, 16 Декабрь 2011

да, листалка

[guest] zolter

Было сказано: Пятница, 16 Декабрь 2011

А ты уверен что кол-во постов которое ты тянешь с базы больше чем твое значение указанное в $pages->pageSize?? Если постов хватает только на одну страницу - листалка не будет отображатся т.к. нечего листать

[guest] Kasper

Было сказано: Четверг, 05 Январь 2012

Всем привет! Прошу помощи, застрял( а хочется двигаться дальше( в */protected/controllers/ создал файл PostController.php сохранил контроллер - запускаю блог и вижу не текст с Posts.php а эту ошибку

CException

PostController cannot find the requested view "index".

[guest] zolter

Было сказано: Пятница, 06 Январь 2012

Добрый день, ошибка говорит что вы не создали файл отображения.
Скорее всего в actionIndex идет $this->render('index'), а вот сам файлик protected/views/post/index.php у вас не создан. Перечитайте еще раз статью и успехов :)

[guest] Casper

Было сказано: Пятница, 06 Январь 2012

Thank you very much zolter! У меня получилось!)))

[guest] Гость

Было сказано: Вторник, 24 Январь 2012

Добрый день.
У меня следующая проблема:
Переменная posts, которую требуется вывести в представление
имеет угрожающий вид (через print_r), т.е. помимо необходимых данных, там еще куча всего. Весь код не стану приводить(очень много).
Начало:


Array
(
[0] => Posts Object
(
[_md:CActiveRecord:private] => CActiveRecordMetaData Object
(
[tableSchema] => CMysqlTableSchema Object
(
[schemaName] =>
[name] => post
[rawName] => `post`
[primaryKey] => id
[sequenceName] =>
[foreignKeys] => Array
(
)

Нужные мне данные:

[_new:CActiveRecord:private] =>
[_attributes:CActiveRecord:private] => Array
(
[id] => 2
[id_user] => 0
[id_category] => 0
[name] => ERe
[url] => http://www.google.ru/
[text] => frgafgfgafrg
[active] => 1
[created] => 2012-01-18 00:00:00
)

В чем проблема.
Заранне спасибо.

[guest] zolter

Было сказано: Вторник, 24 Январь 2012

Проблемы нет! Твоя переменная это выборка с модели функцией findAll. Следуя этого ты в переменную и получаешь МАССИВ объектов результата. Тебе конечно надо было показать запрос, но я так предполагаю что ты хотел получить одну запись. Тогда findAll меняешь на find. И в результате с $posts можна работать как $posts->url ; $posts->text и тп.

Если всетаки тебе надо получить много значений через findAll, тогда работай с переменной как $posts[1]->text. Либо через
foreach ($posts as $val)
{
$val->text;
}

п.с. еще вариант получить в принтовке все данные это обратится к attributes. Т.е. можешь сделать print_r($posts->attributes) в случае с find, и print_r($posts[$num]->attributes) в случае с findAll

[guest] Гость

Было сказано: Среда, 25 Январь 2012

Спасибо помогло.
З.Ы. Очень понравилась методика подачи материала.

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


Код:
Имя: