Всем привет. Мне тоже нужен модуль похожих объявлений, который будет располагаться под текущим просматриваемым объявлением. Давайте начнем хоть с чего-то. Можно взять за основу модуль вывода последних/популярных/случайных объявлений, который в комплекте - mod_adsmanager_ads. Установить в настройках категорий "-1" и Latest и вставить модуль в специально созданную позицию под объявлением. В принципе, это будет почти то, что нужно, за исключением того, что в блоке будет выводиться в том числе и то объявление, которое показано в данный момент. Оно в блоке ни к чему, надо убрать. Плюс, хотелось бы добавить критерий похожести, например, в блоке должны выводиться объявления только по тому же городу, что и текущее. Таким образом, нам надо:
1) сделать проверку, попало ли в блок текущее объявление, если да - удалить его;2) добавить критерий похожести. Т.е. добавлять в блок только объявления, у которых поле city в таблице #__adsmanager_ads совпадает с полем city текущего объявления (таким образом можно реализовать и другие критерии, не только по городу).Далее одной логики становится недостаточно, нужны еще знания php, с которыми не очень, так что пожалуйста помогите, кто разбирается. Говорим о AdsManager 2.7 Stable. Итак, берем модуль mod_adsmanager_ads. Код вывода блока объявлений находится в файле vertical.php (horizontal.php):
foreach($contents as $row) {
?>
<li class="mostread">
<?php
$linkTarget = TRoute::_("index.php?option=com_adsmanager&view=details&id=".$row->id."&catid=".$row->catid);
echo "<a href='$linkTarget'>".$row->ad_headline."</a>";
if ($displaycategory == 1)
echo " <span class=\"adsmanager_cat\">(".$row->parent." / ".$row->cat.")";
if ($displaydate == 1)
echo " ".reorderDate($row->date_created)."</span>";
?>
</li>
<?php
}
$contents для этого отрезка определяется в файле mod_adsmanager_ads.php:
$contents = $contentmodel->getLatestContents($nb_ads,$sort_sql,$catselect);
Функция getLatestContents, непосредственно формирующая $contents, находится в файле \administrator_com_adsmanager\models\content.php:
function getLatestContents($nbcontents,$sort_type=0,$catselect="no")
{
switch($sort_type)
{
/* Popular */
case 2:
$order_sql = "ORDER BY a.views DESC,a.date_created DESC ,a.id DESC ";
break;
/* Random */
case 1:
$order_sql = "ORDER BY RAND() ";
break;
/* Latest */
case 0:
default:
$order_sql = "ORDER BY a.date_created DESC ,a.id DESC ";
break;
}
$cat_query = "";
switch($catselect)
{
case "no";
break;
case "-1":
$catid = JRequest::getInt('catid', 0 );
$this->_db->setQuery( "SELECT c.id, c.name,c.parent ".
" FROM #__adsmanager_categories as c ".
" WHERE c.published = 1 ORDER BY c.parent,c.ordering");
$listcats = $this->_db->loadObjectList();
//List
$list = array();
$list[] = $catid;
$this->_recurseSearch($listcats,$list,$catid);
$listids = implode(',', $list);
if (($catid != 0)&&($catid != -1))
{
$cat_query = "adcat.catid IN ($listids) AND ";
}
break;
default:
$cat_query = "adcat.catid = $catselect AND ";
break;
}
if (ADSMANAGER_SPECIAL == 'newspaper') {
$cat_query .= " (a.ad_publishtype = 'both' OR a.ad_publishtype = 'online') AND ";
}
$sql = " SELECT a.*,p.id as parentid,p.name as parent,c.id as catid, c.name as cat,u.username as user ".
" FROM #__adsmanager_ads as a ".
" INNER JOIN #__adsmanager_adcat as adcat ON adcat.adid = a.id ".
" LEFT JOIN #__users as u ON a.userid = u.id ".
" INNER JOIN #__adsmanager_categories as c ON adcat.catid = c.id ".
" LEFT JOIN #__adsmanager_categories as p ON c.parent = p.id ".
" WHERE 1 AND $cat_query c.published = 1 and a.published = 1 GROUP BY a.id $order_sql LIMIT 0, $nbcontents";
if (function_exists("updateQuery"))
updateQuery($sql);
$this->_db->setQuery($sql);
$contents = $this->_db->loadObjectList();
foreach($contents as &$content) {
$content->images = @json_decode($content->images);
$content->cat = JText::_($content->cat);
if ($content->parent != "")
$content->parent = JText::_($content->parent);
if (!is_array($content->images))
$content->images = array();
}
return $contents;
}
Вопрос к спецам, куда и что добавить, чтобы сделать пункты 1) и 2)?