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

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

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

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

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

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

Комментарии

MaxiZ
MaxiZ 10 января 2015 19:31
Доброго дня Уважаемый Пафнутий!

Спасибо за очень полезный Хак.

И пожалуйста подскажите как добиться что бы по мимо самих шаблонов разых для новостей и заголовок бы в них менялся, а то шаблон при смене категории меняется, а вот заголовок остается Добавить новость, хотя в самом шаблоне меняю на Добавить питомца и Добавить объявление.
ПафНутиЙ
ПафНутиЙ 10 января 2015 19:35
Добрый день!
Смотрите третий пункт инструкции, там как раз это расписано.
MaxiZ
MaxiZ 10 января 2015 19:38
Проверил, всё вставлено, но увы заголовок тот же :-( Возможно это из-за версии движка? У меня DLE 10.3
ПафНутиЙ
ПафНутиЙ 10 января 2015 19:49
Значение параметра tpl в адреса и значение case в третьем пункте совпадают?
MaxiZ
MaxiZ 10 января 2015 20:02
ПафНутиЙ,
Да конечно!
ПафНутиЙ
ПафНутиЙ 10 января 2015 20:50
Напишите мне на почту, скорее всего понадобится FTP к сайту.
MaxiZ
MaxiZ 10 января 2015 21:02
Отписался через ПМ, почту не нашел :-(

Хочешь спрятать, положи поближе... :-) Это я об электронке... Только сейчас увидел Обо мне...
RuGazeta
RuGazeta 19 января 2015 14:42
Привет Паш. Очень полезный хак, очень благодарен тебе.
У меня всего один вопрос.
К примеру у меня есть доп поле в site/addnews.html и у меня в Список дополнительных полей на при желании поставлено нет. В итоге при добавлении новостей, доп поле обязательная.
Теперь я создал для addhstory.tpl другое доп поле и на при желании поставлено да.
Ну вот. Открываю site/addhstory.html и после нажатие на кнопку отправить, выдаёт ошибку Вы должны заполнить все необходимые поля
Что ж делать?
Помоги пожалуйста.
ПафНутиЙ
ПафНутиЙ 19 января 2015 15:26
Тут только один вариант - делать привязку обязательного поля только к тем категориям, в которых оно должно выводиться.
RuGazeta
RuGazeta 19 января 2015 16:33
Большое спасибо! smile
follor
follor 28 января 2015 10:53
Приветствую, а данный хак на 10.4 тоже работает?
follor
follor 28 января 2015 12:58
ПафНутиЙ,
Цитата: ПафНутиЙ
можно добавить в форму скрытое поле
<input type="hidden" name="catlist[]" value="150" />

где 150 - ID категории

а как сделать чтобы и доп поля работали?
ПафНутиЙ
ПафНутиЙ 28 января 2015 17:29
прописать нужные поля в шаблоне.
fdahtc
fdahtc 7 мая 2015 14:19
Здравствуйте.Все сделал по инструкции,но почему-то нет формы добавления новости....просто пустое окно.
Шаблоны создал,вставил в них стандартный код addnews,но пусто...в чем может быть проблема?
Всё,разобрался,опечатался в одном месте.
ПафНутиЙ
ПафНутиЙ 7 мая 2015 14:30
Возможно что-то сделали не так и вызвали ошибку php, при этом на сервере вывод ошибок отключен. посмотрите в логах.
fdahtc
fdahtc 7 мая 2015 14:33
Да,действительно ошибся...
А вообще полезный хак,пригодился,спасибо вам!
fdahtc
fdahtc 25 мая 2015 17:59
Что-то не могу понять,куда именно это вставить?в каком месте в шаблоне?код шаблона пока страндартный addnews.Спасибо заранее.
Rmxxx
Rmxxx 2 июня 2015 20:49
ПафНутиЙ,а как быть с dle 10.5, ведь в addnews.php совсем другие строчки, у меня что то не получилось прикрутить
ПафНутиЙ
ПафНутиЙ 2 июня 2015 21:07
Делайте по аналогии, суть не поменялась, хотя я не смотрел ещё код 10.5 Даже архив не распаковывал, пока не интересно даже, если более интересные занятия.
Rmxxx
Rmxxx 2 июня 2015 22:40
ПафНутиЙ, посмотри пожалуйста, там
теперь 2 строчки стало
vitnet
vitnet 3 июня 2015 00:04
Что конкретно вас смущает в файле addnews.php?
Rmxxx
Rmxxx 4 июня 2015 15:55
vitnet,вот эта строчка
lllekojladka
lllekojladka 27 июня 2015 20:47
На 10.4 не работает этот хак
ПафНутиЙ
ПафНутиЙ 27 июня 2015 21:23
Что конкретно не работает?
lllekojladka
lllekojladka 28 июня 2015 09:02
ПафНутиЙ,
После всех этапов инструкций, перехожу по ссылке на добавление новости (которую создали) на сайте появляется сообщение "К сожалению, страница addvideo.html для вас не доступна: возможно, был изменен ее адрес или она была удалена. Пожалуйста воспользуйтесь поиском". Тип чпу 2. Dle 10.4
lllekojladka
lllekojladka 1 июля 2015 11:07
Все работает спасибо ! я был не внимателен. DLE 10.4
ScreN
ScreN 26 июля 2015 16:10
Тип ЧПУ не имеет значения. Где то ошиблись в коде.
skynet32rus
skynet32rus 15 августа 2015 20:02
а как добавить одну и ту же новость на несколько дат? к примеру добавляешь новость и в ней же выбираешь публикацию сразу на 21, 22 и 23 число и эта новость сразу на эти числа публикуется
ПафНутиЙ
ПафНутиЙ 15 августа 2015 20:35
для этого нужно писать отдельный модуль, да и с точки зрения SEO это совсем неправильно.
Yamakasi
Yamakasi 23 августа 2015 10:20
не совсем понял, а откуда он понимает какой шаблон добавлении выводить при добавление на сайте в ту или иную категорию?

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

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

Информация

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