Продолжим совершенствовать наш блог. Основное, что есть практически на любом сайте (а не только блоге) — это лого, меню со ссылками и футер. Сделаем их. Поскольку эти компоненты присутствуют на всех страницах сайта и к тому же они одинаковы, засунем их прямиком в главный шаблон:
<!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"> <div class="header"><h1>Логотип</h1></div> <div class="left"> <h3>Меню</h3> <br /> <ul> <li><a href="<?php echo URL::site(); ?>">Главная</a></li> <li><a href="<?php echo URL::site('page/about'); ?>">О сайте</a></li> <li><a href="<?php echo URL::site('page/contacts'); ?>">Мои контакты</a></li> </ul> </div> <div class="content"><?php echo $content; ?></div> <div class="clearing"></div> <div class="footer">2011 Все права защищены</div> </div> </div> </body> </html>
Вы видите, что я добавил блок header, меню в виде списка в блоке left, блок content, в котором будет выводиться контент и footer. Вообще конечно меню лучше всего оформить в виде Виджета, для большей гибкости, но это все мы сделаем потом. Пока идем от простого к сложному. Обратите еще внимание на формирование ссылок. Для них мы используем статический метод site.
Теперь подправим файл стилей:
@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; color:#333;} a img {border:none; outline:none;} .clearing {clear:both;} .layer {width:100%; margin-top:10px; position:relative;} .container {margin:0 auto; width:1000px;} .header {width:100%; height:80px; border:#999 1px solid; margin-bottom:10px; padding-top:20px; text-align:center;} .left {width:290px; float:left; border:#999 1px solid; padding:5px;} .left ul {margin:0; padding:0;} .left ul li {list-style:none;} .content {width:676px; float:left; border:#999 1px solid; margin-left:10px; padding:5px;} .footer {width:100%; height:20px; border:#999 1px solid; margin-top:10px; padding-top:5px; text-align:center;}
Осталось добавить в шаблон show.php из папки pages какой-нибудь пробный текст и можно запускать. У меня получилась вот такая красота (кликабельно), немножко кривая:
Попробуйте понажимать на ссылки, все должно работать. При этом видно, что меняется только блок контента. Главный шаблон загружается всегда, на то он и главный. В других источниках вы можете встретить вариацию, когда главный шаблон тоже нарезается на несколько шаблонов — хидер отдельно, футер отдельно и т.д. Конечно я могу это понять, если на разных страницах разный хидер, но я такого что-то не встречал. Разве что для админки. Но для нее обычно делается отдельный главный шаблон.
Конечно это еще не блог (нет ни админки, ни возможности комментирования, да еще много чего нет), но вполне уже идет под сайт-визитку, при наличии красивого дизайна. Достаточно добавить ссылок, прописать все новые шаблоны в контроллере и заполнить их текстом и все. А главное делается за 20 минут. Но естественно никто (я надеюсь) не использует фреймворки для сайтов-визиток. Хотя…Но не будем о грустном.
В продолжении мы будем рассматривать Роутинг в Кохане. Это достаточно большая и очень важная тема, поэтому она охватит сразу несколько уроков. До новых встреч.
Пожалуйста, зарегистрируйтесь для комментирования.
Спасибо то спасибо, но если используете хелперы, то может все-таки
echo Html::style($style)
использовать, а не
<link href="public/css/.css» rel=»stylesheet» type=»text/css» />
Если добавить php-теги, то выигрыш в лаконичности при использовании хелпера сведется к нулю.
Хелперы — дело добровольное. Например, хелперы для генерации формы меня вообще бесят )
))
<link href=" public/css/.css» rel=»stylesheet» type=»text/css» />
Блин, снова теги вырезало.
Хелперы будут рассматриваться отдельно. Там сразу и переделаем в качестве примера. Все надо делать постепенно и не писать сразу обо всем. Иначе люди ничего не поймут, а только запутаются.
Спасибо автору за данный сайт ,когда следующий урок?
На неделе напишу. Пока работы много.
Предлагаю автору сделать кнопку Donate для стимуляции процесса написания и уменьшения времени ожидания между статьями/уроками
Готов сразу заюзать только за то, что УЖЕ есть на сайте и что я успел изучить.
У автора талант преподавания — всё грамотно, чётко и понятно.
Спасибо.
Я думал об этом Попозже наверное сделаю. Но это будет в любом случае сугубо добровольно, уроки будут выходить и так. Просто, как вы правильно сказали, со стимуляцией быстрее думается
На то кнопка Donate и нужна, чтобы добровольно Думаю рублём (и не одним) каждый готов поделиться за Ваш труд.
Будем ждать ) .Еще маленький вопрос как вывести отдельно время генерации в kohane через профайлер ,от гугла толку мало. Может вы знаете ? )
Что-то упустил вопрос )
echo View::factory(‘profiler/stats’);
не устраивает ?
Можно так, без профайлера
function usageTimeAndMemory()
{
return
‘Time: ‘ . number_format((microtime(TRUE) — KOHANA_START_TIME), 4) . ‘s | ‘ .
‘Memory: ‘ . number_format((memory_get_usage() — KOHANA_START_MEMORY) / 1024 / 1024 , 1) . ‘MB’;
}
Спасибо вам огромное за труд! С вашей помощью очень легко изучать данный фрэймворк.
У меня такой вопрос — почему в ссылках вы используете URL запрос? Нельзя ли просто ставить так:
a href = «page/contacts» (делаю без тегов, но думаю, что все и так поняли
Спасибо еще раз.
В таком случае могут возникнуть проблемы с адресами при перемещении сайта, скажем, в подпапку. А с генерацией через хелпер таких проблем не возникнет.
Да получилось, но не сразу.
С начало не понял как запускать сайт. Оказалось просто:»kohana». Также с корнем сайта с начало не понял, потом понял, что корень www.
И с файлом show с начало его в views поместил, потом переместил в vievs/pages.
Теперь разобрался и всё работает и я рад.
Спасибо автору.
Скажите пожалуйста.. А как вывести данные сразу в 2 вида в index методе и в остальных.К примеру, для вывода одной и той же инфы из базы где нибудь в боковом блоке. Чтобы не повторять в каждом action-Е создание второго вида и передачу данных..=) Создать родительский контроллер от текущего и там 1 раз прописать второй вид, это вариант?
если кто то понял о чем я =) то расскажите как лучше это сделать. Мб я что то упускаю
Такие общие моменты обычно в базовый контроллер выносят.
http://kohanaframework.su/starting/base_controller
В main.css не хватает правила для clearing и, в соответствии с вашей картинкой, padding для container.
Скажите, пожалуйста, когда выбираются пункты меню, то перезагружается вся страница main.php, или только «перезаполняется» содержимое ?
почему-то стёрлось окончание вопроса
Вопрос такой.
Скажите, пожалуйста, когда выбираются пункты меню, то перезагружается вся страница main.php, или только «перезаполняется» содержимое div-а «content» ?
@@
Весь сайт перегружает. Если содержимое дива надо, то можно через аякс. Ну или фреймы прикрутить.
Но поисковики плохо на это посмотрят, оно вам надо ?
Если body, header, footer содержат картинки, то перезагрузка этих элементов при переходе из одного пункта меню на другой не очень хорошо смотрится. Да и с точки зрения эффективности это не лучший подход.
Во-первых, картинки кешируются.
Во-вторых, вы хотите, чтобы при переходах по пунктам меню менялся текст контента, но адрес сайта оставался неизменным ? Тогда учитывайте, что для поисковика это будет одна и та же страница, т.е. поведенческий фактор будет стремится к нулю (пользователь сидит на одной странице).
1. Что нужно сделать, чтобы картинки кэшировались?
Сейчас, при выборе каждого пункта меню (на моём пробном сайте), я вижу как перегружаются фоновые картинки body и header.
2. Объясните, пожалуйста, что такое поведенческий фактор, и почему для нас это важно?
1. Их браузер кеширует. Таким образом при повторном открытии страницы они грузятся с вашего жесткого диска, а не с удаленного сервера.
2. Поисковые машины следят за тем, сколько пользователь пробыл на сайте и куда ходил. Таким образом они определяют «интересность» сайта и могут поднять его в результатах поиска (выдаче). Есть даже сервисы, которые специально накручивают все это дело (люди за деньги переходят с поисковика на ваш сайт и начинают ходить по страницам). Если сделать обновление контента на одной странице, то с точки зрения поисковой машины человек так и будет сидеть лишь на одной странице, что не есть хорошо. Да и страниц в индексе будет намного меньше. Вы можете использовать фреймы, чтобы грузить только один какой-то блок, но они устарели и сейчас почти нигде не используются. Все-таки люди уже не на диал-апе сидят )
Спасибо большое за ответ про поисковики!
Да, я тоже читал, что фреймы уже не рекомендуют использовать. А раньше у меня страница была разбита на header, content и footer с помощью фреймов и при работе с меню перегружался только фрейм с content.
По поводу кэширования.
Но, если содержимое всех остальных элементов страницы (кроме div-а content)содержат много графики, то даже при загрузке с локального диска видно, как все эти элементы перегружаются. Пусть при этом затрачивается меньше времени, чем при загрузке с удалённого сервера, но это «перемигивание», мягко говоря, раздражает
И ещё, если можно, один вопрос.
Скачал javascript peel.js. Этот скрипт «вешает» в верхний угол страницы динамически открывающуюся картинку.
Загружаю этот скрипт в главном шаблоне v_main.php:
Но как только в меню я загружаю другой контроллер, который формирует новое содержимое для $content, то при перезагрузке шаблона v_main скрипт перестаёт работать.
И я никак не пойму, это особенности реализации скрипта, или я что-то делаю не так?
Не отобразился кусок кода в предыдущем вопросе.
Подскажите, пожалуйста, как вставлять в текст фрагмент кода?
Меня не раздражает. По такому принципу работает 99.999999 сайтов. Фреймов я уже лет 5 не встречал.
Код в текст вставляется через тег pre
Пишу
Но эта строка не отображается