Открыть Ответить

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

0.00

0.00

1
23.01.2012 14:32:57

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

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

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

SLAED CMS 5.* Pro
PHP 5
Группа
Клиент
Пункты
793
Регистрация
19.12.2007
Пол
Мужчина
Предупреждения
Нет
Artem21
Artem21
4.32

4.32

24.01.2012 12:29:55

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

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

Группа
Клиент
Пункты
2121
Регистрация
02.11.2008
Пол
Мужчина
Из
Пермь
Предупреждения
Нет
ra55551
ra55551
3.75

3.75

24.01.2012 15:44:21

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

Группа
Клиент
Пункты
793
Регистрация
19.12.2007
Пол
Мужчина
Предупреждения
Нет
Artem21
Artem21
4.32

4.32

25.01.2012 13:27:26

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

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


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



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

<br /> //старый код<br /> if ($confn['assoc']) {<br /> if ($associated[strlen($associated)-1] == "-") $associated = substr($associated, 0, -1);<br /> $asso = str_replace("-", ",", $associated);<br /> $limit = intval($confn['asocnum']);<br /> 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'"));<br /> if ($count >= $limit) {<br /> $random = mt_rand(0, $count - $limit);<br /> $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);<br /> $cont .= tpl_eval("open");<br /> $cont .= "<h2>"._ASSTORY."</h2>"<br /> ."<table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"hover\">";<br /> while(list($s_sid, $title, $time) = $db->sql_fetchrow($result)) {<br /> $cont .= "<tr><td><a href=\"index.php&#063;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&#063;name=".$conf['name']."&op=view&id=".$s_sid."\" title=\"".$title."\">".$title."</a></td></tr>";<br /> }<br /> $cont .= "</table>";<br /> $cont .= tpl_eval("close");<br /> }<br /> }<br />



заменить на

<br /> //новый код будет создавать файл кеша с ид данной новости<br /> if ($confn['assoc']) {<br /> //проверяем если кеш есть то берем из кеша<br /> if(file_exists("config/cache/newsrelated".$id.".tmp")){<br /> $cont .= file_get_contents("config/cache/newsrelated".$id.".tmp");<br /> }<br /> //если нет то создаем фал кеша с ид данной новости<br /> else{<br /> <br /> if ($associated[strlen($associated)-1] == "-") $associated = substr($associated, 0, -1);<br /> $asso = str_replace("-", ",", $associated);<br /> $limit = intval($confn['asocnum']);<br /> 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'"));<br /> if ($count >= $limit) {<br /> $random = mt_rand(0, $count - $limit);<br /> $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);<br /> $cont .= tpl_eval("open");<br /> $cont .= "<h2>"._ASSTORY."</h2>"<br /> ."<table width=\"100%\" border=\"0\" cellpadding=\"3\" cellspacing=\"0\" class=\"hover\">";<br /> while(list($s_sid, $title, $time) = $db->sql_fetchrow($result)) {<br /> $cont .= "<tr><td><a href=\"index.php&#063;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&#063;name=".$conf['name']."&op=view&id=".$s_sid."\" title=\"".$title."\">".$title."</a></td></tr>";<br /> }<br /> $cont .= "</table>";<br /> $cont .= tpl_eval("close");<br /> }<br /> //записываем кеш<br /> $fp = fopen("config/cache/newsrelated".$id.".tmp", "wb");fwrite($fp,$cont);fclose($fp);<br /> <br /> <br /> }<br /> <br /> <br /> <br /> <br /> } <br /> <br />




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

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


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

echo $cont;



Вставить

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

Группа
Клиент
Пункты
2121
Регистрация
02.11.2008
Пол
Мужчина
Из
Пермь
Предупреждения
Нет
ra55551
ra55551
3.75

3.75

25.01.2012 15:12:06

Благодарю.

Группа
Клиент
Пункты
793
Регистрация
19.12.2007
Пол
Мужчина
Предупреждения
Нет
Artem21
Artem21
4.32

4.32

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

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