1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Как динамически задавть роут

Тема в разделе "Thunder 3.X", создана пользователем Григорий, 29 окт 2016.

  1. Григорий

    Григорий Участник

    Добрый день, задался вопросом, как динамически(для каждого домена, при многодомееном режиме) задать свой роут для страницы?
    Что бы на одном домене страница была доступна по /page/какойтоключ, а на другом /statya/какойтоключ.
     
    DenisDoorwway нравится это.
  2. ddn128

    ddn128 Опытный Пользователь

    Так тебе не только (не столько) роут надо менять, а и ссылки (пути) в шабе.

    Как вариант.
    В роуте прописываешь вариации


    Код:
    'page' => [
         'route' => '/page/{keyword}',
         'file' => 'page.html',
         'status' => 200,
         'headers' => [
           'Content-Type'=>'text/html'
         ]
       ],
    
    'statya' => [
         'route' => '/statya/{keyword}',
         'file' => 'page.html',
         'status' => 200,
         'headers' => [
           'Content-Type'=>'text/html'
         ]
       ],  

    а в page.html

    задаёшь путь в переменную и кешируешь навсегда для домена
    т.е. рандом либо /page/, либо /statya/
    Теперь везде подставляешь закеш. значение переменной


    либо
    Код:
    'page' => [
         'route' => '/page/{keyword}',
         'file' => 'page.html',
         'status' => 200,
         'headers' => [
           'Content-Type'=>'text/html'
         ]
       ],
    
    'statya' => [
         'route' => '/statya/{keyword}',
         'file' => 'statya.html',
         'status' => 200,
         'headers' => [
           'Content-Type'=>'text/html'
         ]
       ],  
    и делаешь 2-3-4 (сколько хочешь шабов)

    page.html, statya.html ....

    В шабах всё одинаково, кроме путей в ссылках.

    Это моё ИМХО (теория) с ходу. На практике не проверял
     
  3. Григорий

    Григорий Участник

    Спасибо.

    Но такой вариант не хотелось бы делать, хотелось бы динамически. Что бы не прописывать для каждого домена отдельно.
    Шаблон настроил так, что не надо каждый домен прописывать и тп. Хотелось бы как нибудь динамически менять домен.
     
  4. ddn128

    ddn128 Опытный Пользователь

    так домен и не надо прописывать. Зачем? Куда ты его прописывать собираешься?
    Домен динам. - {{settings.base_host}} или {{settings.base_url}}
     
  5. Григорий

    Григорий Участник

    Ну а как ты в шаблоне, как минимум ключи начальные для каждого домена задаешь?
    А если делать дор чуть сложнее, то от доменных имен в шаблоне не уйти если брать мануал который есть к дору.
    Сейчас делаю так в папку data/my_domain.txt - с начальным ключем(это самый простой вариант) и соответственно шаблон настраиваю так, что бы данные брал из папки в зависимости от домена. Если хочешь добавить еще несколько доменов, создаешь файлы для каждого домена.
    Как то так.
     
  6. ddn128

    ddn128 Опытный Пользователь

    Из файла.
    Либо общего, в котором лежат пару тыщ ВЧ\СЧ ключей (просто берётся рандом и кешируется навсегда) Как по-мне - самый удачный вариант.
    Либо общего, в котором лежат ключи вида: domen;keyword дор берёт строку, split-тит её, сверяет соотв. ли "domen" текущему {{settings.base_host}} - если соотв. - использует, если не соотв. - берёт новую строку.
    Либо файл вида domen.com_keys.txt в котором лежат ключи для данного домена, тогда в шабе прописывается взять строку с именем {{settings.base_host}}_keys.txt
    Домены в шабе не используются вообще!!! Независимо от сложности
    Как уже говорил - {{settings.base_host}} или {{settings.base_url}}- подставят текущий домен автомат.

    Ну ок. И при чём здесь роут?
     
  7. Григорий

    Григорий Участник

    Вот причем,
    файл может быть domen;keyword;prefix_page
    тогда можно динамически менять по какому урлу будут открываться страницы. было например /post/key станет /prefix_page/key

    Нашел в принципе как сделать:
    в index.php после строки 384(foreach ($routes as $name => $route) {)
    вставить $route['route'] = str_replace("post", "prefix_page", $route['route']);
     
    Art нравится это.
  8. ddn128

    ddn128 Опытный Пользователь

    Ну так, а в чём проблема прописать все 100500 вариаций prefix_page в одном файле роута? И при этом не трогать сист. файлы.
    Да и редакт. 1 файл гораздо проще ...
    Если в шабе ссылки будут вида dor.com/page/key, то в роуте сработает правило
    Код:
    'page' => [
         'route' => '/page/{keyword}',
         'file' => 'page.html',
         'status' => 200,
         'headers' => [
           'Content-Type'=>'text/html'
         ]
       ],
    Если в шабе ссылки будут вида dor.com/statya/key, то в роуте сработает правило
    Код:
    'statya' => [
         'route' => '/statya/{keyword}',
         'file' => 'statya.html',
         'status' => 200,
         'headers' => [
           'Content-Type'=>'text/html'
         ]
       ],  
    Если в шабе ссылки будут вида dor.com/prefix_page/key, то в роуте сработает правило
    Код:
    'statya' => [
         'route' => '/prefix_page/{keyword}',
         'file' => 'prefix_page.html',
         'status' => 200,
         'headers' => [
           'Content-Type'=>'text/html'
         ]
       ],  
    и т.д.
    Не вижу ваще никаких проблем


    Хотя это дело хозяйское - хочется иметь 100500 файлов - нет проблем.
    "Каждый дрочит так, как хочет" :)
    Благо дорген позволяет извращаться кому как нравицца.
     
    Последнее редактирование: 29 окт 2016
  9. Григорий

    Григорий Участник

    дело в том, что это сплошная копипаста. а есть очень хороший принцип DRY(Don't Repeat Yourself).
    При копипасте 100-500 роутов в router.php, плюс все роуты которые там прописываешь, опять же надо разруливать при генерации ссылок в шаблоне(что бы каждому домену соответствовал свой роут, 100% проебешься)
    Ну и как будет проще? в файле с кейврдом и доменом, воткнуть соответствие префиксу страницы, или тащить это в роуты?
     
  10. Glokken

    Glokken Участник

    А если в layout.html в самом верху закэшировать навсегда случайный префикс из списка 100500 роутов.
    {%set prefix_page = rand_str_from_file(список_префиксов_в_роуте.txt ) %}

    А в шаблоне всегда использовать ссылки dor.com/prefix_page/key
    Покатит?
     
  11. ddn128

    ddn128 Опытный Пользователь

    Вообще-то я именно об этом и говорил :)


    Т.е. ссылка должна быть:
    {{settings.base_url~prefix_page[0]}}/key
    или
    {{settings.base_url}}{{prefix_page[0]}}/key

    В теории должно - на практике - надо затестить :)
     

Поделиться этой страницей