Доброго времени суток! Расскажите, пожалуйста (или киньтесь годной статьёй по теме), какие существуют распространённые алгоритмы систем навигации по сайту и чем они отличаются? Я уже пробовал несколько вариантов: 1 – Самая банальная, "тупоссылки". Всем отлично, но если на сайте больше 10ти ссылок, то поддержка превращается в адЪ. 2 – Передавать имя страницы в GET. Звучит, вроде, попроще – смотрим в скрипте index.php запрос, ищем страницу и грузим её. А как быть в случае, если на сайте меняется только контент (шапка, менюшка, подвал, сайдбар статичны)? DRY жёстко нарушается и лень превозмогает. Пробовал так же писать ссылки типа Код (Text): <a href="?active/bowling">bowling</a> Этот второй способ чем кардинально отличается от передачи в $_GET[]? 3 – "Инклудами". То есть, навигация строится по второму способу (передача в $_GET[]), скрипт парсит запрос, достаёт оттуда субдиректорию и название файла, а затем выполняет Код (Text): include_once($header); include_once($menu); include_once($page); //... и т.д. Но при объёме страниц 30+ становится сложно ими управлять. К тому же, я жёстко разделяю обязанности (html - разметка, css - представление) и появляется проблема подключения не только общих css (для шапки, менюшки, подвала и т.п.), но и для конкретной страницы. А именно – в какую иерархию и как их складывать? Я создал /active/bowling, внутри которой лежит index.php, а так же три субдиректории /img, /css и /js, в которых, собственно, картинки (вида 1.jpg, 2.jpg, ..., xxx.jpg), style.css и script.js. От такого количества файлов и директорий уже при 30 страницах кипит мозг и рябит в глазах при взгляде на боковое меню TextMate.. ): Что я делаю криво (понятно, что всё, а конкретнее) и как это поправить? Быть может, я не додумался до какого-то кардинально нового для меня алгоритма? Гугл мне выдаёт только статьи о постраничной навигации, а это абсолютно не то. Спасибо!
Слыхал, с MySQL работал (с остальными не сталкивался на практике), но не строил пользовательских интерфейсов. Каков принцип хранения страниц в таком случае? Какие поля? Для хранения имени и для текста разметки? Но я тогда не понимаю как хранить такие большие тексты в БД, как их резать по частям и как удобно менять стили/скрипты для страниц.
Почему тогда это не написано на странице загрузки (там, где форма)? Хорошо, правила так правила, соблюдаем.
Изучить синтаксис и решить конкретно стоящую задачу при помощи mysql несложно. Моя проблема заключается в непонимании принципа или алгоритма создания навигации по сайту и принципов хранения разметки страниц — уже закончились все идеи, а чтобы сгенерировать новые опыта разработки интерфейсов не имею. Поэтому и обратился сюда за помощью более опытных специалистов.
Попробуй использовать фреимворк. Там все уже продуманно. А когда поймешь что как работает напишешь свое.
Какой, например, фреймворк для моей задачи посоветуете изучить? [offtop]Почему начал изобретать свой велосипед — интересно пройти тот же путь, прочувствовать ошибки, недоработки, возникающие проблемы архитектуры/языка/кода/и т.д. Например, не понял чем хорош JQuery пока не написал сам большинство велосипедов на чистом JS.[/offtop]
Задача, над которой ты так мучаешся, называется "маршрутизация" или "роутинг". Посмотри Yii или Code Igniter, там это гладко разруливается. А для этого существуют шаблоны, ну или просто include 'header.php'...include 'footer.php' )))
Спасибо, раз это поможет решить проблему, то посмотрю оба и изучу. Да Именно сейчас так и генерирую страницу (в моём посте это 3й метод). Контент вставляется очень просто — include_once($content), где $content — адрес php страницы, содержащей только контент. Какую именно страницу грузить главный скрипт понимает парсингом из $_SERVER['QUERY_STRING'], а сами ссылки у меня вида Код (Text): <a href="?pages/somearticle/somepage">somepage</a> В итоге получается, что в директории pages валяется пара разделов с кучей контентостраниц. Чую, что это можно организовать более разумно, но не знаю как ):
С любым фреймворком и любым шаблонизатором у тебя будет "папка с кучей страниц". Так что всё не так плохо.
Дабы не тащить весь фреймворк, можно использовать компонент Router из Symfony2 (по сути - этот фреймворк всего лишь набор отдельных библиотек). Можно воспользоваться роутером из Silex, что тоже в принципе удобно. Можно самому написать http://site.ru/some/path с помощью mod_rewrite превращаем в http://site.ru/router.php?path=some/path а дальше Код (PHP): $pathArray = explode("/", $_GET['path']); $controller = $pathArray[0]; $action = $pathArray[1]; [...]
Идея понятна, спасибо. Насколько я понял, это ещё один способ определения включаемого файла? То бишь, тоже самое, что у меня, но другой способ обработки пути. Почему ненавидят? Чем он плох? Добавлено спустя 9 минут 8 секунд: Я так понимаю, от кучи html/php страничек с контентом не отделаться. А вот каким образом сортируют, структурируют и собирают вместе сотню таких вот страниц "большие игроки вэба"? Есть ли какие-то паттерны проектирования для облегчения жизни верстальщиков в будущем при поддержке проекта или всё зависит от настроения и удобства разработчика?
он всем хорош. вероятно, я точно не знаю, когда рождались популярные CMS он не везде работал. Но я на своём веку не встречал каких проблем с этим параметром. Добавлено спустя 2 минуты 33 секунды: что? что? =) куда собирают? зачем собирают? они парсят $_SERVER['REQUEST_URI'] и суют запросом в БД. результат на экран. =) в обработке урлов? тут только одно правило - чтобы людям нравилось надо юзать ЧПУ.
Вот тут-то и обнаружился мой пробел в понимании, спасибо Что быстрее: include_once($page) или хранить в БД (использую InnoDB)?
Данных немного — предполагается система регистрации пользователей (~1000..1500), личные меню. Общее количество страниц (включая личные) ~100. В самой БД больших объёмов данных (таких как транзакции платежей, магазинные "фичи" и прочие) не предполагается ни сейчас, ни в дальнейшем.
Спасибо за ответы и потраченное время на новичка! Помогли понять основные алгоритмические вещи при построении навигации по сайту igordata, вопрос из любопытства и интереса к php: почему в моих случаях лучше использовать чтение из ненагруженной БД, чем из файла - они ведь оба лежат на диске сервера (если не настраивать специально кэширование БД)?
я не думал о том что вы новичек. =) какие ещё будут вопросы? вы сами планируете это всё кодить или отдавать программистам?
igordata, всё относительно. Пока не смогу написать хотя бы простенькую свою CMS буду считать себя новичком в PHP Всё это кодить я собираюсь сам. Предполагается, что я – квартет Анатолий Только дизайн страниц придумываю не я (только верстаю, но с ней никаких проблем). На данный момент уже готовы: система навигации ("инклудами", но сейчас решил, что перепишу запросами к БД – время есть пока дизайнер рисует странички), свёрстано ~70% всех страниц, есть системы регистрации и аутентификации (сессии+печеньки) и простенькое разграничение прав доступа (гости, зарегистрированные пользователи и админы) к меню/ссылкам/материалам/документам сайта. Да, вопросы у меня ещё есть, но они не связаны с САБЖем. Подскажите, пожалуйста, каков хроший тон на этом форуме: продолжать тему, даже если она с САБЖем не коррелирует или лучше создать новую тему для другого вопроса?