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

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

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

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

+

Комментарии

Yamakasi
Yamakasi 23 августа 2015 10:20
Ответов: 1 #5016
не совсем понял, а откуда он понимает какой шаблон добавлении выводить при добавление на сайте в ту или иную категорию?
ПафНутиЙ
ПафНутиЙ 23 августа 2015 10:48
Ответов: 0 #5022
На основании параметров
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
Ответов: 1 #5201
Может все же подскажешь решение
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
Ответов: 0 #5202
Как будет время посмотрю.
djinn
djinn 29 января 2016 06:01
Ответов: 3 #5386
Павел подскажите как сделать ссылку на добавить еще в туже фору, на 10.6? Там нет такого кода уже...
Аналоги. провести не смог.
ПафНутиЙ
ПафНутиЙ 31 января 2016 12:52
Ответов: 2 #5391
К сожалению я не понимаю того, что вы написали. Перефразируйте.
djinn
djinn 31 января 2016 13:20
Ответов: 0 #5395
Как на 10.6 сделать ссылку на добавить еще...
Что бы возвращало на ту же форму?
Я пробовал по инструкции, не получилось...
Gordo
Gordo 10 апреля 2016 06:52
Ответов: 2 #5478
Он имел ввиду что в новых версиях косяки идут, а именно: имеется шаблон 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
Ответов: 0 #5552
Мне тоже помогло, спасибо, ибо раньше приходилось попросту удалять ссылку "Добавить ещё". За хак тоже огромное спасибо, так как без него на моём сайте было бы не удобно добавлять публикации и в последствии разгонять по категориям! Работает на Dle 11.1.
Colonizator
Colonizator 7 октября 2016 16:54
Ответов: 0 #5662
Спасибо! Тоже после обновления перестало работать. Не пришлось самому искать проблему:)
nurbekov
nurbekov 5 октября 2016 01:23
Ответов: 1 #5660
Здравствуйте, с дополнительных форм (страниц) отправляет все новости на модерацию, хотя в админке для этой группы стоит режим доверия. Если же добавить через классическую страницу (addnews), то новость как и должна, проходит без модерации. Не поскажете в чем дело?
Colonizator
Colonizator 7 октября 2016 16:53
Ответов: 0 #5661
nurbekov,
хак никак не влияет на настройки групп пользователей. Скорее всего косяк в других настройках, проверяйте разрешена ли категория к публикации, галочка опубликовать новость активна, когда с сайта новости публикуются?
Malchishka
Malchishka 26 октября 2016 17:02
Ответов: 3 #5698
Народ, а у вас по какому урлу открывается новая форма добавления?
У меня только так: http://сайт.ру/index.php?do=addnews&tpl=event
Так не работает: http://сайт.ру/addevent.html

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

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

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

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


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

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

Сейчас хочу добавлять на сайт статьи о недвижимости, как можно это реализовать? Как я понимаю ваша статья в этом не поможет или поможет, но частично!
Сайт здесь https://mykvartira.com
ПафНутиЙ
ПафНутиЙ 9 января 2017 20:53
Ответов: 5 #5832
Самый простой вариант:
- Скачать сайт на локалку.
- Попробовать.
- В случае успеха закачать сайт обратно.
freedomice
freedomice 9 января 2017 23:08
Ответов: 0 #5833
Хорошая идея!
freedomice
freedomice 10 января 2017 17:41
Ответов: 3 #5835
решил делать разделение на одном из поддоменов. Но что то не понимаю как. Все заменил указал. Брал только 1 раздел хистори.
Как вызвать форму?
Нужно добавлять тпл?
Спасибо. Можете помочь в настройках. и что будет стоить?
ПафНутиЙ
ПафНутиЙ 10 января 2017 19:53
Ответов: 2 #5837
Просто действуйте по приведённой инструкции, вставляйте код как есть, добейтесь корректной работы, а потом правьте под себя. Так будет проще.
freedomice
freedomice 10 января 2017 22:32
Ответов: 1 #5838
Так я и сделал как по статье и что далее. Вот 4 пункт сделал, а вот дальше что...
ПафНутиЙ
ПафНутиЙ 11 января 2017 00:29
Ответов: 0 #5840
Дальше пользуйтесь по назначению.

Информация

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