Урок 8 : Подключаем дизайн
Рубрика: Создаем блог вместе
10 Июл. 2009Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут возникнуть ошибки из-за несовместимости. Обычно ответы на все вопросы работы на 1.1.х были описаны в комментариях ниже статьи.
Я вот подумал что пора привести наш блог в нормальный вид и прицепить к нему дизайн. Поэтому в этом уроке мы поговорим о том что такое темы, и попробуем подключить одну из них..
В Yii фреймворке "темой" считается папка определенной структуры содержащая необходимые файлы для отображения дизайна. Это могут быть css/javascript файлы, макеты, файлы представлений и др. Все темы хранятся в папке themes в корне вашего приложения. Название папки темы и является её именем.
Пример структуры папки для темы test:
test/
views
layouts
main.php
images
В папке views должны находиться переделанные под конкретную тему файлы представлений.
Теория
Как вы помните сейчас весь дизайн нашего блога находиться в папке protected/views. Давайте попробуем переделать его в отдельную тему.
Заходим в папку themes и создаем там папку classic, а в ней папки: views, images. Теперь нам надо скопировать папку protected/views в папку themes/classic/views. После всех манипуляций папка themes должна выглядеть следующим образом:
classic/
views
layouts
main.php
post
...
user
...
images
(я не расписывал файлы в папках post, user из-за их большого кол-ва, но они должны там быть).
Теперь в конфиге приложения нам надо указать тему по умолчанию. Для этого открываем файл config/main.php и добавляем туда строчку:
...
'sourceLanguage' => 'ru',
'language' => 'en',
# -------------------------------
'theme' => 'classic',
# -------------------------------
...
Мы добавляем параметр «theme» с названием темы по умолчанию. В данном случае это «classic». Теперь давайте немного разберем как работают темы и для чего все таки нам папка protected/views.
Я надеюсь что на данном этапе вы произвели все изменения и попробовали войти на localhost. Если вы всё делали правильно — то визуально ничего не изменилось. На самом же деле теперь при подключении дизайна используются файлы из папки themes/classic/views, а не protecteed/views.
Это очень важный момент который вы должны понимать. Т.к. теперь для изменения каких-то элементов на странице — надо редактировать файлы темы, а не файлы из папки protected/views/
Как это всё работает?
Теперь давайте разберем зачем нам всё таки папка protected/views? Очень просто. Она является неким запасным вариантом. Давайте представим что у нас на сайте используется десять разных тем, и в каждой из тем есть одинаковая форма регистрации. Эта форма регистрации к примеру находиться в файле user/registration.php и полностью аналогичная для каждой из тем. Так вот что бы не пришлось дублировать этот файл десять раз для каждой из тем — мы можем просто поместить его в protected/views/user/registation.php. Если в приложении произойдет попытка загрузить отображение которого НЕТУ в папке текущей темы — оно автоматически загрузиться с protected/views/. Очень важно что бы вы это поняли, потому что дальше это поможет уменьшить дублирование кода.
Качаем
Теперь давайте начнем прикручивать новый дизайн. Первым делом зайдем на страницу онлайн просмотра и нажмем кнопку «download zip». Когда архив будет закачен на ваш компьютер — разархивируйте его. Картинки из папки images поместите в папку themes/classic/images, а остальные файлы в папку themes/classic/views. Структура нашей темы должна приобрести следующий вид:
classic/
views
layouts
main.php
post
...
user
...
index.html
license.txt
images
...
default.css
Фаил стилей находиться на одном уровне с папкой images специально что бы не заниматься прописыванием путей к картинкам в default.css. В идеальном варианте его конечно лучше поместить в отдельную папку css.
Как вы понимаете в файле index.html у нас находиться общий шаблон дизайна, его то мы и должны прицепить. Для этого открываем страницу нашего лаяута (layouts/main.php) и копируем в его начало весь файл index.html.
Файл layouts/main.php отвечает за вывод общего макета для всех страниц нашего приложения (по умолчанию). Поэтому весь макет нового дизайна надо прикручивать именно к этому файлу
В конечном итоге файл layouts/main.php должен выглядеть вот так:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Design by Free CSS Templates
http://www.freecsstemplates.org
Released for free under a Creative Commons Attribution 2.5 License
Title : Featuring
Version : 1.0
Released : 20090625
Description: A two-column fixed-width template suitable for small websites.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Featuring by Free Css Templates</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="#">Featuring</a></h1>
<h2><a href="http://www.freecsstemplates.org/">By Free CSS Templates</a></h2>
</div>
<!-- end div#logo -->
<div id="menu">
<ul>
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Products</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
<!-- end div#menu -->
</div>
<!-- end div#header -->
<div id="page">
<div id="page-bgtop">
<div id="content">
<div class="post">
<h2 class="title"><a href="#">Lorem Ipsum Dolor Volutpat</a></h2>
<p class="byline">Posted by FreeCssTemplates</p>
<div class="entry">
<p><img src="images/img06.jpg" alt="Yii Framework Blog img " width="564" height="294" /></p>
<p>This is <strong>Featuring</strong>, a free, fully standards-compliant CSS template designed by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a>, released for free under the <a href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5</a> license. The photo used in this template is from <a href="http://www.pdphoto.org">PDPhoto.org</a>. You're free to use this template for anything as long as you link back to <a href="http://www.freecsstemplates.org/">my site</a>. Enjoy :)</p>
</div>
<div class="meta">
<p class="links"><a href="#" class="comments">Comments (32)</a></p>
</div>
</div>
<div class="post">
<h2 class="title"><a href="#">Lorem Ipsum Dolor Volutpat</a></h2>
<p class="byline">Posted by FreeCssTemplates</p>
<div class="entry">
<p><img src="images/img06.jpg" alt="Yii Framework Blog img " width="564" height="294" /></p><p>Curabitur tellus. Phasellus tellus turpis, iaculis in, faucibus lobortis, posuere in, lorem. Donec a ante. Donec neque purus, adipiscing id, eleifend a, cursus vel, odio. Vivamus varius justo sit amet leo. Morbi sed libero. Vestibulum blandit augue at mi. Praesent fermentum lectus eget diam. Nam cursus, orci sit amet porttitor iaculis, ipsum massa aliquet nulla, non elementum mi elit a mauris.</p>
</div>
<div class="meta">
<p class="links"><a href="#" class="comments">Comments (32)</a></p>
</div>
</div>
</div>
<!-- end div#content -->
<div id="sidebar">
<ul>
<li id="search">
<h2>Search</h2>
<form method="get" action="">
<fieldset>
<input type="text" id="seach-text" name="s" value="" />
<input type="submit" id="search-submit" value="Search" />
</fieldset>
</form>
</li>
<li>
<h2>Lorem Ipsum</h2>
<ul>
<li><a href="#">Fusce dui neque fringilla</a></li>
<li><a href="#">Eget tempor eget nonummy</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
<li><a href="#">Eget tempor eget nonummy</a></li>
</ul>
</li>
<li>
<h2>Volutpat Dolore</h2>
<ul>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
<li><a href="#">Eget tempor eget nonummy</a></li>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
</ul>
</li>
<li>
<h2>Bebindum Mauris </h2>
<ul>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
<li><a href="#">Eget tempor eget nonummy</a></li>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
</ul>
</li>
<li>
<h2>Phasellus Tellus</h2>
<ul>
<li><a href="#">Eget tempor eget nonummy</a></li>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
</ul>
</li>
</ul>
</div>
<!-- end div#sidebar -->
<div style="clear: both; height: 1px"></div>
</div>
</div>
<!-- end div#page -->
<div id="footer">
<p id="legal">Copyright © 2007 Featuring. All Rights Reserved. Designed by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a>.</p>
<p id="links"><a href="#">Privacy Policy</a> | <a href="#">Terms of Use</a></p>
</div>
<!-- end div#footer -->
</div>
<!-- end div#wrapper -->
</body>
</html>
<html>
<head>
<title><?php echo $this->pageTitle; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="ru" />
<meta name="robots" content="all" />
</head>
<body>
<a href="<?=Yii::app()->createUrl("post/index/");?>">Главная</a>
<?php if (Yii::app()->user->isGuest): ?>
<a href="<?=Yii::app()->createUrl("user/registration/");?>">Регистрация</a>
<a href="<?=Yii::app()->createUrl("user/login/");?>">Вход</a>
<?php else: ?>
<a href="<?=Yii::app()->createUrl("user/logout/");?>">Выход (<?=Yii::app()->user->name?>)</a>
<?php endif; ?>
<?php echo $content; ?>
</html>
Попробуйте загрузить теперь localhost. Должно отобразиться много текста и не какой графики (т.к. пути к css и картинкам мы еще не прописали). Если вы прокрутите страницу в самый низ — увидите список постов.
Теперь нам надо указать где находиться css файл, и все картинки. В отображении мы можем использовать конструкцию Yii::app()->theme->baseUrl которая возвращает путь к папке текущей темы. Его то мы и должны использовать перед подключением картинок (в img) и css/js файлов.
Файл main.php после некоторых изменений должен выглядеть вот так:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Design by Free CSS Templates
http://www.freecsstemplates.org
Released for free under a Creative Commons Attribution 2.5 License
Title : Featuring
Version : 1.0
Released : 20090625
Description: A two-column fixed-width template suitable for small websites.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Featuring by Free Css Templates</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<link href="<?php echo Yii::app()->theme->baseUrl; ?>/default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="#">Featuring</a></h1>
<h2><a href="http://www.freecsstemplates.org/">By Free CSS Templates</a></h2>
</div>
<!-- end div#logo -->
<div id="menu">
<ul>
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Products</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
<!-- end div#menu -->
</div>
<!-- end div#header -->
<div id="page">
<div id="page-bgtop">
<div id="content">
<div class="post">
<h2 class="title"><a href="#">Lorem Ipsum Dolor Volutpat</a></h2>
<p class="byline">Posted by FreeCssTemplates</p>
<div class="entry">
<p><img src="<?php echo Yii::app()->theme->baseUrl; ?>/images/img06.jpg" alt="Yii Framework Blog img " width="564" height="294" /></p>
<p>This is <strong>Featuring</strong>, a free, fully standards-compliant CSS template designed by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a>, released for free under the <a href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5</a> license. The photo used in this template is from <a href="http://www.pdphoto.org">PDPhoto.org</a>. You're free to use this template for anything as long as you link back to <a href="http://www.freecsstemplates.org/">my site</a>. Enjoy :)</p>
</div>
<div class="meta">
<p class="links"><a href="#" class="comments">Comments (32)</a></p>
</div>
</div>
<div class="post">
<h2 class="title"><a href="#">Lorem Ipsum Dolor Volutpat</a></h2>
<p class="byline">Posted by FreeCssTemplates</p>
<div class="entry">
<p><img src="<?php echo Yii::app()->theme->baseUrl; ?>/images/img06.jpg" alt="Yii Framework Blog img " width="564" height="294" /></p><p>Curabitur tellus. Phasellus tellus turpis, iaculis in, faucibus lobortis, posuere in, lorem. Donec a ante. Donec neque purus, adipiscing id, eleifend a, cursus vel, odio. Vivamus varius justo sit amet leo. Morbi sed libero. Vestibulum blandit augue at mi. Praesent fermentum lectus eget diam. Nam cursus, orci sit amet porttitor iaculis, ipsum massa aliquet nulla, non elementum mi elit a mauris.</p>
</div>
<div class="meta">
<p class="links"><a href="#" class="comments">Comments (32)</a></p>
</div>
</div>
</div>
<!-- end div#content -->
<div id="sidebar">
<ul>
<li id="search">
<h2>Search</h2>
<form method="get" action="">
<fieldset>
<input type="text" id="seach-text" name="s" value="" />
<input type="submit" id="search-submit" value="Search" />
</fieldset>
</form>
</li>
<li>
<h2>Lorem Ipsum</h2>
<ul>
<li><a href="#">Fusce dui neque fringilla</a></li>
<li><a href="#">Eget tempor eget nonummy</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
<li><a href="#">Eget tempor eget nonummy</a></li>
</ul>
</li>
<li>
<h2>Volutpat Dolore</h2>
<ul>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
<li><a href="#">Eget tempor eget nonummy</a></li>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
</ul>
</li>
<li>
<h2>Bebindum Mauris </h2>
<ul>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
<li><a href="#">Eget tempor eget nonummy</a></li>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
</ul>
</li>
<li>
<h2>Phasellus Tellus</h2>
<ul>
<li><a href="#">Eget tempor eget nonummy</a></li>
<li><a href="#">Nec metus sed donec</a></li>
<li><a href="#">Magna lacus bibendum mauris</a></li>
<li><a href="#">Velit semper nisi molestie</a></li>
</ul>
</li>
</ul>
</div>
<!-- end div#sidebar -->
<div style="clear: both; height: 1px"></div>
</div>
</div>
<!-- end div#page -->
<div id="footer">
<p id="legal">Copyright © 2007 Featuring. All Rights Reserved. Designed by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a>.</p>
<p id="links"><a href="#">Privacy Policy</a> | <a href="#">Terms of Use</a></p>
</div>
<!-- end div#footer -->
</div>
<!-- end div#wrapper -->
</body>
</html>
<html>
<head>
<title><?php echo $this->pageTitle; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="ru" />
<meta name="robots" content="all" />
</head>
<body>
<a href="<?=Yii::app()->createUrl("post/index/");?>">Главная</a>
<?php if (Yii::app()->user->isGuest): ?>
<a href="<?=Yii::app()->createUrl("user/registration/");?>">Регистрация</a>
<a href="<?=Yii::app()->createUrl("user/login/");?>">Вход</a>
<?php else: ?>
<a href="<?=Yii::app()->createUrl("user/logout/");?>">Выход (<?=Yii::app()->user->name?>)</a>
<?php endif; ?>
<?php echo $content; ?>
</html>
Теперь если вы загрузите localhost — увидите уже более приятное зрелище. Перед вами должна отобразиться страница дизайна с непонятными темами на английском (но зато с картинками), а в низу — список наших постов.
Следующее что мы сделаем:
- Удалим вывод тем на англ. языке. Вместо этого на их место сделаем вывод нашего $content
- Удалим ненужные пункты меню
- Подключим в самый верх — наше меню
- Поставим наш pageTitle
Смотрим что у меня получилось теперь из файла main.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--
Design by Free CSS Templates
http://www.freecsstemplates.org
Released for free under a Creative Commons Attribution 2.5 License
Title : Featuring
Version : 1.0
Released : 20090625
Description: A two-column fixed-width template suitable for small websites.
-->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $this->pageTitle; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="ru" />
<meta name="robots" content="all" />
<link href="<?php echo Yii::app()->theme->baseUrl; ?>/default.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
<div id="header">
<div id="logo">
<h1><a href="#">YiiBlog</a></h1>
<h2><a href="http://www.freecsstemplates.org/">By www.DbHelp.ru</a></h2>
</div>
<!-- end div#logo -->
<div id="menu">
<ul>
<li><a href="<?=Yii::app()->createUrl("post/index/");?>">Главная</a></li>
<?php if (Yii::app()->user->isGuest): ?>
<li><a href="<?=Yii::app()->createUrl("user/registration/");?>">Регистрация</a></li>
<li><a href="<?=Yii::app()->createUrl("user/login/");?>">Вход</a></li>
<?php else: ?>
<li><a href="<?=Yii::app()->createUrl("user/logout/");?>">Выход (<?=Yii::app()->user->name?>)</a>
<?php endif; ?>
</ul>
</div>
<!-- end div#menu -->
</div>
<!-- end div#header -->
<div id="page">
<div id="page-bgtop">
<div id="content">
<?php echo $content; ?>
</div>
<!-- end div#content -->
<div id="sidebar">
<ul>
<li>
<h2>Правый блок меню</h2>
<ul>
<li><a href="#">ссылка</a></li>
<li><a href="#">ссылка</a></li>
<li><a href="#">ссылка</a></li>
<li><a href="#">ссылка</a></li>
</ul>
</li>
</ul>
</div>
<!-- end div#sidebar -->
<div style="clear: both; height: 1px"></div>
</div>
</div>
<!-- end div#page -->
<div id="footer">
<p id="legal">Designed by <a href="http://www.freecsstemplates.org/">Free CSS Templates</a>.</p>
</div>
<!-- end div#footer -->
</div>
<!-- end div#wrapper -->
</body>
</html>
Хочу вас порадовать — это последний вариант файла main.php :) Теперь если вы зайдете на localhost — увидите что наши посты теперь выводятся в нужном месте. Вот только в дизайн они немного плохо вписываются.
За вывод постов отвечают файлы index.php и _list.php. Как вы помните вывод постов у нас идет в табличном виде. А в дизайне который мы подключаем вывод сделан следующим образом:
<div class="post">
<h2 class="title"><a href="#">тема</a></h2>
<p class="byline">правый текст</p>
<div class="entry">
<p>текст</p>
</div>
<div class="meta">
<p class="links"><a href="#" class="comments">ссылка</a></p>
</div>
</div>
Т.е. Все на дивах. Поэтому нам надо сделать точно также (что бы было красиво). Поэтому в файлах index.php и _list.php вырезаем весь табличный вывод и приводим его к примеру выше.
Файл index.php у вас должен выглядеть вот так:
<?php
if (!empty($posts))
foreach ($posts as $key => $val) {
$this->renderPartial('_list',array(
'post'=>$val,
));
}
?>
<?php $this->widget('CLinkPager',array(
'pages'=>$pages,
'maxButtonCount' => 5,
'header' => '<b>Перейти к странице:</b><br><br>',
)); ?>
А файл _list.php:
<div class="post">
<h2 class="title"><a href="<?=$this->createUrl('post/view/', array('url' => $post->url));?>"><?=$post->name;?></a></h2>
<p class="byline"><?php echo $post->created;?></p>
<div class="entry">
<p><?php echo mb_substr($post->text, 0, 150), "...";?></p>
</div>
<div class="meta">
<p class="links"><a href="<?=$this->createUrl('post/view/', array('url' => $post->url));?>">Подробнее</a></p>
</div>
</div>
Я надеюсь что до этого момента всё было понятно. Теперь заходим на страницу localhost и радуемся :) Если у вас всё получилось правильно — перед вами будет главная страница уже в новом дизайне. При этом темы будут выводиться красиво в нужном месте :) Попробуйте меню, проверьте всё ли работает. Страница регистрации и авторизации должна была автоматически стать под новый дизайн.
После того как я зашел на страницу подробного описания поста — мне не понравился наш вывод рамки. Сильно грузит, неправда ли? Поэтому я решил border приравнять нулю.
Для этого я открыл файл view.php и строчку:
<table border="1" width="100%">
заменил на :
<table border="0" width="100%">
Результат
Теперь смело можем говорить что у нас всё получилось. Сам материал который был описан в этом уроке лёгкий для понимания, но тяжёлый для объяснения. Я постарался описать как можно подробнее что бы вам было понятно, но уверен что получилось все равно не идеально. Поэтому если будут вопросы — не стесняйтесь, пишите в комментариях или через форму «Обратная связь». Также вы можете прочитать статью «Темы оформления» из официальной документации (правда там очень не много информации).
Пока что наше приложение будет использовать одну тему, поэтому рассматривать варианты переключения между темами я не буду (в этом уроке). Это очень легко и я уверен вы сами поймете как это сделать (параметр theme).
Задание на дом
Для закрепления материала я очень советую вам найти понравившийся дизайн и попробовать его самостоятельно прикрутить к приложению. Все ваши темы вы можете посылать мне на zolter.od@gmail.com и я добавлю их в этот пост для других пользователей.
Ссылки
Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
- Флеш-сообщения используются для того, что бы сохранить в сессии некий текст, и после отображения его пользователю - сразу удалить.
Понятие ... "Как работать с флеш-сообщениями"
- Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Настройка 3d капчи на Yii"
- Эта статья устарела т.к. была написана для yii версии 1.0.х; Если вы используете более новую версию - у вас могут ... "Урок 5 : Многоязычность"

[guest] xoma
Было сказано: Пятница, 10 Июль 2009
прочитал от начала до конца! все очень просто и доступно! спасибо!

[adm] zolter
Было сказано: Пятница, 10 Июль 2009
Пожалуйста!
Рад что получилось описать более менее доступно. Переписывал наверно раза 4 это всё :)

andy_s
Было сказано: Пятница, 10 Июль 2009
Спасибо, познавательная статья :)
Только мне кажется, что можно в будущем не писать весь этот громоздкий html, а обходиться фразами о том, что пути к картинкам и css должны быть прописаны так и так. Просто наиболее полезная информация получилась как раз вне этих больших вставок кода, которые еще и смотрятся не очень привлекательно, но это just imho.
Кстати, модули ведь тоже могут иметь свои темы? Заглядывая вперед, интересно узнать, как красиво и правильно поступать при наличии нескольких модулей при смене темы сайта с theme1 на theme2.

[adm] zolter
Было сказано: Пятница, 10 Июль 2009
Вы в принципе правы :) Просто пришлось бы много описывать что где менять, проще сразу показать. Я хочу на днях немного переделать вывод блока кода. Т.е. по умолчанию делать большие куски кода свёрнутыми. Кому понадобиться - нажмет кнопку "открыть" :)
К сожалению, с модулями еще не успел нормально поработать поэтому не смогу ответить на ваш вопрос :(

[adm] zolter
Было сказано: Пятница, 10 Июль 2009
Как и обещал - сделал сворачивание больших блоков кода :)

[guest] aser
Было сказано: Вторник, 14 Июль 2009
Как всегда отличная статья, маленькие замечания:
В выводе плагинатора забыли поменять дизайн :) (для примера)
И темы компонентов не затронули (насколько понял)
и тогда по-моему получится вообще статья дающая на все ответ, по дизайну...

[guest] StranNik
Было сказано: Вторник, 21 Июль 2009
Спасибо, очень пригодилось. Но возникла одна проблема мне нужно прицепить разные темы под разные модули, шаблоны контроллеров модуля воспринимаются отлично, беруться из /modules/moduleName/views/ControllerName/ но layouts берётся основной :(
Как на это можно повлиять ?

[adm] zolter
Было сказано: Вторник, 21 Июль 2009
А вы указываете $this->theme = "..." в контроллере?

[adm] zolter
Было сказано: Вторник, 21 Июль 2009
Можно попробовать в $this->layout попробовать указать полный путь к нужному лаяуту.

[guest] StranNik
Было сказано: Вторник, 21 Июль 2009
Спасибо, действительно достаточно было с папке themes/тема/layouts/
создать новый файл и в контроллерах модуля указать
public $layout='имя нового layout';

dedzahar
Было сказано: Среда, 21 Октябрь 2009
Привет! Огромное спасибо за подробные статьи. Лично у меня, после прохождения официального туториала по созданию блога, осталось достаточно много "белых пятен". После прочтения Ваших статей многое встало на свои места.
Не которые страницы Вашего сайта в Опере 10 отображаются некорректно - в частности Урок 4 по блогу. Посмотрите плз.
Еще раз спасибо.

[adm] zolter
Было сказано: Среда, 21 Октябрь 2009
Рад что смог помочь! В будущем постараюсь продолжить статьи на эту тему.
По поводу кросбраузерности - уже решаю эту проблему. спасибо

[guest] J
Было сказано: Суббота, 14 Ноябрь 2009
[adm] zolter
Было сказано: Пятница, 13 Ноябрь 2009
Какой именно? =)
Привет ) Данного урока )

[guest] Гость
Было сказано: Воскресенье, 15 Ноябрь 2009
Когда запускаю блог на локалке, и начинаю переходить по сылкам (Главная, регистрайия, вохд) выдайт ошибку что такой документ не был найден
"Not Found
The requested URL /post/index was not found on this server.
или
Not Found
The requested URL /user/registration was not found on this server.
или
Not Found
The requested URL /user/login was not found on this server."
Да, по идеи он должен вызывать контролёр, но он не вызываеться, и пытаеться найти файл по пути которого нет.
Подскажите что можно сделать?)

[guest] Гость
Было сказано: Четверг, 19 Ноябрь 2009
Когда установил блог начело выдовать ошибку:
.../yii/framework/db/CDbCommand.php(372)
00360: }
00361:
00362: if($this->_connection->enableProfiling)
00363: Yii::endProfile('system.db.CDbCommand.query('.$this->getText().')','system.db.CDbCommand.query');
00364:
00365: return $result;
00366: }
00367: catch(Exception $e)
00368: {
00369: if($this->_connection->enableProfiling)
00370: Yii::endProfile('system.db.CDbCommand.query('.$this->getText().')','system.db.CDbCommand.query');
00371: Yii::log('Error in querying SQL: '.$this->getText().$par,CLogger::LEVEL_ERROR,'system.db.CDbCommand');
00372: throw new CDbException(Yii::t('yii','CDbCommand failed to execute the SQL statement: {error}',
00373: array('{error}'=>$e->getMessage())));
00374: }
00375: }
00376: }
00372 - была выделена
А на локальном всё работает
Не подскажите в чём дело?

[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
А при запуске requirements/index.php есть красные/желтые пункты? Имею ввиду на вашем хостинге

[guest] Гость
Было сказано: Четверг, 19 Ноябрь 2009
[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
А при запуске requirements/index.php есть красные/желтые пункты? Имею ввиду на вашем хостинге
Вот скрин requirements/index.php http://share.bashtel.ru/download.php?file=4fb65f8c6f72382b9a70dad7af40e882

[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
Странно, всё в порядке.
А ошибку выдает сразу на первой странице блога? Отключите в конфиге профайлинг sql запросов на экран, если включено

[guest] Гость
Было сказано: Четверг, 19 Ноябрь 2009
[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
Странно, всё в порядке.
А ошибку выдает сразу на первой странице блога? Отключите в конфиге профайлинг sql запросов на экран, если включено
Да на первой вылазиет
А вы не покажите где ето отключаеться)))

[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
В конфиге (main.php) удалите вот этот кусок кода:
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
),
),

[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
А если не поможет, можно пойти дедовским методом отладки и натыкать в Post контроллере, в методе actionIndex всякие die('123') и смотреть с какой строчки кода начинает вылетать та ошибка что вы написали. Т.е. пока 123 пишется на экран - всё гуд, как только вылетает ошибка - значит вы нашли строчку

[guest] Гость
Было сказано: Четверг, 19 Ноябрь 2009
[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
В конфиге (main.php) удалите вот этот кусок кода:
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error, warning',
),
),
[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
А если не поможет, можно пойти дедовским методом отладки и натыкать в Post контроллере, в методе actionIndex всякие die('123') и смотреть с какой строчки кода начинает вылетать та ошибка что вы написали. Т.е. пока 123 пишется на экран - всё гуд, как только вылетает ошибка - значит вы нашли строчку
Ничего это не помагло)

[guest] жека
Было сказано: Четверг, 19 Ноябрь 2009
Очень интересный вопрос )) Когда это mysql выпускали под этот фреймворк?

[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
Ага. И под 4й и под 5й мускул фреймворк работает нормально.
Главное что б в php было поднято PDO MySQL

[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
to Гость
т.е. когда вы делаете die('123') в самом методе actionIndex - он не срабатывает на экране? т.е. все равно выводит вашу ошибку?

[guest] Гость
Было сказано: Пятница, 20 Ноябрь 2009
[adm] zolter
Было сказано: Четверг, 19 Ноябрь 2009
to Гость
т.е. когда вы делаете die('123') в самом методе actionIndex - он не срабатывает на экране? т.е. все равно выводит вашу ошибку?
Он вообще не срабытывает, выводит на весь экран ошибку, как была показана)

[guest] alexandrov
Было сказано: Среда, 24 Февраль 2010
А можно в методе класса поменять layout?? т.е. для определенной страницы, но при этом контроллер лишний не создавать?

[guest] zolter
Было сказано: Среда, 24 Февраль 2010
Конечно. Делаете в экшине:
$this->layout = "другой_лаяут" и оно для этого экшина будет подгружать другой_лаяут

[guest] Гость
Было сказано: Четверг, 25 Февраль 2010
Подскажите, почему, когда я в лаяуте использую функцию render, или renderPartial (у меня форма входа на сайт находится в шапке), то вылетает ошибка "Call to undefined function render()". Т.е. как мне подгружать в лаяут форму авторизации? Можно сделать еще одну переменную $content, куда это дело подгружать?!

[guest] zolter
Было сказано: Четверг, 25 Февраль 2010
В лаяуте просто нельзя использовать рендер в чистом виде. Т.е. рендер это метод класса CController. Поэтому если вы хотите выводить форму входа в лаяуте - вам надо оформить её как отдельный виджет. И уже этот самый виджет вызывать в лаяуте

[guest] Гость
Было сказано: Четверг, 25 Февраль 2010
есть примеры где нить посмотреть, как они создаются?!

[guest] zolter
Было сказано: Четверг, 25 Февраль 2010
Вот к примеру - http://dbhelp.ru/messager-widget/page/

stargazerrrrr
Было сказано: Среда, 03 Март 2010
Не могу войти в yii.dbhelp.ru
Internal Server Error
CDbConnection failed to open the DB connection: SQLSTATE[28000] [1045] Access denied for user 'zolter_admin'@'localhost' (using password: YES)
An internal error occurred while the Web server was processing your request. Please contact the webmaster to report this problem.
Thank you.

[guest] Рахмат
Было сказано: Суббота, 24 Апрель 2010
Ссылки на исходники не работают. Надпись "Эта статья устарела т.к. была написана для yii версии 1.0.х" отпугивает. Сразу теряется смысл. Выходит что читать бесполезно, потому как все не работает.

[adm] zolter
Было сказано: Суббота, 24 Апрель 2010
Я же не могу обманывать что статья не устарела. Она действительно писалась для 1.0.х и многие приемы описанные в статье для 1.1 решаются по другому. В будущем будут циклы специально для 1.1, а эта серия уроков уйдет в архив блога

[guest] Гость
Было сказано: Четверг, 20 Май 2010
Может лучше все проапгрейдить и дописать статьи как это сделать? Думаю многим будет интересно это узнать.

[guest] Гость
Было сказано: Воскресенье, 30 Январь 2011
Ваш блог дал мне пинка на изучение Yii
огромное спасибо ... уже тренируюсь на заказах (сайты визитки)

[guest] zolter
Было сказано: Понедельник, 31 Январь 2011
to Гость
Отлично. Продолжайте развиваться и не уставайте получать новые знания!
to Dima
разные визитки бывают, с разным функционалом :) да и для начала тоже не плохо что б понять работу шаблонов, и тп

[guest] Гость
Было сказано: Понедельник, 31 Январь 2011
Еще как мощно!
Просто визитка необычная ;)
И опыт хороший

[guest] Гость
Было сказано: Четверг, 03 Февраль 2011
Автор сделай продолжение пжл для актуальной версии, ты наверное уже много опыта набрался сделай новый цикл статей плиииз!!!!

[guest] zolter
Было сказано: Пятница, 04 Февраль 2011
С момента написания этого урока Yii уже достаточно сильно развился и стандартный урок блога предлагаемый разработчиком мне кажется окажется более полезным чем я бы писал обучалку по новому.

[guest] Анон
Было сказано: Пятница, 22 Июль 2011
классно, но как быть с элементами стандартными типа pagination, он так и остался синим

[guest] Сергей
Было сказано: Понедельник, 10 Октябрь 2011
Не нашел где sql файлы взять под этот блог, мучаюсь пытаюсь создать комментарии, знаком с Yii только неделю.. А чтобы писать уже самому приложения на этом фреймворке это сколько надо времени его сидеть изучать? А то так и получается, ищу кусочек там и сям, а когда пытаюсь все вместе залепить то выходят куча ошибок и не могу понять суть работы, соишком путано с этими функциями, скобочками... Прочитал перед началом работы с Yii что система проста, все говорят о ее легкости изучения... Чего-то я не заметил, может неделя это мало для понимания...

[guest] Гость
Было сказано: Четверг, 03 Ноябрь 2011
to Сергей, что бы худо бедно разбираться в Yii. нужно сначала разобраться в PHP, потом в ООП и уже потом осваивать Yii.

[guest] Гость
Было сказано: Понедельник, 02 Январь 2012
Огромное спасибо, zolter, за проделанную работу! Ваша работа - полезна для многих)
Скажите пожалуйста, а основной блог (dbhelp) тоже был написан на основе этих уроков? Много ли было добавлено из функционала?

[guest] zolter
Было сказано: Понедельник, 02 Январь 2012
Добрый день,
Да, данный блок был польностью написан на yii когда я учился на нем программировать. На самом деле это не самое удачное решение и я понял это через много лет, т.к. над своими проектами надо работать и постоянно расширяь, а желания расширять блог который и так работает как надо - у меня небыло. Следовательно было бы намного правильнее установить тот же вордпрес и иметь кучу функционала, чем писать что то свое и дальше им особо не заниматься.
Большой плюс который я получил чисто на своем движке - это работа с URL да и со всем шаблоном - как я хочу, отсюда нормально продвижение по SEO. В вордпресе мне для этого пришлось бы ставить пару модулей и пилить шаблон. Ну как бы на вкус и цвет. Целью создания движка данного блога небыло его дальнейшее распространение или коммерческое использование, целью было исключительно научится "писать" на замечательном yii :)

[guest] Старожил
Было сказано: Среда, 11 Январь 2012
zolter, скажи пожалуйста, как превратить ссылку в картинку? Из БД вытащил адрес картинки, а вот вывести на экран саму картинку не получается. Лишь ссылка. Какие параметры необходимо использовать?

[guest] milkaa
Было сказано: Четверг, 02 Февраль 2012
zolter, скажи пожалуйста, зачем нужны папки "../assets", "commands" и "runtime"? Я почитал, первая папка нужна для cron'а. После этого у меня возник вопрос, нужно ли очищать папки "../assets" и "runtime"? Вручную ил через cron?
Спасибо!


