» » Делаем ajax кнопки публикации новости «На главную» и «Убрать с главной» для DataLife Engine (DLE)

Делаем ajax кнопки публикации новости «На главную» и «Убрать с главной» для DataLife Engine (DLE)

ID СТАТЬИ: AVcL 256662 1347 0 35
Так выглядят кнопки публикации новости «На главную» и «Убрать с главной» в Default шаблонеТак выглядят кнопки публикации новости «На главную» и «Убрать с главной» в Default шаблоне

Допустим у нас имеется несколько десятков или сотен новостей на сайте. Естественно, что ими приходится постоянно оперировать. В особенности важную роль для любого сайта играет его главная страница. Вы же выбираете какую новость опубликовать на главной, а какую нет. Не редко приходится поднимать устаревшие новости, информация в которых была обновлена и стала актуальной, при этом более новые - убирать с главной страницы. К чему это я все? В движке DataLife Engine для того, чтобы поставить или убрать галочку «Публиковать на главной» нужно зайти в полное редактирование новости и пролистав страницу вниз нажать кнопку «сохранить». Я же предлагаю вам ускорить весь этот процесс сделав специальную ajax кнопку прямо в выводе списка кратких новостей в категориях и на главной. Последующий код будет работать на версиях DataLife 10.2, 10.3, 10.4, 10.5, а номера строк для его вставки будут приводиться для версии 10.5. Приступим:

Открываем базу данных MySQL например через PhpMyAdmin и находим таблицу «dle_post». В ней есть поле «allow_main», которое и отвечает за то опубликована новость на главной (значение 1) или не на главной (значение 0). Значит наша будущая кнопка должна вносить изменение именно в это поле.

В файле движка «\engine\engine.php» ищем и редактируем переменную запроса «$sql_select» добавляем после «p.allow_comm» наш «p.allow_main» (порядок добавления в принципе не важен, но я сделал так как идет в базе данных). Добавление должно произойти в 13-ти строках. Если этого не сделать, то нам придется делать по одному запросу на каждую новость где будет выводиться наша кнопка. А зачем нам лишние запросы?

Пример привожу для одной строки. Для остальных все тоже самое.

Было:
$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}approve=1 AND allow_main=1" . $where_date . " ORDER BY " . $fixed . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];

Стало:
$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.allow_main, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}approve=1 AND allow_main=1" . $where_date . " ORDER BY " . $fixed . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];

Далее в файл «\engine\modules\show.short.php» перед строкой 751 «$tpl->compile( 'content' );» вставляем следующий код:
//если пользователь состоит в группе администраторов то выполняем условие
if ($member_id['user_group'] == 1) {		
	if ( $row['allow_main'] == 0 ) {
		$link_allow = '<input style="background-color:#E8D0A9;color:#0E380E;margin: 9px 0 0 0;float:right;" name="allow_main" id="'.$row["id"].'" type="button" onclick="javascript:formSend('.$row["id"].' , '."1".');return false;" value="На главную!">';
	} else {
		$link_allow = '<input style="background-color:#C1DAD6;color:#0E380E;margin: 9px 0 0 0;float:right;" name="allow_main" id="'.$row["id"].'" type="button" onclick="javascript:formSend('.$row["id"].' , '."0".');return false;" value="Убрать с главной!">';
	}	
	$tpl->set( '{allow_main}', $link_allow );
} else {
	$tpl->set( '{allow_main}', "" );
}

А после 753-ей строки, после закрывающей фигурной скобки «}» вставляем код:
//скрипт запускает файл allow_main.php, меняет кнопку, также передает ID новости и настройку allow_main (1 или 0)
echo <<<HTML
<script type="text/javascript">    
	function formSend(post_id , allow_main) {
		var post = $('#'+post_id);
		ShowLoading('');
		$.post(dle_root + "engine/ajax/allow_main.php",
			{ post_id: post_id , allow_main: allow_main } ,
			function(data) {
				HideLoading('');
				if (post.val() == "На главную!") {
					post.fadeOut(1000, function() {
						$(this).val('Убрать с главной').fadeIn(1000).css({'background-color' : '#C1DAD6' , 'color' : '#0E380E'});
					});					
				} else {
					post.fadeOut(1000, function() {
						$(this).val('На главную!').fadeIn(1000).css({'background-color' : '#E8D0A9' , 'color' : '#0E380E'});
					});
				}				
			}
		);
	}		
</script>
HTML;

Далее создаем PHP файл «allow_main.php» с кодировкой нашего сайта. Помещаем его в папку «\engine\ajax\» и вставляем в него код:
@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );

define( 'DATALIFEENGINE', true );
define( 'ROOT_DIR', substr( dirname(  __FILE__ ), 0, -12 ) );
define( 'ENGINE_DIR', ROOT_DIR . '/engine' );

require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/modules/functions.php';

//фильтруем и сохраняем в переменную ID новости переданное методом POST
$post_id = intval($_POST['post_id']);

if ( $_POST['allow_main'] == 1 ) {
	$db->query( "UPDATE " . USERPREFIX . "_post SET allow_main='1' WHERE id='".$post_id."'" );
} else {
	$db->query( "UPDATE " . USERPREFIX . "_post SET allow_main='0' WHERE id='".$post_id."'" );
}

//чистим кеш
$cprefix = "full_".$post_id;
clear_cache( array( 'news_', 'rss', 'full_' ) );

И напоследок выводим кнопку в Default шаблоне «\templates\Default\shortstory.tpl». Вставляем после 40-ой строки код:
<span class="argmore">{allow_main}</span>

Или еще можно обернуть код с кнопкой в тег для отображения только для группы администраторов (не обязательно т.к. в php коде есть проверяющее условие)
[group=1]<span class="argmore">{allow_main}</span>[/group]

Для тех у кого нет времени делать это все самому скачиваем архив с измененными файлами для версии Datalife 10.5 с кодировкой сайта UTF-8

Скачать архив - делаем кнопки 10.5 UTF-8.zip [17,23 Kb] (cкачиваний: 7)

locksmith Администратор Представитель администрации клуба

Автор: locksmith

Комментариев пока нет, добавьте свой!

Ваш аватар
Вы вошли как Гость   
Кликните на изображение чтобы обновить код, если он неразборчив