@timers

Как сделать мультикатегории в модуле DLE?

<?php

if( !defined( "DATALIFEENGINE" ) ) die( "Hacking attempt!" );

//--------------------------------------------------=-=-=-=-=
//	Инициализируем категорию
//--------------------------------------------------=-=-=-=-=

if( $Offers->DefinitionCat() )
	{
		if( $_REQUEST['type'] == "rss" ) include( ENGINE_DIR."/modules/offers/rss.php" );
		
		$OnPage = $Offers->Config['view_cat_on_page'] > 0 ? intval( $Offers->Config['view_cat_on_page'] ) : 1;
		
		//--------------------------------------------------=-=-=-=-=
		//	Настройка метатитлов
		//--------------------------------------------------=-=-=-=-=
		
		$SpeedBarCat = $Offers->SpeedBarCat( $Offers->RequestCat );
		$ThreadCatForSql = $Offers->SqlThreadCat( $Offers->RequestCat );
		
		for( $i = count( $SpeedBarCat ); $i > 0; $i-- ) $module['title'][] = $SpeedBarCat[ ( $i - 1 ) ]['title'];
		for( $i = count( $SpeedBarCat ); $i > 0; $i-- ) $module['speedbar'][] = "<a href=\"".$SpeedBarCat[ ( $i - 1 ) ]['link']."\">".$SpeedBarCat[ ( $i - 1 ) ]['title']."</a>";
		
		//--------------------------------------------------=-=-=-=-=
		//	Смотрим, какую папку с шаблонами нам грузить
		//--------------------------------------------------=-=-=-=-=
		
		$RowCat = $Offers->DB['category'][ $Offers->RequestCat ];
		$Folder = $RowCat['template'] != "" ? totranslit( $RowCat['template'] ) : "default";
		$OffersCategory = $RowCat['id'];
		
		//--------------------------------------------------=-=-=-=-=
		//	Поиск при необходимости
		//--------------------------------------------------=-=-=-=-=
		
		if( $_REQUEST['OffersSearch'] == "---" ) $_REQUEST['OffersSearch'] = "";
		if( $_REQUEST['offers_type'] == "---" ) $_REQUEST['offers_type'] = "";
		if( ( $_REQUEST['OffersSearch'] != "" || $_REQUEST['offers_type'] != "" ) && $Offers->Config['fastsearch_on'] == "on" )
			{
				if( isset( $_REQUEST['submit_search'] ) ) $_REQUEST['page'] = 1;
				$SearchTextForm = $Offers->FilterSearchText( $_REQUEST['OffersSearch'] );
				$Story = $db->safesql( $SearchTextForm );
				$OffersType = intval( $_REQUEST['offers_type'] );
				$PageLink = $Offers->ReturnLinkCategory( $Offers->RequestCat );
				
				$SqlSearch = array();
				if( $Story ) $SqlSearch[] = "( `title` LIKE '%{$Story}%' OR `text` LIKE '%{$Story}%' )";
				if( $OffersType ) $SqlSearch[] = "`offers_type`='{$OffersType}'";
				
				if( count( $SqlSearch ) > 0 )
					{
						$SqlSearch = "AND ".implode( " AND ", $SqlSearch );
						$NoNewsError = "По вашему запросу ничего не найдено. <a href=\"{$PageLink}\">Отменить поиск</a>";
						$SearchText = "По вашему запросу, найдено {posts} объявлений на {total} страницах. <a href=\"{$PageLink}\">Отменить поиск</a>";
						$PageLink = "{$PageLink}search/".( $SearchTextForm ? urlencode( htmlspecialchars( $SearchTextForm, ENT_QUOTES, $config['charset'] ) ) : "---" )."/".( $OffersType ? $OffersType : "---" )."/page/{page}";
						$SearchInfo = true;
					}
						else
					{
						$SqlSearch = "";	
					}
			}
		
		//--------------------------------------------------=-=-=-=-=
		//	Если нет поиска, то просто выводим объявления категории
		//--------------------------------------------------=-=-=-=-=
		
				else
			{
				$OffersCatMainTemplate = @file_get_contents( $tpl->dir."/offers/{$Folder}/category/main.tpl" );
				$OffersCatListTemplate = @file_get_contents( $tpl->dir."/offers/{$Folder}/category/list.tpl" );
				$cats = $Offers->GenerateTemplateThreadCat( $OffersCatMainTemplate, $OffersCatListTemplate, $Offers->RequestCat, $Offers->Config['view_cat_max_columns'] );
				
				$PageLink = $Offers->ReturnLinkCategory( $Offers->RequestCat );
				$PageLink = "{$PageLink}page/{page}";
				$NoNewsError = "Объявленией не обнаружено.";
				$SearchInfo = false;
			}
			
		
		if( $Offers->Config['rss_on'] == "yes" )
			{
				$rssLink = $Offers->ReturnLinkCategory( $Offers->RequestCat );
				$rssLink .= $Offers->AltUrl === true ? "rss.xml" : "&type=rss";
			}
		
		//--------------------------------------------------=-=-=-=-=
		//	Генерация объявлений категории и её подкатегорий
		//--------------------------------------------------=-=-=-=-=
		
		$order = array();
		if( $Offers->Config['echo_post_supervip'] != "no" ) $order[] = "`super_vip_date` DESC";
		if( $Offers->Config['echo_post_vip'] != "no" ) $order[] = "`vip_date` DESC";
		$order[] = "`date` DESC";
		$order = implode( ", ", $order );
		
		$ThreadCatForSql = implode( ",", $ThreadCatForSql );
		$NewsList = array(
		
			"template"		=> "offers/{$Folder}/offers.short.tpl",
			"template_nav"	=> "offers/{$Folder}/navigation.tpl",
			"template_info"	=> "offers/{$Folder}/info.tpl",
			"tpl_compile"	=> "offers_content",
			"cashe_folder"	=> "category/",
			"cashe_file"	=> "cashe_{$Offers->RequestCat}.tmp",
			"cache"			=> $Offers->Config['region_on'] == "on" ? false : true,
			"sql_count"		=> "SELECT COUNT(*) as count FROM ".PREFIX."_offers_post WHERE category IN ({$ThreadCatForSql}) AND approve='1' {$SqlRegion} {$SqlSearch}",
			"sql_query"		=> "SELECT * FROM ".PREFIX."_offers_post WHERE category IN ({$ThreadCatForSql}) AND approve='1' {$SqlRegion} {$SqlSearch} ORDER BY {$order} {limit}",
			"num"			=> $OnPage,
			"nav"			=> $PageLink,
			"search_info"	=> $SearchInfo,
			"search_text"	=> $SearchText,
			"no_news_error" => $NoNewsError,
			
		);
			
		require( ENGINE_DIR."/modules/offers/list.post.php" );
		
		// Разрешаем вывод формы поиска
		$OffersLoadMainTpl = true;
		if( $Offers->Config['fastsearch_on'] != "on" ) $OffersAllowSearch = false;
		
		// Ключевые слова и описание для поисковиков
		if( $RowCat['description'] ) $metatags['description'] = stripslashes( $RowCat['description'] );
		if( $RowCat['keywords'] ) $metatags['keywords'] = stripslashes( $RowCat['keywords'] );
	}

//--------------------------------------------------=-=-=-=-=
//	В случае ошибки, выводим информацию
//--------------------------------------------------=-=-=-=-=

		else
	{
		$tpl->Load_Template( "info.tpl" );
		$tpl->set( "{title}", "Ошибка" );
		$tpl->set( "{error}", "Категория не найдена" );
		$tpl->compile( "offers" );
		$tpl->clear();
	}

?>


Собственно, подгоняю один модуль под себя и мне потребовалось сделать чтобы пост размещался в нескольких категориях, я сделал чтобы в БД записывались ID категории через запятую(1,45,56), собственно все как и положено (ранее записывалась только одна).
Но вот как вывести все это дело на сайт не могу понят, т.е. нужно сделать проверку есть ли этот пост в категории или нет, кто подскажет как?
  • Вопрос задан
  • 298 просмотров
Решения вопроса 1
@bkosun
Используйте регулярные выражения, примерно так:

$allow_list = explode( ',', $user_group[$member_id['user_group']]['allow_cats'] );
		
		if( $allow_list[0] != "all" ) {
	
			if( $config['allow_multi_category'] ) {
					
				$where[] = PREFIX . "_post.category regexp '[[:<:]](" . implode( '|', $allow_list ) . ")[[:>:]]'";
				
			} else {
					
				$where[] = PREFIX . "_post.category IN ('" . implode( "','", $allow_list ) . "')";
				
			}
		
		}


Другие примеры можно посмотреть в следующем файле: \engine\modules\functions.php
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы