ФорумПрограммированиеPHP для идиотов → Человечные урлы в каталоге (теория иерархии)

Человечные урлы в каталоге (теория иерархии)

  • pyhtelkin

    Сообщения: 103 Репутация: N Группа: Кто попало

    Spritz Апрель 8, 2008, 12:22 д.п.

    Форумчане, дайте совет, я что-то заблудился в 3х соснах. Задача - сделать каталог, в отличие от сложных - мой по одной теме, поэтому уровней вложения всего 2, без перекрестных ассоциаций. Хотелось бы чтобы листался он по такому принципу:

    http://dir.yahoo.com/Computers_and_Internet/Programming_and_Development/

    т.е.

    <домен.ру><каталог><группа><категория1>
    ——————————-<категория2>
    ——————————-<категорияN>

    Вот у меня и раскололась голова, т.к. до этого я подобного не делал. У меня для упрощения даже появилась мысль пойти на создание физических папок уровня <группа> (их всего 9 и меняться они не будут), в каждой из которых будет лежать шаблон страницы, который уже "пролистывает" содержимое уровня "категория". Особо морочит наличие многих задач, в том числе - представление структуры в базе. При стандартном решении

    Group:
    [id_group] [name_txt] [name_url]
    и
    Category:
    [id_group] [id_category] [name_txt] [name_url]

    возникают вопросы, как представлять потом список категорий, а точнее их коды, выпадающим списком или формой с чекбоксами. Поэтому даже показалось что надо представить весь каталог одноуровневым. Для снятий нагрузки с базы, для некоторых этапов иметь заготовленные списки категорий в виде html файлов (с оформлением в виде дропдаун списков, листов с радиобаттнами/чекбоксами и в виде прочих элементов форм) А при изменении со стороны админа - такие списки(файлы) автоматом перезаписывать.

    Короче пока не могу даже вопрос сформулировать. Я надеюсь поймете о чем я. Из главного - хотелось бы меньше дергать базу и хитаксесс. И конечно сделать урлы без всяких &group. Кстати, каким образом поступила яху? Короче говоря - образумьте.
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz Апрель 8, 2008, 1:11 д.п., спустя 48 минут 27 секунд

    Собственно вопроса не понял =)

    На счет структуры - то она точно такая, просто id не auto_increment'ный, а строковый, естественно, уникальный.
    Дальше работать точно так - принципиальной разницы никакой.

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

    Тут вообще не понял. Ну точно так представлять, как и всегда представляют. Что значит их коды? Зачем чекбоксы?

    Из главного - хотелось бы меньше дергать базу и хитаксесс.

    Ну базу придется при каждой выборке дергать по-любому. Для ЧПУ, опять же, я бы заюзал мод реврайт. Можно обойтись и без него, но, имхо, мод реврайт рулит =)

    Поэтому даже показалось что надо представить весь каталог одноуровневым. Для снятий нагрузки с базы, для некоторых этапов иметь заготовленные списки категорий в виде html файлов (с оформлением в виде дропдаун списков, листов с радиобаттнами/чекбоксами и в виде прочих элементов форм) А при изменении со стороны админа - такие списки(файлы) автоматом перезаписывать.

    Не надо снимать нагрузку с базы, там где она должна быть.

    У меня для упрощения даже появилась мысль пойти на создание физических папок уровня <группа> (их всего 9 и меняться они не будут), в каждой из которых будет лежать шаблон страницы, который уже "пролистывает" содержимое уровня "категория"

    Ага, а можно вообще все сделать на хтмл.
  • pyhtelkin

    Сообщения: 103 Репутация: N Группа: Кто попало

    Spritz Апрель 8, 2008, 2:12 д.п., спустя 1 час 1 минуту 38 секунд

    Да, этот вопрос в стиле "мысли вслух". Но всеже …


    Тут вообще не понял. Ну точно так представлять, как и всегда представляют. Что значит их коды? Зачем чекбоксы?

    Коды - дубликаторы, для "внутреннего пользования". Может потребоваться при необходимости в одном дропдауне поместить все группы и категории каталога (,а не только категории одной группы). Потом, в базе, не будет же каждый элемент(товар) в виде принадлежности к категории, содержать строку ее названия?! И в хтмл это не может быть
    <select value="import">импорт</input>
    Так что цифровые коды нужны. Но так ли это?




    Если представление было правильное:

    GROUPS (group_id, group_name):
    1, import
    2, export

    CATEGORIES (category_id, group_id, category_name):
    1, 1, bolts
    2, 2, bolts

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


    <select name="category">
    <option disabled>ИМПОРТ</option>
    <option value="bolts"> Болты</option>
    <option disabled>ЭКСПОРТ</option>
    <option value="bolts"> Болты</option>
    </select>


    Мне кажется поэтому уникальной строкой категории не обойтись. Решение может выглядить как


    <option value="1_1"> Болты</option> <!– этот болт импортный –>


    но такое значение, придется каждый раз парсить …
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz Апрель 8, 2008, 3:15 д.п., спустя 1 час 2 минуты 18 секунд

    И в хтмл это не может быть
    <select value="import">импорт</input>

    Почему не может?

    Так что цифровые коды нужны. Но так ли это?

    Чем принципиально отличаются цифровые индексы от строковых?
  • dallone

    Сообщения: 48 Репутация: N Группа: Адекваты

    Spritz Апрель 8, 2008, 9:30 д.п., спустя 6 часов 15 минут 25 секунд

    Не надо снимать нагрузку с базы, там где она должна быть.

    ИМХО при больших нагрузках на магазин и не ежеминутно меняющемся ассортименте это вполне оправдано и называется кэширование…

    о_О
  • pyhtelkin

    Сообщения: 103 Репутация: N Группа: Кто попало

    Spritz Апрель 8, 2008, 11:20 п.п., спустя 13 часов 49 минут 32 секунды

    Насчет "кеширования" - это серьезно и разумно. Меняются только товары, категории могут не измениться хоть год. Поэтому дергать базу бывает неблагоразумно.

    -

    S.A.P. не могут потому что названия могут повторяться. Поэтому дал пример с болтами.

    -

    Я видимо был не прав и увел тему не в то русло. Как вы думаете, как реализовано на яху? Я понимамаю что не на пхп )), но сомневаюсь что это подобие мод рерайта.
    Что я совсем не могу понять, как отловить "виртуальные" папки и съимитировать их в адресной строке.





  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz Апрель 8, 2008, 11:45 п.п., спустя 25 минут 45 секунд

    S.A.P. не могут потому что названия могут повторяться. Поэтому дал пример с болтами.

    А вы посмотрите, в некоторых инет магазинах как сделаны товары в урлах. По типу /Mobiles/Mobile-IPhone-2GB.
    Ваша задача как раз в том и состоит, чтобы следить за уникальностью ключа на программном уровне. Болты тоже разные бывают, и я не вижу никакой проблемы, чтобы сделать для них разные индексы.

    Как вы думаете, как реализовано на яху? Я понимамаю что не на пхп )), но сомневаюсь что это подобие мод рерайта.

    Я думаю, это знают только на яху =) Могу только дать ссылку на большинство способов, которыми реализуется ЧПУ.
    http://spectator.ru/technology/php/user_friendly_urls
    Мод реврайт из них самый нормальный.
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Апрель 9, 2008, 12:09 д.п., спустя 24 минуты 1 секунду

    pyhtelkin, слишком много вопросов в одном:

    1. Как с помощью modrewrite получить и разобрать URL? (Про папки забудт нафиг)
    2. Как хранить рубрики в базе?
    3. Как извлекать то что хранится в пункте 2 с помощью того, что получено в пункте 1?
    4. Как организовать кешироване того, что извлечено в пункте 3?

    Давай последовательно, в каком из пунктов у тебя проблема?
  • pyhtelkin

    Сообщения: 103 Репутация: N Группа: Кто попало

    Spritz Апрель 10, 2008, 12:27 д.п., спустя 1 день 17 минут

    Давай последовательно, в каком из пунктов у тебя проблема?

    Да, я тоже понял что сий вопрос слишком объемлющь. Спасибо за понимание, ступор немного сдвинулся, сейчас немножко почитаю и отпишусь.

    S.A.P., если вы говорите что надо таки отказаться от кодов категорий, мне всетаки не хочется верить что тем самым вы предлагаете в свойствах (каждого!) товара категорию указывать тоже строчкой, типа 'export-bolts-m8x1'. Но ведь это же не "спортивно" …

  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz Апрель 10, 2008, 2:45 д.п., спустя 2 часа 17 минут 51 секунду

    Да-да, так и предлагаю. Почему нет?
  • kamachi

    Сообщения: 320 Репутация: N Группа: Кто попало

    Spritz Март 14, 2010, 3:47 п.п., спустя 703 дня 14 часов 1 минуту

    помогите нубу из ссылки вида

    http://site.ru/video_files.php?cat_id=1

    сделать http://site.ru/video/cat/1


    прбоввал так, не пашШет

    RewriteEngine On
    RewriteRule ^video/cat/([0-9]+)$ video_files.php?cat_id=$1 [L,QSA]
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz Март 14, 2010, 3:49 п.п., спустя 1 минуту 58 секунд

    полностью .htaccess покажи
    все умрут, а я изумруд
  • kamachi

    Сообщения: 320 Репутация: N Группа: Кто попало

    Spritz Март 14, 2010, 3:56 п.п., спустя 7 минут 19 секунд


    полностью .htaccess покажи


    RewriteEngine On 
    RewriteRule ^video/cat/([0-9]+)$ video_files.php?cat_id=$1 [L,QSA]

    # задаем соответствие mime типов расширению
    AddType text/vnd.wap.wml;charset=utf-8 .wml
    AddType application/vnd.sonyericsson.mms-template tpl
    AddType application/vnd.wap.wmlc .wmlc
    AddType text/vnd.wap.wmlscript .wmls
    AddType application/vnd.wap.wmlscriptc .wmlsc
    AddType image/vnd.wap.wbmp .wbmp
    AddType application/vnd.eri.thm .thm
    AddType application/vnd.mophun.application .mpn
    AddType application/vnd.mophun.certificate .mpc
    AddType text/vnd.sun.j2me.app-descriptor .jad
    Addtype text/x-vmel .mel
    Addtype audio/imelody .imy
    AddType application/vnd.smaf .mmf
    Addtype text/x-vmel .emy
    AddType audio/amr .amr
    AddType audio/x-wav .wav
    AddType application/x-tar .hid
    Addtype image/jpeg .jpg
    Addtype image/jpeg .jpeg
    Addtype image/gif .gif
    Addtype image/png .png
    Addtype image/bmp .bmp
    Addtype text/x-imelody .imy
    Addtype text/x-emelody .emy
    Addtype text/x-vcard .vcf
    Addtype text/x-vcalendar .vcs
    Addtype text/calendar .ics
    Addtype application/smil .smil
    Addtype application/smil .smi
    Addtype application/java-archive .jar
    Addtype application/vnd.symbian.install .sis
    Addtype audio/wav .wav
    Addtype audio/midi .midi
    Addtype audio/midi .mid
    Addtype audio/rmf .rmf
    Addtype application/vnd.wap.mms-message .mms
    AddType video/flv .flv
    AddType video/mp4 .mp4
    Addtype video/3gpp .3gp
    Addtype application/zip .zip
    Addtype audio/mpeg .mp3
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Март 14, 2010, 8:58 п.п., спустя 5 часов 2 минуты 27 секунд

    mmf еще жив…
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Frukts

    Сообщения: 28 Репутация: N Группа: Кто попало

    Spritz Авг. 18, 2012, 10:32 п.п., спустя 888 дней 33 минуты

    а чё там понимать, ты мудак и всё этим сказано

Пожалуйста, авторизуйтесь, чтобы написать комментарий!