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

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

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

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

Комментарии

Korobasow
Korobasow 13 ноября 2013 18:51
Мне обещал Паша!
Спасибо огромное! fellow
ПафНутиЙ
ПафНутиЙ 13 ноября 2013 19:02
Пользуйся наздоровье )
Aper
Aper 13 ноября 2013 19:35
Спасибо !
Думаю использовать не как отдельная страница а когда смотрим короткие новости из какой то категории. Нажимаем на кнопку, открывается новая форма добавления в dialog box от jquery ui.
ПафНутиЙ
ПафНутиЙ 13 ноября 2013 23:49
Пожалуйста!
Я показал лишь способ.
Дальше можно развивать его до тех пор, пока фантазия не иссякнет :)
xeon01
xeon01 16 ноября 2013 12:49
Проблема.. при разных адресах (и по идеи шаблонов соответственно) добавления, шаблон один и тот же. Хотя файл иного шаблона - так же имеется.
ПафНутиЙ
ПафНутиЙ 16 ноября 2013 13:25
адрес сайта?
xeon01
xeon01 16 ноября 2013 14:06
ПафНутиЙ, извиняюсь.. Ставил по новой (3 раз если честно), заработало. Видать где-то косякнул. Тогда вопрос такой, а каким образом для каждой формы указать свои категории? Дело в том, что при копирование addnews.php это было проще. winked
Спасибо!
ПафНутиЙ
ПафНутиЙ 16 ноября 2013 14:13
Вставляйте в шаблон исходный код только тех категорий, которые нужны. Вот так примерно:
<select name="catlist[]" id="category" onchange="onCategoryChange(this)">
	<option value="0"></option>
	<option value="1">Далеко-далеко за.</option>
	<option value="2">Вдали, коварный.</option>
	<option value="3">Рот, коварных.</option>
	<option value="4">Жаренные, щеке.</option>
	<option value="5">Щеке, всеми?</option>
</select>
xeon01
xeon01 16 ноября 2013 14:32
Parse error: syntax error, unexpected '{' in /home/userwee/domains/site.ru/public_html/engine/modules/addnews.php on line 441
Вот такая вот теперь беда :(
ПафНутиЙ
ПафНутиЙ 16 ноября 2013 16:57
Где то пропустили/поставили лишнюю скобку.
что написано в строке 441?
xeon01
xeon01 16 ноября 2013 17:15
Сообщение содержит недопустимые к публикации теги. =(
Вот, строки с 439 по 443.. Всё через ctr+v; ctrl+c
Вот addnews.php
http://joxi.ru/6G-HUtg5CbAHDonSkJ8
ПафНутиЙ
ПафНутиЙ 17 ноября 2013 13:15
Парсер DLE порезал экранирующие слеши перед кавычками.
Исправил инструкцию. скопируйте ещё раз последний блок кода.
sadan
sadan 19 ноября 2013 10:37
как всегда очень четко и классно! Спасибо!
BlitzKrieg
BlitzKrieg 4 декабря 2013 16:15
Огромное спасибо за данную статью, но у меня возник вопрос: можно ли сделать так, что бы при выборе типа добавления поста он и выглядел иначе? (ну к примеру 1 тип добавления это видео первое поле, оно же краткая новость, ссылка на видео, второе краткое описание, при открытии страницы было видно и видео, и описание его, возможно ли это)
ПафНутиЙ
ПафНутиЙ 4 декабря 2013 16:29
Ну так именно для этого и предназначен хак!
Просто сделайте для каждого типа свой шаблон.
BlitzKrieg
BlitzKrieg 4 декабря 2013 17:38
Сразу и не понял, спасибо
xeon01
xeon01 26 декабря 2013 20:26
А как нибудь можно реализовать выбор категорий, не через <select name="catlist[]" id="category"... ? А так, как бы это делалось при указание категорий в addnews.php, а именно через
$categories_list = CategoryNewsSelection( 0, 0); ? Спасибо.
ПафНутиЙ
ПафНутиЙ 27 декабря 2013 10:02
не совсем понял что вы имеете в виду.
Поясните.
xeon01
xeon01 27 декабря 2013 13:15
проще говоря, ограничить список категорий для выбора в новых формах, но не меняя сам скрипт, который выводит список.
До этого, делал так через строку $categories_list = CategoryNewsSelection( 0, 0); но! Это возможно только если делать формы, клонируя и переименновывая addnews...
ПафНутиЙ
ПафНутиЙ 29 декабря 2013 22:49
как правило кастомная форма добавления новости нужна для добавления в определённые категории.
Можно просто взять исх код селекта с нужными категориями и вывести в шаблон.
dim
dim 1 января 2014 19:08
Здравствуйте.

Спасибо за очередное нужное творение. Такая проблема появилась. После установки хака при добавлении новостей, что по первому, что по второму шаблону, появляется сообщение мол "Вы должны заполнить все необходимые поля", причем две строки с этой надписью. До установки хака таких сообщений не появлялось. Все поля, разумеется, заполняю. Использую в основном доп. поля + название новости из стандартных полей + выбор категории. DLE 10.0, локалхост.
ПафНутиЙ
ПафНутиЙ 1 января 2014 20:53
Без "доступа к телу" не смогу помочь.
dim
dim 1 января 2014 21:25
Спасибо, что ответили. Всё-таки попробую объснить, что выходит. Возможно, это поможет доработать хак и у людей не возникнет проблем. В общем, ситуация следующая. Установил хак, у меня получилось две формы добавления разных типов новостей. В каждой из них я использую доп. поля. Некоторые из них пересакаются между формами, некоторые уникальны.

В первой форме (A) присутстсвуют 2 уникальных доп. поля x1 и x2 обязательные для заполнения. Если я делаю их необязательными, то во второй форме (B) НЕ появляется сообщение "Вы должны заполнить все необходимые поля". Соответственно, если я делаю их обязательными, сообщение появляется.

И наоборот. Если я в форме B убираю обязательность заполнения уникальных (их нет в форме A) доп. полей y1 и y2, то в форме A новости добавляются без проблем. Понимаю, что покажется сложным на первый взгляд, но, мне кажется, я объяснил доходчиво.

О чем это говорит, как мне кажется? Что все теги всё-таки присутствуют, но не отображаются в шаблоне. Как-то так...
ПафНутиЙ
ПафНутиЙ 1 января 2014 21:46
Обычно такое происходит если выбрать категорию, в которой обязательны определённые поля, при этом допполя в форме добавления выводятся вручную.
попробую потестить с допполями.
dim
dim 1 января 2014 23:25
Спасибо огромное за подсказку! Действительно, если выбрать нужные категории для доп. полей, проблема исчезнет.

Если можно, прокомментируйте, пожалуйста, последнее сообщение здесь:

http://dle-faq.ru/faq/questhacks/48-vybor-gruppy-pri-registracii-dle.html
undirezt
undirezt 3 января 2014 08:18
А возможно убрать выбор категории, дабы при добавлении статьи со страницы addevent она публиковалась в определенную категорию без выбора?
ПафНутиЙ
ПафНутиЙ 3 января 2014 11:15
Да, с этой целью как правило и делают несколько форм добавления.
Но возложу это на плечи пользователей т.к. скопировать исх код селекта и вставить его в скрытый блок, предварительно отметив нужный gyrn в селекте, сможет любой желающий.
xeon01
xeon01 4 января 2014 12:13
Можно-то оно можно, вот только как это довести до вида, аналогичного дефолтному?
Вот дефолтный.

А вот с указанием категорий через html
ПафНутиЙ
ПафНутиЙ 4 января 2014 13:47
Ну так это плагин chosen прицепляется к любом селекту
ychelovek
ychelovek 15 февраля 2014 10:43
А как же быть с сообщением, которое высвечивается после добавления новости? как сделать что бы если я добавляю с tpl addquestions.tpl то после добавления появлялось сообщение Ваш вопрос принят на рассмотрение, а если с addnews.tpl то Ваша новость успешно... (дефолт). Не хотелось бы делать коряво через JS
Подскажите пожалуйста

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

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

Информация

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