Думаю как лучше спроектировать сайт с поддержкой множества городов.
Сайт->город->объект
Сейчас это выглядит так: site.com/catalog/?city=132&salon=12
А думаю может лучше так: site.com/catalog/moskow/?salon=12
Или даже: site.com/catalog/moskow/sonystore
Данные в базе:
INSERT INTO `city` VALUES (город_id, страна_id, регион_id, 'Москва');
Проблема к том, что запрос парсерится так, что страничка (модуль, ресурс) запрашивается из базы по полному пути (subcat/cat/node/innet):
- site.com/catalog/ так он выдаст то что надо
- site.com/catalog/moskow/ А по такому запрому физически просто ничего в базе нет.
Проблема2, в базе имена кириллицей в урле латиницей. И что если в разных регионах совпадут названия городов, или с Украиной например.
Если бы было мало городов, то можно было бы в структуре ресурсов для каждого города создать каталог, но нужно все города.
И имеет ли это смысл вообще делать? Хотя бы с точки поискового продвижения.
Вообще с этого вопрос и пошел, хочется стандартизировать, и не гадать, в каких константах есть слеш, в каких нет. Т.к. столкнулся с тем. что в WINNT, выдается DR уже со слешем... поэтому пока решил писать так
Читаю шаблоны проектирования, но тоже не вижу конкретного применения. Пока использую статические классы, без наследования. Ну максимум класс возвращающий объекты по запросу. Хотя уже так гораздо удобнее чем, без ООП. А вот как писать интерфейсами, не доходит... Попробую написать интерфейс к модулям для страничек...
Проблема: на формирование некоторых редко обновляемых блоков приходится каждый раз выполнять много запросов к базе, например, - меню. Меню состоит из категорий Id, надо пройтись по этому списку и вернуть для каждого объект, из объекта getTitle, getFullUrl для вставки в меню. Еще некоторые условия, вывод в шаблон и тд.
В принципе уже сгенерировынный код меню можно хранить в файловом кэше.
Т.е. когда будет проходить любое действие с меню, или категорией (редактирование, добавление, удаление, перенос, опции). Весь кэш этого типа удаляется (все типа меню).
Вроде работает, если везде где надо удалять кэш, после обновлений.
Тут еще подумал. Что можно кэшировать и другие сущности. Например базовые настройки сайта. Данные и настройки категорий.
Например, еще проблемные моменты:
1. Каждый раз генерировать Title. Это надо пройтись по родителям catalog/dom/vedro/cat чтобы забрать тайтлы родителей + название сайта.
2. Breadcrumbs опять же приходится пройтись. Что бы из "catalog/dom/vedro/cat" сделать: "Главная / Каталог / Дом / Ведро / Кот"
INSERT INTO tablename(url) SELECT ...
Это по сути копирование всей строки. А если нужно только одну ячейку скопировать, а остальные данные придут из php?
Нужно в новую строку поместить данные из родительского узла (другой строки этой же таблицы). Единственное про пришло это запросом отправить такую конструкция, чтобы не делать два запроса из php. Какие есть пути для решения задачи?