ПафНутиЙ-Блог » Статьи » Хак - несколько форм добавления новостей в DLE, простая и правильная реализация

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

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

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

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

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

  • Хак - расширенный вывод related и custom новостей + картинка
  • Добавляем новые теги в постраничную навигацию на DLE 10.1 (простой хак)
  • Мультиязычный сайт на DLE (или как добавить английский язык)
  • Увеличение скорости загрузки сайта на DLE (часть 1) обновлено
Закрыть

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

+

Комментарии

Korobasow
Korobasow 13 ноября 2013 18:51
Ответов: 1 #3329
Мне обещал Паша!
Спасибо огромное! fellow
ПафНутиЙ
ПафНутиЙ 13 ноября 2013 19:02
Ответов: 0 #3330
Пользуйся наздоровье )
Aper
Aper 13 ноября 2013 19:35
Ответов: 1 #3331
Спасибо !
Думаю использовать не как отдельная страница а когда смотрим короткие новости из какой то категории. Нажимаем на кнопку, открывается новая форма добавления в dialog box от jquery ui.
ПафНутиЙ
ПафНутиЙ 13 ноября 2013 23:49
Ответов: 0 #3332
Пожалуйста!
Я показал лишь способ.
Дальше можно развивать его до тех пор, пока фантазия не иссякнет :)
xeon01
xeon01 16 ноября 2013 12:49
Ответов: 10 #3335
Проблема.. при разных адресах (и по идеи шаблонов соответственно) добавления, шаблон один и тот же. Хотя файл иного шаблона - так же имеется.
ПафНутиЙ
ПафНутиЙ 16 ноября 2013 13:25
Ответов: 9 #3336
адрес сайта?
xeon01
xeon01 16 ноября 2013 14:06
Ответов: 8 #3337
ПафНутиЙ, извиняюсь.. Ставил по новой (3 раз если честно), заработало. Видать где-то косякнул. Тогда вопрос такой, а каким образом для каждой формы указать свои категории? Дело в том, что при копирование addnews.php это было проще. winked
Спасибо!
ПафНутиЙ
ПафНутиЙ 16 ноября 2013 14:13
Ответов: 7 #3338
Вставляйте в шаблон исходный код только тех категорий, которые нужны. Вот так примерно:
<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
Ответов: 5 #3339
Parse error: syntax error, unexpected '{' in /home/userwee/domains/site.ru/public_html/engine/modules/addnews.php on line 441
Вот такая вот теперь беда :(
ПафНутиЙ
ПафНутиЙ 16 ноября 2013 16:57
Ответов: 4 #3340
Где то пропустили/поставили лишнюю скобку.
что написано в строке 441?
xeon01
xeon01 16 ноября 2013 17:15
Ответов: 1 #3341
Сообщение содержит недопустимые к публикации теги. =(
Вот, строки с 439 по 443.. Всё через ctr+v; ctrl+c
Вот addnews.php
http://joxi.ru/6G-HUtg5CbAHDonSkJ8
ПафНутиЙ
ПафНутиЙ 17 ноября 2013 13:15
Ответов: 0 #3342
Парсер DLE порезал экранирующие слеши перед кавычками.
Исправил инструкцию. скопируйте ещё раз последний блок кода.
fdahtc
fdahtc 25 мая 2015 17:59
Ответов: 0 #4826
Что-то не могу понять,куда именно это вставить?в каком месте в шаблоне?код шаблона пока страндартный addnews.Спасибо заранее.
sadan
sadan 19 ноября 2013 10:37
Ответов: 0 #3343
как всегда очень четко и классно! Спасибо!
BlitzKrieg
BlitzKrieg 4 декабря 2013 16:15
Ответов: 3 #3378
Огромное спасибо за данную статью, но у меня возник вопрос: можно ли сделать так, что бы при выборе типа добавления поста он и выглядел иначе? (ну к примеру 1 тип добавления это видео первое поле, оно же краткая новость, ссылка на видео, второе краткое описание, при открытии страницы было видно и видео, и описание его, возможно ли это)
ПафНутиЙ
ПафНутиЙ 4 декабря 2013 16:29
Ответов: 2 #3381
Ну так именно для этого и предназначен хак!
Просто сделайте для каждого типа свой шаблон.
BlitzKrieg
BlitzKrieg 4 декабря 2013 17:38
Ответов: 0 #3383
Сразу и не понял, спасибо
Gott
Gott 23 октября 2016 19:13
Ответов: 0 #5695
Не понял, какой шаблон ? Куда шаблон ? что в этот шаблон вписывать ?
xeon01
xeon01 26 декабря 2013 20:26
Ответов: 5 #3419
А как нибудь можно реализовать выбор категорий, не через <select name="catlist[]" id="category"... ? А так, как бы это делалось при указание категорий в addnews.php, а именно через
$categories_list = CategoryNewsSelection( 0, 0); ? Спасибо.
ПафНутиЙ
ПафНутиЙ 27 декабря 2013 10:02
Ответов: 4 #3420
не совсем понял что вы имеете в виду.
Поясните.
xeon01
xeon01 27 декабря 2013 13:15
Ответов: 3 #3421
проще говоря, ограничить список категорий для выбора в новых формах, но не меняя сам скрипт, который выводит список.
До этого, делал так через строку $categories_list = CategoryNewsSelection( 0, 0); но! Это возможно только если делать формы, клонируя и переименновывая addnews...
ПафНутиЙ
ПафНутиЙ 29 декабря 2013 22:49
Ответов: 2 #3422
как правило кастомная форма добавления новости нужна для добавления в определённые категории.
Можно просто взять исх код селекта с нужными категориями и вывести в шаблон.
xeon01
xeon01 4 января 2014 12:13
Ответов: 1 #3438
Можно-то оно можно, вот только как это довести до вида, аналогичного дефолтному?
Вот дефолтный.

А вот с указанием категорий через html
ПафНутиЙ
ПафНутиЙ 4 января 2014 13:47
Ответов: 0 #3439
Ну так это плагин chosen прицепляется к любом селекту
dim
dim 1 января 2014 19:08
Ответов: 4 #3427
Здравствуйте.

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

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

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

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

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

http://dle-faq.ru/faq/questhacks/48-vybor-gruppy-pri-registracii-dle.html
undirezt
undirezt 3 января 2014 08:18
Ответов: 1 #3436
А возможно убрать выбор категории, дабы при добавлении статьи со страницы addevent она публиковалась в определенную категорию без выбора?

Информация

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