Блог. Скрипты

Добавить описание в категории CMS DLE

Для того чтобы в DLE добавить еще одно текстовое поле для описания категории, которое будет выводится на страницы с типом «Категория», и добавить чекбокс, который позволит включать и выключать вывод новостей делаем следующее:

В папке /public_html/engine/modules - создаем файл (например cat_text.php) и в нем прописываем:

<?php 
	if (isset($_GET['do']) AND ($_GET['do']=='cat') AND (!isset($_GET['newsid'])) AND($cat_info[$category_id]['cat_text'] !== '')) {
		echo '<h1>'.$cat_info[$category_id]['name'].'</h1>'; // вывести заголовок категории в «h1»
		echo $cat_info[$category_id]['cat_text']; //вывести описание категории из поля cat_text
	}
?>

Здесь идет проверка, имеет ли текущая страница тип «Категория» (Category), не является ли она «Новостью» и есть ли текст в новом добавленном поле с name = "cat_text". Если все условия совпадают, то вывести заголовок категории в «h1» и вывести описание категории из поля cat_text.

Если надо разбить описание категории на две части и разместить их вверху и внизу вывода «новостей» в категории то создаем 2 файла (например cat_text.php и cat_text2.php) и записываем в них следующее:

в cat_text.php:

<?php 
$qwe1 = ''; // текст вверху
$qwe2 = ''; // текст внизу

//проверка, имеет ли текущая страница тип «Категория» (Category), не является ли она «Новостью» и есть ли текст в новом добавленном поле с name = "cat_text"	
if (isset($_GET['do']) AND ($_GET['do']=='cat') AND (!isset($_GET['newsid'])) AND($cat_info[$category_id]['cat_text'] !== '')) {

	echo '<h1>'.$cat_info[$category_id]['name'].'</h1>'; //вывести заголовок
	
	if ($cat_info[$category_id]['cat_text']) { // если есть содержимое поля cat_text
	
		if (!strstr($cat_info[$category_id]['cat_text'], "<!--brbr-->")) { // и если в нем НЕ встречается строка "<!--brbr-->"
		
			echo($cat_info[$category_id]['cat_text']); // то выведи весь текст целиком
			
		} else if (strstr($cat_info[$category_id]['cat_text'], "<!--brbr-->")) { // иначе, если в нем встречается строка "<!--brbr-->"
		
			// разбиваем текст на две части: текст до строки "<!--brbr-->" и текст после нее, и записываем их в переменные $qwe1 и  $qwe2 соответственно
			list($text_first, $text_second) =  explode("<!--brbr-->", $cat_info[$category_id]['cat_text']); 		
			$qwe1 = $text_first;
			$qwe2 = $text_second;
			echo '<div class="content_text">'.$qwe1.'</div>'; // выводим текст в $qwe1
		}
	}

}
?>

в cat_text2.php записываем всё то же самое, только выводим второю часть текста в $qwe2:

<?php 
$qwe1 = ''; // текст вверху
$qwe2 = ''; // текст внизу

//проверка, имеет ли текущая страница тип «Категория» (Category), не является ли она «Новостью» и есть ли текст в новом добавленном поле с name = "cat_text"	
if (isset($_GET['do']) AND ($_GET['do']=='cat') AND (!isset($_GET['newsid'])) AND($cat_info[$category_id]['cat_text'] !== '')) {

	echo '<h1>'.$cat_info[$category_id]['name'].'</h1>'; //вывести заголовок
	
	if ($cat_info[$category_id]['cat_text']) { // если есть содержимое поля cat_text
	
		if (!strstr($cat_info[$category_id]['cat_text'], "<!--brbr-->")) { // и если в нем НЕ встречается строка "<!--brbr-->"
		
			echo($cat_info[$category_id]['cat_text']); // то выведи весь текст целиком
			
		} else if (strstr($cat_info[$category_id]['cat_text'], "<!--brbr-->")) { // иначе, если в нем встречается строка "<!--brbr-->"
		
			// разбиваем текст на две части: текст до строки "<!--brbr-->" и текст после нее, и записываем их в переменные $qwe1 и  $qwe2 соответственно
			list($text_first, $text_second) =  explode("<!--brbr-->", $cat_info[$category_id]['cat_text']); 		
			$qwe1 = $text_first;
			$qwe2 = $text_second;
			echo '<div class="content_text">'.$qwe2.'</div>'; // выводим текст в $qwe2
		}
	}

}
?>

В папке /public_html/templates/shablon в файле main.tpl над {content} прописываем:

[aviable=cat]{include file="engine/modules/cat_text.php"}[/aviable]

Этот код прописывается для вывода все текста без разбиения.

Если мы всё же разбили категории на две части и решили разместить их вверху и внизу вывода новостей то после создания 2 файлов (например cat_text.php и cat_text2.php), пишем в папке /public_html/templates/shablon в файле main.tpl:

[aviable=cat]{include file="engine/modules/cat_text.php"}[/aviable] 
	{content}
[aviable=cat]{include file="engine/modules/cat_text2.php"}[/aviable]

В папке /public_html/engine/modules в файле show.short.php строки (у меня это с 530 по 534) где прописано условие: в случае отсуствия новостей у данной категории отдать 404,

у меня это:

} elseif( ! $news_found and ! $allow_userinfo and $do != '' and $do != 'favorites' and $view_template != 'rss' ) {
	if ( $newsmodule ) { @header( " Location: /404.html " ); }
	require_once ROOT_DIR.'/404.php';
	die();
}

заменяем на:

elseif( ! $news_found and ! $allow_userinfo and $do != '' and $do != 'favorites' and $view_template != 'rss' ) {
	if ($category_id && $category_id != "not detected") {
		header("HTTP/1.1 200 OK");
	} else {
		header("HTTP/1.1 404 Not Found");
		require_once('error404.php');
		die();
	} 
}

Далее будем осуществлять выключение/показ новостей по чекбоксу name = "check_show_news" в админке (галочка отмечена - новости показываются, иначе - нет).

В папке /public_html/engine в файле engine.php строки (№ примерно с 197)

if ($cat_info[$category_id]['news_sort'] != "") $news_sort_by = $cat_info[$category_id]['news_sort'];
if ($cat_info[$category_id]['news_msort'] != "") $news_direction_by = $cat_info[$category_id]['news_msort'];
if ($cat_info[$category_id]['news_number']) $config['news_number'] = $cat_info[$category_id]['news_number'];

заменить на:

if ($cat_info[$category_id]['news_sort'] != "") $news_sort_by = $cat_info[$category_id]['news_sort'];
if ($cat_info[$category_id]['news_msort'] != "") $news_direction_by = $cat_info[$category_id]['news_msort'];
if($cat_info[$category_id]['check_show_news'] == '1') {
	if ($cat_info[$category_id]['news_number']) { $config['news_number'] = $cat_info[$category_id]['news_number']; }
} else {
	$config['news_number'] = 0;
}

В папке /public_html/engine/inc в файле categories.php после строки (№ 172):

$keywords = $db->safesql( str_replace( $quotes, " ", strip_tags( stripslashes( $_POST['keywords'] ) ) ) );

добавить

$cat_text = $db->safesql( str_replace( $quotes, " ", strip_tags( stripslashes( $_POST['cat_text'] ) ) ) );
$check_show_news = $db->safesql( htmlspecialchars( strip_tags( stripslashes( trim( $_POST['check_show_news'] ) ) ), ENT_QUOTES ) );

строку(№182)

$db->query( "INSERT INTO " . PREFIX . "_category (parentid, name, alt_name, icon, skin, descr, keywords, news_sort, news_msort, news_number, short_tpl, full_tpl, metatitle) values ('$category', '$cat_name', '$alt_cat_name', '$cat_icon', '$skin_name', '$description', '$keywords', '$news_sort', '$news_msort', '$news_number', '$short_tpl', '$full_tpl', '$meta_title')" );

заменить на

$db->query( "INSERT INTO " . PREFIX . "_category (parentid, name, alt_name, icon, skin, descr, keywords, cat_text, news_sort, news_msort, news_number, check_show_news, short_tpl, full_tpl, metatitle) values ('$category', '$cat_name', '$alt_cat_name', '$cat_icon', '$skin_name', '$description', '$keywords', '$cat_text', '$news_sort', '$news_msort', '$news_number', '$check_show_news', '$short_tpl', '$full_tpl', '$meta_title')" );

после строки №287

$row['keywords'] = stripslashes( preg_replace( array ("'\"'", "'\''" ), array (""", "'" ), $row['keywords'] ) );

вставить:

$row['cat_text'] = stripslashes( preg_replace( array ("'\"'", "'\''" ), array (""", "'" ), $row['cat_text'] ) );

после строки №291

$row['news_msort'] = makeDropDown( array ("" => $lang['sys_global'], "DESC" => $lang['opt_sys_mminus'], "ASC" => $lang['opt_sys_mplus'] ), "news_msort", $row['news_msort'] );

вставить:

global $check_ed;
if($row['check_show_news'] == 1) {
	$check_ed = 'checked';
} else { 
	$check_ed = '';
}

после строки №335

<tr>
	<td style="padding:4px;">{$lang['meta_keys']}</td>
	<td><textarea name="keywords" style="width:345px;height:50px;" class="bk">{$row['keywords']}</textarea></td>
</tr>

вставить:

<tr>
	<td style="padding:4px;">{$lang['cat_text']}</td>
	<td><textarea name="cat_text" style="width:345px;height:50px;" class="bk">{$row['cat_text']}</textarea></td>
</tr>
<tr>

после строки №354

</tr>
	<td style="padding:4px;">{$lang['opt_sys_msort']}</td>
	<td>{$row['news_msort']}</td>
</tr>

вставить

<tr>
	<td style="padding:4px;">{$lang['check_show_news']}</td>
	<td><input type="checkbox" {$check_ed} name="check_show_news" value="{$row['check_show_news']}"></td>
</tr>

после строки №425

$keywords = $db->safesql( str_replace( $quotes, " ", strip_tags( stripslashes( $_POST['keywords'] ) ) ) );

вставить

$cat_text = $db->safesql( htmlspecialchars( $_POST['cat_text'] ) );

после строки №443

if ( $_POST['news_number'] > 0) {
	$news_number = intval( $_POST['news_number'] );
} else { $news_number = 0; }

вставить

if (!isset($_POST['check_show_news'])) {
	$check_show_news = 0;
} else { $check_show_news = 1; }

строку №468

$db->query( "UPDATE " . PREFIX . "_category set parentid='$parentid', name='$cat_name', alt_name='$alt_cat_name', icon='$cat_icon', skin='$skin_name', descr='$description', keywords='$keywords', news_sort='$news_sort', news_msort='$news_msort', news_number='$news_number', short_tpl='$short_tpl', full_tpl='$full_tpl', metatitle='$meta_title' WHERE id='$catid'" );

заменить на

$db->query( "UPDATE " . PREFIX . "_category set parentid='$parentid', name='$cat_name', alt_name='$alt_cat_name', icon='$cat_icon', skin='$skin_name', descr='$description', keywords='$keywords', cat_text='$cat_text', news_sort='$news_sort', news_msort='$news_msort', news_number='$news_number', check_show_news='$check_show_news', short_tpl='$short_tpl', full_tpl='$full_tpl', metatitle='$meta_title' WHERE id='$catid'" );

после строки №523

<tr>
	<td style="padding:4px;">{$lang['meta_keys']}</td>
	<td><textarea name="keywords" style="width:345px;height:50px;" class="bk"></textarea></td>
</tr>

вставить

<tr>
	<td style="padding:4px;">{$lang['cat_text']}</td>
	<td><textarea name="cat_text" style="width:345px;height:50px;" class="bk"></textarea></td>
</tr>

после строки №539

<tr>
	<td style="padding:4px;">{$lang['opt_sys_sort']}</td>
	<td><select size=1 name="news_sort">
			<option value="" selected >{$lang['sys_global']}</option>
			<option value="date">{$lang['opt_sys_sdate']}</option>
			<option value="rating">{$lang['opt_sys_srate']}</option>
			<option value="news_read">{$lang['opt_sys_sview']}</option>
			<option value="title">{$lang['opt_sys_salph']}</option>
		</select>
	</td>
</tr>
	<td style="padding:4px;">{$lang['opt_sys_msort']}</td>
	<td><select size=1 name="news_msort">
			<option value="" selected >{$lang['sys_global']}</option>
			<option value="DESC">{$lang['opt_sys_mminus']}</option>
			<option value="ASC">{$lang['opt_sys_mplus']}</option>
		</select>
	</td>
</tr>

вставить

<tr>
	<td style="padding:4px;">{$lang['check_show_news']}</td>
	<td><input type="checkbox" checked = "{$check_ed}" name="check_show_news" value="{$row['check_show_news']}"></td>
</tr>

после строки №155

if ( $_POST['news_number'] > 0) {
	$news_number = intval( $_POST['news_number'] );
} else { $news_number = 0; }

вставить

if (!isset($_POST['check_show_news'])) {
	$check_show_news = 0;
} else { $check_show_news = 1; }

В папках /public_html/language/Russian и /public_html/language/English в файлах adminpanel.lng

после строк

'meta_keys'		=>	"Ключевые слова",

и

'meta_keys'		=>	"Keywords:",

соответственно, поставить

'cat_text'				=>	"Текст категории",
'check_show_news'		=>	"Включить вывод новостей в категорию",

и

'cat_text'		=>	"Text for category:",
'check_show_news'		=>	"Include the output of news in the category:",

если некоторых столбцов нет (например cat_text и check_show_news), то их надо создать

$db->query( "ALTER TABLE dle_category ADD cat_text TEXT NOT NULL AFTER keywords ");
$db->query( "ALTER TABLE dle_category ADD check_show_news INT(11) NOT NULL AFTER news_number ");

Теперь идем на сайт и проверяем результат.

Смотреть все статьи