Добавить .html в конце каждой записи

Тема в разделе "ExpressionEngine", создана пользователем 4ksner, 10 апр 2013.

  1. 4ksner

    4ksner Постоялец

    Регистр.:
    6 июн 2012
    Сообщения:
    142
    Симпатии:
    60
    Знаю, что EE очень плотно работает с сегментами в УРЛ. Но все же - Реально ли добавить в конце каждой записи .html? Как это делают многие движки.
    Если не средствами движка, то может через .htaccess?
    Кто-нибудь заморачивался?

    UPDATE:
    Пришло в голову неожиданно простое решение:
    При публикации новости в поле с УРЛ на конце добавить .html :D
    Это конечно круто, только хотелось бы автоматизировать этот процесс.
    Как это можно сделать?
     
  2. budulay

    budulay

    Регистр.:
    8 апр 2006
    Сообщения:
    283
    Симпатии:
    87
    4ksner нравится это.
  3. 4ksner

    4ksner Постоялец

    Регистр.:
    6 июн 2012
    Сообщения:
    142
    Симпатии:
    60
    Попробовал MX Title Control.

    Прописал для канала в URL Title Pattern вот это {url_title}.html.
    Изначально при публикации насторожило что поле URL исчезло. Но в итоге я получил запись с нормальным УРЛом и .html на конце.
    Спасибо!
     
  4. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    79
    Симпатии:
    43
    Мне больше нравится мое решение, которое я когда-то постил на EEClub:
    ===============
    Вообще EE не отбрасывает .html в конце запроса.
    Наверно самым правильным будет, научить его это делать
    Открываем файл
    ./system/core/core.system.php
    Там ищем строку (примерно #124)
    PHP:
    if (isset($uri))
        {
            
    $uri str_replace(array("\r""\r\n""\n"':',':','/','/'), array(''''''':'':''/''/'), $uri); 
    Добавляем после:
    PHP:
     // Cut .html|.htm|.shtml|.php
            
    if( preg_match("/(.*)(?=\.html|\.htm|\.shtml|\.php)/",$uri$match) && isset($match[1]) )
            {
                
    $uri $match[1];
            }  
    ================
    Таким образом, можно прописать .html даже для шаблонов - и оно будет верно обрабатываться.
    Но это решение исключает выше приведенное, т.к. ".html" - будет вырезаться из запроса.
     
  5. budulay

    budulay

    Регистр.:
    8 апр 2006
    Сообщения:
    283
    Симпатии:
    87
    Для новой версии ЕЕ 2.х я так понимаю нужно править ./system/expressionengine/core/EE_URI.php ?
     
  6. 4ksner

    4ksner Постоялец

    Регистр.:
    6 июн 2012
    Сообщения:
    142
    Симпатии:
    60
    Т.е. ваш код мы вставляем в ./system/core/core.system.php чтобы при переходе по ссылке {url_title}.html ЕЕ корректно понимал что за новость он должен показать? И без этого кода ЕЕ просто не найдет новость.
    Правильно я понял?

    По поводу ЕЕ 2 самому интересно.
     
  7. denik

    denik Постоялец

    Регистр.:
    1 июл 2011
    Сообщения:
    79
    Симпатии:
    43
    да. это глобальная настройка - при этом и шаблоны можно будет так открывать.

    Инструкция для EE 2.x:
    Открываем файл ./system/expressionengine/core/EE_URI.php
    Ищем:
    PHP:
        function _explode_segments()
        {
            if (
    $this->uri_string == '')
            {
                return;
            }
    Добавляем после:
    PHP:
    // Cut .html|.htm|.shtml|.php
            
    if( preg_match("/(.*)(?=\.html|\.htm|\.shtml|\.php)/",$this->uri_string$match) && isset($match[1]) )
            {
                
    $this->uri_string $match[1];
            }
    Имейте введу, что ссылки типа:
    /site/index.html/bla-bla-bla
    и
    /site/index.html
    - будут одинаковыми (т.к. по регулярке, все что поле .html - будет обрезано)
    если надо иначе - правим регулярку ;)
     
    4ksner нравится это.
  8. xcss

    xcss Постоялец

    Регистр.:
    22 окт 2009
    Сообщения:
    67
    Симпатии:
    23
    EE2+
    1. Идем сюда: CP Home --> Config File Editor
    2. Находим пустое поле: $config['url_suffix']
    3. Вставляем туда значение: .html
    4. Сохраняем изменения.
    Вы сделаны...
     
    denik нравится это.
  9. 4ksner

    4ksner Постоялец

    Регистр.:
    6 июн 2012
    Сообщения:
    142
    Симпатии:
    60
    Уже пробовал, это не работает.
    EE не поддерживает эту настройку. Эта настройка для прямого использования в CodeIgniter.

    Тут подробности:
    https://support.ellislab.com/bugs/detail/10989
     
  10. xcss

    xcss Постоялец

    Регистр.:
    22 окт 2009
    Сообщения:
    67
    Симпатии:
    23
    EE как раз и поддерживает эту настройку, так как использует классы CodeIgniter.
    Но, и в EE и в CI эта функция, естественно, работает только для чтения.
    И никакого волшебства здесь нет и быть не может.
    Система не будет, да и не должна каким либо магическим методом тут и
    там приклеивать суффиксы в url. Это задача для иных, сторонних решений.
    Для внешних ссылок, к примеру, имеется механизм перезаписи
    запрашиваемой строки url в модуле Apache, настройки которого
    доступны в файле .htaccess. Если нужно приклеить суффикс к url_title
    добавляемой записи - это можно решить, например, редактированием
    js-скрипта, который интерпретирует строку поля в форме сабмита.
    Или, как вариант, написать расширение и повесить его на крюк,
    вызываемый в конце сабмита.
    И в первом и в другом случае, все те прицепы будут храниться в БД.
    А оно вам надо?
    Посему, лучше уж раз и навсегда вписать это в шаблон и забыть про него.
    Ну если уж много и часто приходится этим заниматься, или не хотите видеть
    в коде нативное расширение - сохраните егов переменной, так будет красивее...
     
    pinnokio и 4ksner нравится это.