» » Хак - несколько форм добавления новостей в DLE, простая и правильная реализация

Хак - несколько форм добавления новостей в DLE, простая и правильная реализация

13.11
134
47 488
Хак - несколько форм добавления новостей в DLE, простая и правильная реализация

В сети есть разные варианты реализации нескольких форм добавления новостей на DLE-сайт.
Кто-то копирует addnews.php, что в корне не верно т.к. создаёт кучу бесполезных дублей кода и создаёт лишние проблемы при обновлении сайта.
Кто-то назначает название шаблона через get, что в принципе правильно, но при этом об элементарной фильтрации данных не задумывается, что тоже не правильно.
Я предлагаю правильное, на мой взгляд, решение, которое в т.ч. решает проблемы с разными заголовками окна браузера и спидбара для каждого шаблона добавления новости, ну и приятная мелочь - правильно работающая ссылка "Добавить ещё" при успешном добавлении новости.

Т.к. создание отдельного шаблона добавления новости - действие не очень частое, то выносить какие либо настройка в конфиги и прочее не вижу смысла.
Допустим перед нами стоит конкретная задача: реализовать два дополнительных шаблона для добавления новостей, один - добавлять истории (имя шаблона addhistory.tpl), второй - добавлять события (addevent.tpl).

Установка хака


  1. Открываем файл /engine/modules/addnews.php
    Находим:
    $allow_addnews = true;

    Ниже вставляем:
    $addnewsTemplate = 'addnews'; // Шаблон по умолчанию
    if($_GET['tpl'] == 'history') $addnewsTemplate = 'addhistory'; // Шаблон для добавления историй
    if($_GET['tpl'] == 'event') $addnewsTemplate = 'addevent'; // Шаблон для добавления событий

    Т.е. из примера мы видим, что для каждого шаблона необходимо создавать отдельное условие, сделано это для того, чтобы избежать сообщений об отсутствующем шаблоне когда не фильтруется $_GET.

    Далее находим:
    $tpl->load_template( 'addnews.tpl' );

    Заменяем на:
    $tpl->load_template( $addnewsTemplate.'.tpl' );


  2. Теперь сделаем нормальный ЧПУ для новых форм добавления новостей. Открываем
    /.htaccsess

    Хак - несколько форм добавления новостей в DLE, простая и правильная реализация

    Находим:
    RewriteRule ^addnews.html$ index.php?do=addnews [L]

    Ниже вставляем:
    RewriteRule ^addhistory.html$ index.php?do=addnews&tpl=history [L]
    RewriteRule ^addevent.html$ index.php?do=addnews&tpl=event [L]


  3. Ну и конечно же нам нужны собственные заголовки для спидбара и метатега title.
    Хак - несколько форм добавления новостей в DLE, простая и правильная реализация

    Открываем файл engine/engine.php
    Находим:
    elseif ($do == 'addnews') $nam_e = $lang['title_addnews'];

    Заменяем на:
    elseif ($do == 'addnews') {
    switch ($_GET['tpl']) {
    case 'history':
    $nam_e = 'Добавление истории';
    break;

    case 'event':
    $nam_e = 'Добавление события';
    break;

    default:
    $nam_e = $lang['title_addnews'];
    break;
    }
    }

  4. Готово!
    Думаю дальнейшее добавление новых шаблонов не составит труда.

Необязательные доработки


После добавления новости через нестандартную форму добавления, если нужно добавить ещё - то по умолчанию при клике на ссылку "Добавить ещё" нас перекинет на стандартную форму добавления. Это и исправим.
Открываем файл engine/modules/addnews.php
Ищем:
if( $config['allow_alt_url'] == "yes" ) msgbox( $lang['add_ok'], "{$msg} <a href="{$config['http_home_url']}" . "addnews.html">$lang[add_noch]</a> $lang[add_or] <a href="{$config['http_home_url']}">$lang[all_prev]</a>" );

Заменяем на:
if( $config['allow_alt_url'] == "yes" ) {				
$_adnt = explode('tpl=', $_SERVER['QUERY_STRING']);
$addNewsTplName = ($_adnt[1]) ? $_adnt[1] : 'addnews' ;
msgbox( $lang['add_ok'], "{$msg} <a href='{$config['http_home_url']}{$addNewsTplName}" . ".html'>$lang[add_noch]</a> $lang[add_or] <a href='{$config['http_home_url']}'>$lang[all_prev]</a>" );
}

Теперь ссылка будет отрабатывать правильно!

Надеюсь статья была вам интересна и жду ваших мнений!

Похожие материалы

Комментарии

nurbekov
nurbekov 27 февраля 2017 21:35
Сам ставил на 11.2 все работает, попробуйте снова.
Radrigo
Radrigo 27 февраля 2017 22:18
Строки, которую надо заменить, просто нет в файле addnews.php. Какие именно строки надо заменить, не подскажите?
ПафНутиЙ
ПафНутиЙ 9 марта 2017 20:46
Ищите по аналогии, возможно там кавычки другие или пробелы не там.
Radrigo
Radrigo 15 апреля 2017 14:11
Данный хак не работает в DLE 11.3, всегда подгружается шаблон addnews.tpl. может кто пробовал уже и удалось настроить?
Radrigo
Radrigo 15 апреля 2017 14:33
Ссори, вроде работает
Daiv
Daiv 14 января 2018 20:50
на 12.0 версии получаем вот такой ответ: Hacking attempt!
(сори все работает)
aluckyanov
aluckyanov 31 января 2018 15:53
Добрый день!
Необязательные доработки
Скажите пожалуйста, как поменять не только ссылку, но и весь текст для определенного добавления.

Например из примера у case 'history': исправить текст на "Ваша история успешно добавлена. Посмотреть все истории можно по адресу:"
l2banners
l2banners 6 мая 2018 16:47
Подскажите как вывести такую новую страницу добавления новости с помощью available?


[available=addothernews]
&#123;content}
[/available]


По типу как:


[available=addnews]
&#123;content}
[/available]
ПафНутиЙ
ПафНутиЙ 7 мая 2018 12:42
Цитата: l2banners
Подскажите как вывести такую новую страницу добавления новости с помощью available?


[available=addothernews]
&#123;content}
[/available]


По типу как:


[available=addnews]
&#123;content}
[/available]

Да, можно. посмотрите как сдлеано стандартное поле и просто добавьте рядом свой похожий код.
l2banners
l2banners 8 мая 2018 04:57
Цитата: ПафНутиЙ
Цитата: l2banners
Подскажите как вывести такую новую страницу добавления новости с помощью available?


[available=addothernews]
&#123;content}
[/available]


По типу как:


[available=addnews]
&#123;content}
[/available]

Да, можно. посмотрите как сдлеано стандартное поле и просто добавьте рядом свой похожий код.

Спасибо, за ответ. Пока обошелся без этого.
risha
risha 22 июля 2018 18:44
Паша, классный хак! У меня Dle 13, настроил все по инструкции, работаю формы, но не изменяются заголовки (3пункт инструкции) для каждой формы!? Как исправить? Да ище как вопрос

Как для каждой категории сделать разное оформление краткой новости:
Пример: как на твоём сайте https://dle-faq.ru

Категория =стол заказов выделен от простых вопросов?
объясните пожалуйста?!
ПафНутиЙ
ПафНутиЙ 23 июля 2018 09:00
Цитата: risha
У меня Dle 13, настроил все по инструкции, работаю формы, но не изменяются заголовки (3пункт инструкции) для каждой формы!? Как исправить?

Возможно в 13 версии заголовки строятся иначе, просто делайте по аналогии.

Цитата: risha
Как для каждой категории сделать разное оформление краткой новости:

[category=1,2,3,7-10] текст [/category]
risha
risha 23 июля 2018 10:17
[quote=risha]Как для каждой категории сделать разное оформление краткой новости:[/quote]
[category=1,2,3,7-10] текст [/category]
[/quote]

не так поняли меня, на главной как вывести с разными оформлением shortstory.tpl для каждой категории?
mondolfo
mondolfo 30 ноября 2021 00:22
Третий пункт установки не работает на новой версии DLE v15.
Может быть, вы можете проверить это здесь только для меня или как здесь.

Добавить комментарий

Комментировать могут только зарегистрированные пользователи

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.