Пришла пора применить все наши текущие знания, а заодно немножко попрактиковаться.
Для начала давайте почистим наш сайт от мусора и лишних файлов. Удалите welcome.php из папки с Контроллерами и файл с таким же названием из папки с Видами. Ну а чтобы Кохана не ругалась на отсутствующий Контроллер по умолчанию (коим и являлся Контроллер welcome), сделаем Controller_Page таковым. Для этого добавьте в него метод action_index, т.е. полностью Контроллер будет выглядеть следующим образом:
<?php defined('SYSPATH') or die('No direct script access.'); class Controller_Page extends Controller_Common { // Главная страница public function action_index() { $content = View::factory('/pages/show'); $this->template->content = $content; } // Страница о сайте public function action_about() { $content = View::factory('/pages/about'); $this->template->content = $content; } // Страница контактов public function action_contacts() { $content = View::factory('/pages/contacts'); $this->template->content = $content; } } // End Page
И давайте сразу поставим его в файле bootstrap.php в качестве Контроллера по умолчанию. Делается это очень просто и выглядит вот так:
/** * Set the routes. Each route must have a minimum of a name, a URI and a set of * defaults for the URI. */ Route::set('default', '(<controller>(/<action>(/<id>)))') ->defaults(array( 'controller' => 'page', 'action' => 'index', ));
Ну и конечно нужно создать файл Вида, который, как вы наверное уже догадались, будет называться show.php. Пусть в нем будет пока просто текст:
<h3>Это главная страница</h3>
Теперь создайте папку public в корне нашего сайта и в ней папки css (тут мы будем хранить стили), images (тут мы будем хранить картинки) и js (тут мы будем хранить ява-скрипты) и пока достаточно. Создайте в папке css файл main.css (это будет основной файл стилей) и поместите туда следующий код:
@charset "utf-8"; /* CSS Document */ * {padding:0; margin:0;} html, body {width:100%; height:100%;} body {font-family:Tahoma, Geneva, sans-serif; font-size:12px; color:#000; background-color:#fff;} a {text-decoration:none; outline:none; border:none;} a img {border:none; outline:none;} .layer {width:100%; position:relative;} .container {margin:0 auto; width:1000px; border:#999 1px solid;}
Теперь нам нужно прописать каким-то образом путь к этому css-файлу. Для начала в нашем базовом Контроллере, который находится в файле common.php, меняем строчку со стилями на такую:
$this->template->styles = array('main');
Т.е. мы поменяли строку на массив и теперь у нашего шаблона может быть не один, а сразу несколько файлов стилей. Ну а чтобы сделать это возможным, сделаем внутри тега head основного шаблона перебор массива со стилями. И заодно добавим парочку основных блоков. В итоге основной шаблон Вида main.php будет выглядеть следующим образом (пока что):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title><?php echo $title; ?></title> <meta name="description" content="<?php echo $description; ?>" /> <?php foreach($styles as $style): ?> <link href="<?php echo URL::base(); ?>public/css/<?php echo $style; ?>.css" rel="stylesheet" type="text/css" /> <?php endforeach; ?> </head> <body> <div class="layer"> <div class="container"> <?php echo $content; ?> </div> </div> </body> </html>
Здесь должно быть все понятно, кроме разве что части адреса: echo URL::base();. Помните в файле bootstrap.php был массив:
Kohana::init(array( 'base_url' => '/', ... ));
Вот это этот самый базовый url и есть.
Теперь можете запустить сайт. Вы должны увидеть текст Это главная страница внутри серой рамочки. Пока мало похоже на блог, но основу мы уже сделали. А улучшать ее мы будем в следующем уроке.
<< Назад | Вперед >> |
Пожалуйста, зарегистрируйтесь для комментирования.
Если использовать хелпер, то наверное так прикольнее:
$this->template->styles[] = ‘media/css/style1.css’;
$this->template->styles[] = ‘media/css/style2.css’;
опа, php теги вырезало)
foreach ($styles as $style) echo Html::style($style)
Ну как вариант )
Спасибо за замечание. Просто хелперы мы будем рассматривать отдельно.
Дизайн будете менять — в код движка полезете? Не нужно подобного, проще в шаблоне URL::site использовать.
согласен с вами. так и будем делать. тем более, что тогда будет возможность реализовать несколько шаблонов, как это сделано во всех цмс.
Спасибо! Взахлёб всё изучил, и так внезапно оборвался… Вроде понял структуру коханы, но самому лезть разбираться не хочется. В общем, жду продолжения!
Пожалуйста. Этот урок вообще два дня назад был написан. А сайту всего полтора месяца. Для такого срока вполне достаточно материала, учитывая мою загруженность.
У меня есть сайт, движок писал сам на php. Сайт работает, но на код теперь даже мне самому страшно смотреть, поэтому и решил изучать кохану и полностью перевести тот сайт на кохану. Хостинг покупал у reg.ru. Вопрос: пройдёт ли кохана enviroment test у вышеуказанного хостера?
Думаю да. А вы можете проверить, залив кохану в какую-нибудь папку на вашем сайте. Только надо будет base_url прописать и в .htaccess поменять RewriteBase.
Тоже считаю что стили надо подключать традиционными методами. Особенно если делать как положено с условными комментариями для старых браузеров и режима совместимости (человек может просто в эксплорере кнопку совместимости нажать не зная о ее существовании в принципе, а вся верстка упадет).
Да и верстальщику проще и логичнее видеть подключения стилей в теле шаблона (мне так однозначно).
У меня, при обращении к http://kohana.ru/public/css/main.css выдает ошибку «Unable to find a route to match the URI: public/css/main.css».
Видимо Kohana полагает, что я хочу вызвать метод класса контроллера css. В чём ошибка и как сделать доступным обращение к файлам?
Кстати говоря, строку View::factory(‘/pages/about’) мне приходится писать View::factory(‘../pages/about’) иначе фейл.
Упс, извиняюсь. Создал public в appliocation..
здраствуйте! во первых спасибо за понятную инфу!
вот у мя проблемка следующего характера:
если посмотреть на страничку изнутри то ссылка на css генирируются правильно
но стиль почему то не привязывается((
я уже тычу раз все проверил вроде все как у вас написано,
даже уже дошло до того что код от сюда копировал результат нулевой( в чем может быть проблема?
Трудно сказать. Какая ссылка генерируется и где лежат стили относительно корня сайта ?
решил проблему. я просто думал что корень сайта в данном случае является папка application и создал в ней public. час вот асинило и выкинул public из application и все работает.
просто корень сайта он и в африке корень))
я что-то такое и предполагал
Примерно такая же проблема возникла, но я закинул папки css,img,js просто в корень, в папочку public_html, бывает =)
Я предлагаю немного видоизменить способ подгрузки таблицы стилей.
main.php
vpaste.net/aoaig
common.php
vpaste.net/FveB8
P.S. Раз в этом блоге не реализована грамотная вставка кода (примеров, кусков), неплохо было бы под (над) полем ввода комментариев указать, что код можно вставить на pastebin.com, vpaste.net, codepaste.ru и т.п.
P.P.S. Не плохо было бы подправить таблицу стилей данной темы оформления WP, чтоб при выборе пункта меню слева, когда он является текущим, как то цветовыделять его что ли, или подчеркивать. Что нибудь в этом роде. А то прокручиваешь наверх после прочтения документа, читаешь заголовок документа, потом ищешь глазами точно такой же заголовок в меню с лева и жмёшь на ссылку ниже, чтоб перейти на следующий урок. Я конечно понимаю, что под уроком есть ссылки «Далее» и «Назад», но не всегда находишься именно там. Как думаешь?
Что насчёт второго?
здравствуйте! хорошие уроки тут на сайте..спасибо автору!
я предлагаю добавить в конце строки линка
<link href="public/css/.css» rel=»stylesheet» type=»text/css» />
вот такое
если будет более одного линка css..чтоб html был в удобочитаемом виде.
Он и так в довольно удобочитаемом виде.
добавить ..))
Почему тут используется array @$this->template->styles = array(‘main’);@ укажите плюсы, просто я туп, что бы дойти самому
ахахах, все понял понял
Можно использовать несколько стилей.