Получение документа по url?

Tartyga

Новичок
Как лучше организовать получение документа по ЧПУ с возможностью хранения документов с идентичными псевдонимами, но разными "родителями"?
Например:
/parent_1/item_1
/parent_2/item_1
/parent_3/parent_3_1/item_1

Пока вижу два варианта:
1. Хранить полный путь к документу
плюс: относительно быстрый поиск документа, легкая генерация (в шаблоне) ссылки по id документа
минус: при изменении псевдонима у родителя придется обновлять у всех детей, их детей и т.д.

2. Получение документов по псевдониму и если более одного документа исключать по родителю.
плюс: храним только небольшой псевдоним
минус: возможно много итераций, например:
/parent_1/parent_a/parent_b/parent_c/.../item
/parent_2/parent_a/parent_b/parent_c/.../item

Еще можно как второй вариант, только выборку делать от родителя к ребенку.
 
Последнее редактирование:

hell0w0rd

Продвинутый новичок
Tartyga
не ясна задача, отсюда не понятно как ее решать)
Роуты на статические страницы, или на динамические в роутере?
если первый случай - я бы хранил роуты как строки и текст к ним. Для админки можно сделать интеллектуальное автодополнение, на основе всех этих строк, разбитых по /
 

Tartyga

Новичок
hell0w0rd
Так, как бы объяснить понятнее?))
К примеру: документы в базе (статичные страницы сайта, самое обычное дерево!)
id | parent_id | alias | ...

Имеются страницы: mysite/section1/category1/page1 и mysite/section2/category1/page1
если мы будем хранить весь путь к документу в "alias", тогда при изменении алиаса родителя придется обновлять все дочерние ресурсы, а если мы будем хранить лишь псевдоним (alias='page1'), тогда в случае если более 1-го документа надо рекурсивно идти по урлу и исключать по родителю.
В первом случае, нам надо следить за актуальностью полного пути у дочерних элементов, плюс большие значения в алиасе, а во втором варианте может получиться долгий поиск документа. Конечно, если ресурс небольшой и грамотное кэширование особых проблем не должно возникнуть. Но какой подход выбрать, если проект высоконагруженный и часто обновляется? Разумеется если псевдонимы будут уникальными (так у меня сейчас) такой проблемы не возникает.
Может кто заморачивался по этому поводу и подскажет хорошее умное решение!?)
 

С.

Продвинутый новичок
Не стоито подгонять структуру даных приложнеия под ЧПУ. Никакого удобства это ЧПУ не даст, а вот от Гугла минус получить -- запросто.
 

Tartyga

Новичок
Народ, а кто нибудь может конструктивное предложение внести, а то советы о том надо или нет не совсем то!))
С. - я не слишком силен в вопросах СЕО, но с людьми компетентными в этом вопросе общаюсь, и о минусах в ЧПУ слышу впервые! На сколько знаю, поисковые системы нормально смотрят и на "sec=1&cat=1&page=1" и на "section1/category1/page1".
Зато последнее кажется более дружелюбно по отношению к пользователям!
 

С.

Продвинутый новичок
Конструктивно и по делу надо "page=1" или "/page1". Все дополнительные вариации к этому -- от лукавого. А посему и конструктивного ответа на твои извракщения не может быть. Как не сделаешь, все будет коряво.
 

hell0w0rd

Продвинутый новичок
Ага, очень дружелюбно: site.ru/1/2/123/1 - это хрень, а не чпу. Вот на этом сайте чпу, и id для системы есть, и пользователю понятно о чем пост, взглянув на адрес

По теме, если ты хочешь сделать по хорошему - надо делать со старых урлов редирект на новый. вот пример как на гитхабе это происходит: https://github.com/hell0w0rd/dbal
 

С.

Продвинутый новичок
я не слишком силен в вопросах СЕО, но с людьми компетентными в этом вопросе общаюсь, и о минусах в ЧПУ слышу впервые!
А ЧПУ тут и не при чем. Минусы будут за дублирование одних и тех же страниц под разными урлами.
 

AmdY

Пью пиво
Команда форума
Tartyga
а ты подумай с точки зрения пользователя. я вот в твоём магазине нашёл клёвый плазменный телик, сохранил на него ссылку. бросил её в твиттер, поделился на фейсбуке.. Ты в этот момент поменял одну букву чпу и всё, лишился десятка потенциальных клиентов. ЧПУ нужно только для поисковиков, 99% пользователей на УРЛ даже не смотрят и не набирают его сами, даже вконтакт открывают через поисковик.
 

hell0w0rd

Продвинутый новичок
А ЧПУ тут и не при чем. Минусы будут за дублирование одних и тех же страниц под разными урлами.
И в чем минус? Главное сделать нормальное перенаправление, иначе будет та ситуация, которую описал Amdy
 

Tartyga

Новичок
Блин, видимо я неясно выражаюсь, что меня никак не поймут!)))
Я сейчас делаю новый проект (никаких замен урлов или редиректов). Хочу, чтобы у манагера была возможность повторения псевдонимов страниц в разных родителях.
То есть, чтобы например имело место: /nashi_raboty/stoly.html и /tovary/stoly.html, а не чтобы stoly.html и stoly1.html к примеру.

hell0w0rd
Ага, очень дружелюбно: site.ru/1/2/123/1 - это хрень, а не чпу
- я о том же и говорю! С таким урлом какие проблемы, по id бери документ и все!))

С.
Конструктивно и по делу надо "page=1" или "/page1". Все дополнительные вариации к этому -- от лукавого. А посему и конструктивного ответа на твои извракщения не может быть. Как не сделаешь, все будет коряво.
- то есть никаких вложений и только уникальный алиас для всех документов (site.ru/page1, site.ru/page2 и т.д.)??

А ЧПУ тут и не при чем. Минусы будут за дублирование одних и тех же страниц под разными урлами.
- о каком дублировании идет речь?

AmdY
я вот в твоём магазине нашёл клёвый плазменный телик, сохранил на него ссылку...
Понятно, что изменять ссылки очень болезненно для сайта, но запретить эту возможность в админке думаю тоже не вариант!

Короче, поразмыслив пришел к выводу, что случаев с повторениями псевдонимов (пусть например это транслит от заголовка страницы) будет мало, так что поиск документа в базе будет по нему и при нахождении более 1-го документа исключать по родителю.
 

Tartyga

Новичок
keltanas
И еще раз, вот суть моего вопроса, на пальцах:
site.ru/razdel/category/my_page.html
PHP:
$result = mysql_query("SELECT * FROM `pages` WHERE `alias`='razdel/category/my_page.html'");
либо
PHP:
$uri = array_reverse(explode('/', 'razdel/category/my_page'));

$result = mysql_query("SELECT * FROM `pages` WHERE `alias`='".$uri[0]."'");
.........
if(count($result) > 1)
{
    $result = mysql_query("SELECT t1.* FROM pages t1, pages t2 WHERE t1.alias='".$uri[0]."' AND t2.alias='".$uri[1]."' AND t2.id=t1.parent");
    (это для примера, понятно что надо рекурсивно идти по массиву пока count не будет = 1)
}
В первом варианте храним в поле alias весть путь: razdel/category/my_page.html. Как следствие, меняем например razdel на razdels и после бежим по всем вложенным документам и переписываем алиасы, не говоря уже о лишних данных в базе!

Второй вариант может привести к лишним запросам чтобы найти всего одну страницу.

Мой вопрос касался того, как лучше организовать поиск документа в базе в случае если есть документы с одинаковыми алиасами (не дубли всего урла и не дублирование контента под разными урлами)
 

hell0w0rd

Продвинутый новичок
Tartyga
Для поисковой системы /bla/bla и /foo/bla - разные урлы. Она не понимает что это какие-то там каталоги/алиасы и тд.
То что ты хочешь сделать - никому не нужно. А вот система смены урла - была бы полезна, где при переходе по /bla/bla, была бы переадресация на /foo/bla, или на оборот в зависимости от
 

Tartyga

Новичок
Блин, никто не понимает, что я пытаюсь выяснить, может я по китайски пишу и сам не замечаю?))
Приплели поисковые системы, редиректы, какие то рассуждения про ЧПУ и т.д., я спрашиваю одно, а все упорно закидывают сообщениями и ссылками не по моему вопросу.
Я спрашиваю конкретно про mysql и php, как наиболее грамотно организовать поиск документа в базе - не по ID, а по псевдониму (под псевдонимом я подразумеваю некоторое слово, например транслит от заголовка страницы, которое используется в части урл).

hell0w0rd
Для поисковой системы /bla/bla и /foo/bla - разные урлы.
Спасибо кэп, я в курсе!)
То что ты хочешь сделать - никому не нужно.
Вообще то я делаю заказ под конкретного клиента, у него уже есть один сайт на modx (ковырять сайт мне досталось в наследство) и данная ситуация имеет место быть. Например есть 2 страницы в разных разделах, которые называются "Контактные линзы".
Так вот, у первой страницы псевдоним "kontaktnye_linzy.html" (site.ru/какой_то_раздел/kontaktnye_linzy.html) у второй "kontaktnye_linzy1.html" (site.ru/другой_раздел/kontaktnye_linzy1.html) и на это заказчик обращает внимание, он не хочет чтобы добавлялась "1".
 

С.

Продвинутый новичок
Блин, никто не понимает, что я пытаюсь выяснить, может я по китайски пишу и сам не замечаю?))
Да нет, немного не так. Просто ты мыслишь коротко. А тут народ собрался все больше опытный и мыслит шире и комплексно, видя все твои ошибки, который ты пытаешься заложить.

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

Tartyga

Новичок
С.
Просто ты мыслишь коротко
Если бы я мыслил коротко, я бы тут не написал, а сделал бы заказчику на том же modx обновленный сайт и не парился. Поразмыслив над ТЗ я решил, что такая полумера не подойдет, закинул на сервак kohana и приступил к изваянию)))
В процессе написания, задумался, а как быть, если чел в разных разделах задаст одинаковое имя страницам? Ага, значит искать страничку по псевдониму не вариант, это поле нельзя делать уникальным. Прикинув варианты определился с плюсами и минусами.
Для себя уже решил, как буду делать, но думаю напишу на форум, посоветуюсь, две головы все же лучше... В итоге куча размышлений не по теме.
ты не хочешь учиться и готов выполнять любые тупые требования
Уважаемый, я не собираюсь мерится тут приборами, чей кунг-фу лучше и т.д., но за лет десять практики кое чему научился в общении с клиентами. Заказчик платит деньги, ты фильтруешь его бред и принимаешь оптимальное решение, как следствие долгое плодотворное сотрудничество))
А тут народ собрался все больше опытный и мыслит шире и комплексно, видя все твои ошибки, который ты пытаешься заложить.
Надо же, то есть, мое стремление сделать гибких функционал админки и чтобы сайт не загнулся на 100к запросах - это узкое мышление?!)
 

Tartyga

Новичок
С.
Сейчас 2 раза перечитал ветку и ни как не могу уловить нить моей ошибки. Попытаюсь разобрать каждый момент отдельно, чтобы внести ясность:
Скажите пожалуйста, что плохого в следующих адресах:
site.ru/o_kompanii/raboty/tumbochki.html и site.ru/katalog/mebel/tumbochki.html
Обратите внимание, это разные страницы, но у обеих страниц псевдоним "tumbochki", но они находятся в разных разделах!!!!!
 
Сверху