Форум » Система построения сайтов » Модули » Сторонние модули » Поиск похожих материалов в модуле.
Открыть Ответить

Поиск похожих материалов в модуле.

0

0

1
23.01.2012 14:32:57

Здравствуйте. Заказал доработку одного из модулей. В задании которого было указано, что хотелось бы видеть на странице с модуля в пользовательской части раздел Похожие Публикации.

Вот человек задумался как это сделать, не нагружая дополнительно систему лишними запросами. Не подскажет никто?

Тоесть все будет оформлено как на ДЛЕ. Поиск был бы в Автоматическом режиме.

Версия системы SLAED CMS 5.* Pro
Версия PHP PHP 5
Artem21
Artem21
4.32

4.32

2
24.01.2012 12:29:55

Ну ты даешь за разработчика всю работу так сделаешь.

Я давно реализовал такое на сайте с кешированием запроса похожих новостей.

ra55551
ra55551
3.75

3.75

3
24.01.2012 15:44:21

ra55551 я не просил писать, что я сделаю за разработчика, а что нет. Я попросил обрисовать как лучше сделать. Или показать пример. Вместо того, чтобы расхваливать себя какой ты умный. Лучше бы ссылку на пример написал. Или подсказал алгоритм.

Artem21
Artem21
4.32

4.32

4
25.01.2012 13:27:26

Вот почитай эту статью Кеширование блоков с sql-запросами для slaed cms.

Ну а тут готовое решение

Написал на скорую руку . Есть ньансы но думаю разберешься

Найти код в modules/news/index.php

Код
//старый код
if ($confn['assoc']) {
			if ($associated[strlen($associated)-1] == "-") $associated = substr($associated, 0, -1);
			$asso = str_replace("-", ",", $associated);
			$limit = intval($confn['asocnum']);
			list($count) = $db->sql_fetchrow($db->sql_query("SELECT Count(sid) FROM ".$prefix."_news WHERE catid IN (".$asso.") AND sid!='".$id."' AND time<=now() AND status!='0'"));
			if ($count >= $limit) {
				$random = mt_rand(0, $count - $limit);
				$result = $db->sql_query("SELECT sid, title, time FROM ".$prefix."_news WHERE catid IN (".$asso.") AND sid!='".$id."' AND time<=now() AND status!='0' ORDER BY time DESC LIMIT ".$random.", ".$limit);
				$cont .= tpl_eval("open");
				$cont .= "<h2>"._ASSTORY."</h2>"
				."<table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"hover\">";
				while(list($s_sid, $title, $time) = $db->sql_fetchrow($result)) {
					$cont .= "<tr><td><a href=\"index.php?name=".$conf['name']."&op=view&id=".$s_sid."\" title=\"".$title."\"><img src=\"".img_find("all/news.png")."\" border=\"0\"></a></td><td width=\"98%\"><a href=\"index.php?name=".$conf['name']."&op=view&id=".$s_sid."\" title=\"".$title."\">".$title."</a></td></tr>";
				}
				$cont .= "</table>";
				$cont .= tpl_eval("close");
			}
		}

заменить на

Код
//новый код будет создавать файл кеша с ид данной новости
if ($confn['assoc']) {
//проверяем если кеш есть то берем из кеша
if(file_exists("config/cache/newsrelated".$id.".tmp")){
$cont .= file_get_contents("config/cache/newsrelated".$id.".tmp");
}
//если нет то создаем фал кеша с ид данной новости
else{

			if ($associated[strlen($associated)-1] == "-") $associated = substr($associated, 0, -1);
			$asso = str_replace("-", ",", $associated);
			$limit = intval($confn['asocnum']);
			list($count) = $db->sql_fetchrow($db->sql_query("SELECT Count(sid) FROM ".$prefix."_news WHERE catid IN (".$asso.") AND sid!='".$id."' AND time<=now() AND status!='0'"));
			if ($count >= $limit) {
				$random = mt_rand(0, $count - $limit);
				$result = $db->sql_query("SELECT sid, title, time FROM ".$prefix."_news WHERE catid IN (".$asso.") AND sid!='".$id."' AND time<=now() AND status!='0' ORDER BY time DESC LIMIT ".$random.", ".$limit);
				$cont .= tpl_eval("open");
				$cont .= "<h2>"._ASSTORY."</h2>"
				."<table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"hover\">";
				while(list($s_sid, $title, $time) = $db->sql_fetchrow($result)) {
					$cont .= "<tr><td><a href=\"index.php?name=".$conf['name']."&op=view&id=".$s_sid."\" title=\"".$title."\"><img src=\"".img_find("all/news.png")."\" border=\"0\"></a></td><td width=\"98%\"><a href=\"index.php?name=".$conf['name']."&op=view&id=".$s_sid."\" title=\"".$title."\">".$title."</a></td></tr>";
				}
				$cont .= "</table>";
				$cont .= tpl_eval("close");
			}
			//записываем кеш
			$fp = fopen("config/cache/newsrelated".$id.".tmp", "wb");fwrite($fp,$cont);fclose($fp);
			
			
			}
			
			
			
			
		}

В function/function.php добавить функцию

Код
/* удалнение кеша*/
function clear_cache($cache_area = false,$system="") {
	$adsystem = ($system) ? '/system' : "";
	$fdir = opendir('config/cache'.$adsystem.'' );
	
	while ( $file = readdir( $fdir ) ) {
		if( $file != '.' and $file != '..' and $file != '.htaccess' and $file != 'system' ) {
			
			if( $cache_area ) {
				
				if( strpos( $file, $cache_area ) !== false ) @unlink( 'config/cache/'.$adsystem.'' . $file );
			
			} else {
				
				@unlink( 'config/cache/'.$adsystem.'' . $file );
			
			}
		}
	}
}

В файле modules/news/admin/index.php в функции function news() после строки

Код
echo $cont;

Вставить

Код
//Теперь при заходе в админку буде очищаться весь кеш.
clear_cache();
ra55551
ra55551
3.75

3.75

5
25.01.2012 15:12:06

Благодарю.

Artem21
Artem21
4.32

4.32

Открыть Ответить
Хотите опробовать SLAED CMS в действии?
Идеи и предложения
Обратная связь
Подтверждение

Поделиться
QR-код

Предварительный просмотр