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

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

13.11
134
43 537
Хак - несколько форм добавления новостей в 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>" );
}

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

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

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

Комментарии

Samson26
Samson26 15 февраля 2014 12:00
dim,
Возникла это же проблема, 3 шаблона добавления новостей, в одном шаблоне обязательное заполнение дополнительное поля, в других тег доп.поля удален. Но при добавлении новости из этих 2х шаблонов, пишет ошибка, не заполнены все поля! Помогите, как можно справиться с этой проблемой!
ПафНутиЙ
ПафНутиЙ 15 февраля 2014 12:02
тут только дополнительные правки вносить.
ПафНутиЙ
ПафНутиЙ 15 февраля 2014 12:05
Если вы удалили допполя - то и не надо добавлять новости через форму с удалёнными допполями в категории, для которых утановленны обязательные к заполнению допполя.
ychelovek
ychelovek 15 февраля 2014 14:11
ПафНутиЙ,
Это очень грустно(( буду думать...
EVGrinch
EVGrinch 6 марта 2014 09:38
Подскажите пожалуйста, где примерно в /engine/modules/addnews.php должна быть строчка $allow_addnews = true;?
True не нашла, только false в нескольких местах, боюсь напортачить. Версия DLE 9.7
SanekFisherman
SanekFisherman 4 апреля 2014 12:26
Здравствуйте Павел! Это то что я так мечтал сделать на своём сайте. И вот, благодаря вам я это сделал. Спасибо огромное. У меня есть вопрос к вам по поводу "Добавить ещё". Как удалить эту ссылку? У меня DLE 10.2
ПафНутиЙ
ПафНутиЙ 5 апреля 2014 13:53
Не понимаю зачем это нужно, но попробуйте отредактировать файл language/Ressian/website.lng
строка:
'add_noch'		=>	"Добавить еще",
SanekFisherman
SanekFisherman 5 апреля 2014 15:24
У меня при использовании данной ссылки используется стандартный способ добавления новости, а я его теперь не использую вообще. Воспользовался вашей не обязательной доработкой, так тот код который нужно найти у меня его нет в файле. Есть похожая. Я её менял так при переходе по "добавить ещё" высвечивалась ошибка о том что публикаций не найдено.
Apelisin
Apelisin 24 апреля 2014 05:12
После добавления новости через нестандартную форму добавления, если нужно добавить ещё - то по умолчанию при клике на ссылку "Добавить ещё" нас перекинет на стандартную форму добавления.


А вот у меня другая проблема. Добавляю новость и при нажатии на "Добавить ещё" меня перекидывает на страницу Мой_сайт/history.html, а ведь нужно на Мой_сайт/addhistory.html Ведь по макету именно такое название у фаула должно быть. Где я ошибся?
ПафНутиЙ
ПафНутиЙ 24 апреля 2014 09:18
вот тут
{$config['http_home_url']}{$addNewsTplName}"

поменяйте на:
{$config['http_home_url']}add{$addNewsTplName}"
Apelisin
Apelisin 24 апреля 2014 23:29
ПафНутиЙ,
Спасибо большое, так всё работает как часики.
ScreN
ScreN 28 мая 2014 18:23
Чета я жестко затупил.
А как теперь подключить новые шаблоны новостей? Стандартный тег-ссылка ведущий на страницу addnews - "addnews-link" А как указать для новых шаблонов?
vitnet
vitnet 29 мая 2014 23:10
Цитата: 1
Допустим перед нами стоит конкретная задача: реализовать два дополнительных шаблона для добавления новостей, один - добавлять истории (имя шаблона addhistory.tpl), второй - добавлять события (addevent.tpl).

Цитата: 2
$addnewsTemplate = 'addnews'; // Шаблон по умолчанию
if($_GET['tpl'] == 'history') $addnewsTemplate = 'addhistory'; // Шаблон для добавления историй
if($_GET['tpl'] == 'event') $addnewsTemplate = 'addevent'; // Шаблон для добавления событий
ScreN
ScreN 30 мая 2014 19:37
В последнем пункте в инструкции где то ошибка.

Материал добавляется нормально. Но после добавления материала выскакивает не предложение "Добавить еще" а
Внимание, обнаружена ошибка
По данному адресу публикаций на сайте не найдено, либо у вас нет доступа для просмотра информации по данному адресу.


DLE 10.2
ScreN
ScreN 30 мая 2014 19:59
И как сделать выбор нескольких категорий? У меня только по одной выбирается.
ScreN
ScreN 30 мая 2014 20:11
А... Все. С мульти-категориями разобрался.
kreedz
kreedz 27 июня 2014 09:49
Пафнутый, как сделать так. Чтобы в при заполнение полей статья отправлялась в нужную мне категорию/раздел?

То есть addteam.tpl (нужно добавить команду). Есть раздел "Команда", я перехожу на страницу "addteam.html" и заполняю все, жму "готово" и новость уходит в нужный мне раздел.

А еще хочется чтобы можно было выбирать категории в определенном разделе. То есть: Есть раздел "Команда" там категории "Team1" и "Team2". Когда перехожу на страницу "addteam.html" и передомной выбор "team1" и "team2", после заполнение полей, жму "готово" и новость добавляется в раздел "Команды".
ПафНутиЙ
ПафНутиЙ 28 июня 2014 07:58
пишите ТЗ, отправляйте мне на почту, сделаем, платно.
kreedz
kreedz 28 июня 2014 19:12
ПафНутиЙ, Написал, жду ответа winked
djinn
djinn 6 июля 2014 12:37
Здравствуйте. Подскажите как сделать, при добавлении новости, выбор категории обязательным? Искал, искал и не нашел ничего...
demo
demo 14 августа 2014 13:42
Здравствуйте,
можно ли реализовать такое:
есть три категории

категория1
категория2
категория3

и мне бы хотелось сделать кнопку на главной странице для добавления новости в категорию1.

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

Благодарю за ответ.
ПафНутиЙ
ПафНутиЙ 14 августа 2014 20:29
можно добавить в форму скрытое поле
<input type="hidden" name="catlist[]" value="150" />

где 150 - ID категории
demo
demo 14 августа 2014 21:18
ПафНутиЙ,
Можно уточнить что это означает и в какую форму его добавить?
ПафНутиЙ
ПафНутиЙ 14 августа 2014 22:17
код пропишите в шаблон формы добавления новостей. Это поле отвечает за указание ID категории добавляемой новости.
demo
demo 16 августа 2014 11:52
Понятно, благодарю.
locksmith
locksmith 22 августа 2014 11:36
ScreN,

У меня такая же ошибка
Версия 10.2

Помогите исправить
locksmith
locksmith 22 августа 2014 11:37
В последнем пункте в инструкции где то ошибка.

Материал добавляется нормально. Но после добавления материала выскакивает не предложение "Добавить еще" а
Внимание, обнаружена ошибка
По данному адресу публикаций на сайте не найдено, либо у вас нет доступа для просмотра информации по данному адресу.

DLE 10.2
locksmith
locksmith 22 августа 2014 11:54
Под версию 10.2 нужно исправить

if( $config['allow_alt_url'] == "yes" ) {
на
if( $config['allow_alt_url']) {

в engine/modules/addnews.php
locksmith
locksmith 22 августа 2014 12:24
Теперь не работает на history и events

К сожалению, страница history.html для Вас не доступна: возможно, был изменен ее адрес или она была удалена. Пожалуйста, воспользуйтесь поиском.

на addnews работает
locksmith
locksmith 22 августа 2014 12:32
Прошу прощения я нашел.

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

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

Информация

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