Заготовка для блога — Часть 1

Комментарии: 33  Просмотры: 36 710

Пришла пора применить все наши текущие знания, а заодно немножко попрактиковаться.
Для начала давайте почистим наш сайт от мусора и лишних файлов. Удалите 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 и есть.

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

<< Назад | Вперед >> | Обсудить на форуме


К записи оставлено 33 коммент.

Если использовать хелпер, то наверное так прикольнее:
$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’);@ укажите плюсы, просто я туп, что бы дойти самому

ахахах, все понял понял

Можно использовать несколько стилей.



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

Пожалуйста, зарегистрируйтесь для комментирования.