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

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

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

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

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

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

Комментарии

ПафНутиЙ
ПафНутиЙ 23 августа 2015 10:48
На основании параметров
RewriteRule ^addhistory.html$ index.php?do=addnews&tpl=history [L]
RewriteRule ^addevent.html$ index.php?do=addnews&tpl=event [L]

вы можете управлять шаблоном так, как это нужно, и к примеру добавить скрытое поле с id нужной категории, тогда добавляться новости будут имено в эту категорию.
Rmxxx
Rmxxx 19 октября 2015 22:29
Может все же подскажешь решение
http://pafnuty.name/statyi/page,1,3,145-more-addnews.html#comment-id-4833
http://pafnuty.name/statyi/page,1,3,145-more-addnews.html#comment-id-4837
ПафНутиЙ
ПафНутиЙ 19 октября 2015 23:22
Как будет время посмотрю.
djinn
djinn 29 января 2016 06:01
Павел подскажите как сделать ссылку на добавить еще в туже фору, на 10.6? Там нет такого кода уже...
Аналоги. провести не смог.
ПафНутиЙ
ПафНутиЙ 31 января 2016 12:52
К сожалению я не понимаю того, что вы написали. Перефразируйте.
djinn
djinn 31 января 2016 13:20
Как на 10.6 сделать ссылку на добавить еще...
Что бы возвращало на ту же форму?
Я пробовал по инструкции, не получилось...
Gordo
Gordo 10 апреля 2016 06:52
Он имел ввиду что в новых версиях косяки идут, а именно: имеется шаблон events, при клике на "Добавить еще", переход делается не на addevents.html, а на events.html, откуда и выходит ошибка.

Я сделал так, мб кому нибудь поможет, если что поправите, проверено на дле 11.
Находим
$addNewsTplName = ($_adnt[1]) ? $_adnt[1] : 'addnews' ;

Заменяем на
$url = 'add' . $_adnt[1];
$addNewsTplName = ($_adnt[1]) ? $url : 'addnews' ;

У кого вообще не работает переход, кроме addnews и все сделано правильно

Заменяем строку в хаке
if( $config['allow_alt_url'] == "yes" ) {

На
if( $config['allow_alt_url'] ) {

Отдельное спасибо за хак, очень помог
SanekFisherman
SanekFisherman 24 июля 2016 11:35
Мне тоже помогло, спасибо, ибо раньше приходилось попросту удалять ссылку "Добавить ещё". За хак тоже огромное спасибо, так как без него на моём сайте было бы не удобно добавлять публикации и в последствии разгонять по категориям! Работает на Dle 11.1.
nurbekov
nurbekov 5 октября 2016 01:23
Здравствуйте, с дополнительных форм (страниц) отправляет все новости на модерацию, хотя в админке для этой группы стоит режим доверия. Если же добавить через классическую страницу (addnews), то новость как и должна, проходит без модерации. Не поскажете в чем дело?
Colonizator
Colonizator 7 октября 2016 16:53
nurbekov,
хак никак не влияет на настройки групп пользователей. Скорее всего косяк в других настройках, проверяйте разрешена ли категория к публикации, галочка опубликовать новость активна, когда с сайта новости публикуются?
Colonizator
Colonizator 7 октября 2016 16:54
Спасибо! Тоже после обновления перестало работать. Не пришлось самому искать проблему:)
Gott
Gott 23 октября 2016 19:13
Не понял, какой шаблон ? Куда шаблон ? что в этот шаблон вписывать ?
Malchishka
Malchishka 26 октября 2016 17:02
Народ, а у вас по какому урлу открывается новая форма добавления?
У меня только так: http://сайт.ру/index.php?do=addnews&tpl=event
Так не работает: http://сайт.ру/addevent.html

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

2 раза переустанавливал и ничего не меняется, кто знает в чём может быть дело? DLE 11.1.
nurbekov
nurbekov 26 октября 2016 23:06
В .htaccess добавь запись соответствующую
Malchishka
Malchishka 27 октября 2016 08:24
Спасибо за наводку. Проблема была в том, что по ftp хтаксес отказывался заливаться на сервер, а я не обратил на это внимание. Изменения в файл удалось внести только через файловый менеджер в админ. панеле хостинга.
ПафНутиЙ
ПафНутиЙ 29 октября 2016 08:13
Это знак, что пора менять хостинг.
DobyJeep
DobyJeep 10 ноября 2016 23:50
А можно ли в addnews добавить строку добавить категории??
nurbekov
nurbekov 16 ноября 2016 01:11
		<select name="catlist[]" id="category" placeholder="Можно выбрать несколько">
		<option value="ID Категории">Название</option>
		</select>
Romanov
Romanov 14 декабря 2016 09:32
Павел здравствуйте. Спасибо Вам большое за эту отличную статью... А можете подсказать!? Как можно убрать из категории addevent.tpl поля которые автоматом прописаны как (обязательно) То есть... Название новости или название события...

По моей задумке новая категория это будет Добавить клиента файлик addclient.tpl там у меня просто три дополнительный поля это Фамилия, Имя, Отчество
Вот и после заполнения этих полей дальше скрипт меня не пропускает пишет

Внимание! Обнаружена ошибка
Заголовок не может быть пустым


Подскажите пожалуйста где я могу и что попробовать подправить...
ПафНутиЙ
ПафНутиЙ 14 декабря 2016 12:37
Сделайте Вместо допполя заголовок.
Как вариант - сделайте заголовок и краткую новость скрытыми полями и добавьте какой-нибудь значение
Romanov
Romanov 14 декабря 2016 21:00
Спасибо большое)
А подскажите пожалуйста по задумке я хотел бы что бы эти дополнительные поля подставлялись в текст ... Пока не знаю что из этого может получиться...
Тоесть как то вот так как на скрине, можете подсказать как сделать что бы эти поля отображались нормально?!
Prima
Prima 25 декабря 2016 23:43
Может кто-нибудь сталкивался. Как сделать, чтобы после добавления новости возврат был не на главную страницу, а в категорию в которую добавлялась новость. Я так понимаю эту строку надо править <*a href=\"$*PHP_SELF?do=addnews\">$*lang[add_noch]
freedomice
freedomice 9 января 2017 20:16
Да статья хороша, только не пробовал сработает ли у меня. Если я правильно понял, то это будут 2 одинаковые формы добавления информации, только с разными ветками так сказать.

Вот у меня вопрос. Сайт объявлений о недвиге. Разумеется добавление новости было изменено, под добавление объявлений. Со своими полями, цсс и т.д

Сейчас хочу добавлять на сайт статьи о недвижимости, как можно это реализовать? Как я понимаю ваша статья в этом не поможет или поможет, но частично!
Сайт здесь https://mykvartira.com
ПафНутиЙ
ПафНутиЙ 9 января 2017 20:53
Самый простой вариант:
- Скачать сайт на локалку.
- Попробовать.
- В случае успеха закачать сайт обратно.
freedomice
freedomice 9 января 2017 23:08
Хорошая идея!
freedomice
freedomice 10 января 2017 17:41
решил делать разделение на одном из поддоменов. Но что то не понимаю как. Все заменил указал. Брал только 1 раздел хистори.
Как вызвать форму?
Нужно добавлять тпл?
Спасибо. Можете помочь в настройках. и что будет стоить?
ПафНутиЙ
ПафНутиЙ 10 января 2017 19:53
Просто действуйте по приведённой инструкции, вставляйте код как есть, добейтесь корректной работы, а потом правьте под себя. Так будет проще.
freedomice
freedomice 10 января 2017 22:32
Так я и сделал как по статье и что далее. Вот 4 пункт сделал, а вот дальше что...
ПафНутиЙ
ПафНутиЙ 11 января 2017 00:29
Дальше пользуйтесь по назначению.
Radrigo
Radrigo 27 февраля 2017 21:33
К сожалению последний пункт реализовать в 11.2 не удалось. Подскажите, как вообще убрать слова "Добавить ещё или Вернуться назад"?

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

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

Информация

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