А это клавиатура, с помощью которой я творю...
http://kurepin.ru/php/navigator/
Rambler's Top100
Пишем на PHP: Опять оформление, навигатор, новости

Согласно триду "Куда дальше", что на форуме forum.kurepin.ru, сегодня мы уделяем внимание внешнему виду сайта.

Надо вспомнить, что мы изначально ориентировали наш проект на создание "странички обозревателя". То есть, сайт должен выполнять функции управляемого сайта с текстами, рубриками, новостями, рассылками. Вот и будем внешний вид ориентировать на это.

Но перед тем, как перейти к скриптам, хочу ответить на популярный вопрос: "Почему мы храним тексты в файлах на диске, а не в базе данных?".

Хранение текстов в базе, текстовых файлах или еще где-то — дело программиста. Лично я могу назвать несколько десятков причин в пользу того или иного способа. Но в нашем случае это связано только с тем, что мне хочется, как можно шире охватить возможности PHP — показать максимум приемов программирования и способов хранения и обработки информации.

И еще. Прошлую задачу по SQL успешно решили, ответы можно найти, как всегда, на forum.kurepin.ru, а я задаю следующую.

На том же форуме недавно вставал вопрос о том, как передавать данные из формы в PHP, если в форме присутствуют "чекбоксы". Как определить — отмечен был чекбокс или нет? Как правильно давать имена чекбоксам при формировании их списка из базы. Этот вопрос мы быстро разрешили.

И на основе этой беседы я задаю задание более сложное.

Представьте, что вы программируете систему документооборота. У вас, помимо всего, существует условие доступа нескольких уровней для нескольких групп. И вам надо написать web-функцию редактирования доступа пользователю.

Пример. Как это на экране.

Управляющий выбирает из списка пользователей одну персону и на экран выводится таблица:

[доступ] [название группы]
[доступ] [название группы]
[доступ] [название группы]
[доступ] [название группы]


где:

доступ — выпадающее меню с вариантами (нет доступа, только чтение, редактирование, администрирование);

название группы — есть название группы, к которой применяется данный доступ.

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

Управляющий выставляет напротив каждой группы уровень доступа и нажимает "Сохранить". Данные сохраняются.

"Как правильно сгенерировать такую форму?" — это первый вопрос. То есть, как правильно назвать все переменные формы и какие значения им присвоить.

И вопрос второй — более интересный: "Как обработать эти данный в PHP, после нажатия кнопки "Сохранить", напишите оптимальный и/или красивый код".

Подумаете над вопросом чуть позже, а мы возвращаемся к нашим кудрявым...

Переделаем навигатора. Это полоска сверху и снизу, если вы уже забыли.

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

Для этого немного переделаем файл navigator.inc, в котором хранится сам навигатор.

Что переделаем?

1. Установим выравнивание к левому краю.
2. Вместо готового текста сделаем присваивание текста переменной $NAVIGATOR в vars.classи ее вывод в navigator.inc. Это делается для того, чтобы в любом html-файле нашего проекта мы могли как угодно переопределить вывод этой строки: дополнить, изменить, стереть ее.
3. Добавим отдельный стиль файл style.css для навигатора.

Вот, что у меня получилось:

1. В vars.inc дописал:


2. Файл navigator.inc теперь выглядит вот так:


3. А в style.css добавил:


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

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

Например, в файл /cat/index.php следует добавить где-нибудь в начале, но уже после создания экземпляра класса и получения названия рубрики:


А вывод названия рубрики в тексте уже можно убрать.

А можно и не убирать. Давайте лучше его отцентруем и придадим вид заголовка при помощи CSS. Для этого у нас в CSS определен тип text_title. Только цвет мы ему изменим с серого на коричневый — так веселее.

Таким образом, файл /cat/index.php у нас выглядит теперь следующим образом:


Можно было бы и не брать в тэг <a> ссылку на данную рубрику. Все равно, она ведет на эту же страницу. Но пользователя надо приучать посетителя к тому, что навигатор позволяет кликать по любому слову в его строке. Кроме того, заход на эту же страницу бывает удобен, когда пользователь на странице что-то натворил и хочет ее обновить. В этом случае он и будет кликать в эту ссылку.

Слово "рубрики" я добавил в навигатор на будущее. Надо будет сделать страницу, посвященную рубрикам, на которой каждому названию рубрики будет дана своя аннотация или просто расшифровка короткого названия рубрики. Мне кажется, что это не помешает.

Теперь давайте немного причешем заглавную страницу. Или "морду", как ее часто называют web-дизайнеры.

Предлагаю для начала разместить на морде информацию о сайте и подключить новости.

Краткую информацию о сайте можно вписать прямо файл index.php, так как этот текст вряд ли нам еще где-то понадобится. Пишу...


... и копирую это в index.php

Теперь новости.

Честно говоря, я нахожусь в некотором замешательстве по поводу новостей.

Дело в том, что я всю жизнь новости хранил в текстовом файле и просто подключал его в нужном месте сайта. Но для нас создать новый текстовый файл и подключить его к сайту — не задача давно. Но и усложнять этот процесс не очень бы хотелось, дабы меня не обвинили в чрезмерных заморочках на пустом месте.

Давайте так! Мы будем хранить новости в текстовом файле, но саму работу с новостями овеем особым подходом и особой обработкой.

Я говорю о том, что новости мы будем добавлять, сортировать, вырезать, составлять дайджесты и прочее — из текстового файла, а не из базы данных. Таким образом, мы сможем хорошенько потренироваться в работе с файлами. А работы с базой у нас и так будет предостаточно.

В начале сегодняшнего выпуска я и писал о том, что хранение данных в файлах и в БД имеют свои достоинства и недостатки. Поэтому, уметь работать с файлами — это тоже очень важно. Может быть даже важнее, чем с SQL-базой. Вам не лишнее будет узнать, что все огромные проекты в Рунете делаются на файлах гораздо чаще, чем на SQL. В качестве примера можно привести такие известные всем проекты, как: счетчик Rambler, баннерная сеть RLE, издание Lenta.ru и другие. И тому есть свои причины, поверьте.

Я опять отвлекся.

Значит так. Нам надо разработать форму хранения новостей в текстовых файлах.

Предлагаю хранить следующим образом. Каждая новость располагается в одной строке и состоит из четырех составляющих:
1. Дата
2. Время
3. Анонс
4. Новость

Все четыре составляющие записываются в одной строке, а в качестве уникального разделителя предлагаю использовать двойную тильду "~~". Такое сочетание крайне редко используется в тексте. Разве что в графическом "украшательстве текстов", поэтому нам не светит включать в новость такое сочетание символов: мы смело можем считать это сочетание разделителем составляющих новости.


Строки хранятся в файле — одна за другой.

Пустые строки игнорируются.

Строки, начинающиеся с "#", считаем комментариями и внимания не обращаем.


    Кстати, этот знак имеет тоже несколько неофициальных названий, среди которых самым распространенным среди программистов является "тюрьма".


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

Новости будем хранить в отдельной директории /news/ на одном уровне с другими основными папками: inc, req и другими. В этой директории будут хранится файлы-исходники, из которых будут формироваться другие файлы, видимые на сайте. Те файлы, что видны на сайте, временные файлы, файлы-архивы.

Основной/активный файл с кратким списком новостей назовем main.inc, его и прицепим на главную страницу.

Вот так выглядит файл index.php — морда нашего проекта:


Интересный момент — обратите внимание — все фрагменты в этом файле подключаются без проверки на существование файла, а новости я предварил проверкой. Как думаете, почему?

И не забудьте в vars.class добавить новую переменную. Догадались какую? Ну, PHP вам укажет на ошибку, если забудете.

За сим прощаюсь до завтра.


[шаг назад] [печатать] [в начало сайта]



copyright ©2000-2017 Ruslan Kurepin