Потребовалось для магазина сделать блоки «Популярные», «Самые обсуждаемые» и т.п.
Пример можно посмотреть здесь MYscrap
Объясню на примере добаления блока «Популярные»
В Addon.class.php создаем функцию
public function GetAddonsPopular($iLimit) {
return $this->oMapper->GetAddonsPopular($iLimit);
}
В Addon.mapper.class.php создаем функцию
public function GetAddonsPopular($iLimit) {
$sql = "SELECT
*
FROM
".DB_TABLE_ADDONS."
WHERE
addon_moderation = '1'
AND addon_active = '1'
AND addon_type = '0'
ORDER by
addon_count_use asc
LIMIT ?d;
";
$aResult=array();
if ($aRows=$this->oDb->select($sql, $iLimit)) {
foreach ($aRows as $aRow) {
$aResult[]=new AddonEntity_Addon($aRow);
}
}
return $aResult;
}
Далее создать файл classes/blocks/BlockAddonPopular.class.php
<?
class BlockAddonPopular extends Block {
public function Exec() {
$aAddonsPopular = $this->Addon_GetAddonsPopular(ADDON_POPULAR_LIMIT);
$this->Viewer_Assign("aAddonsPopular",$aAddonsPopular);
}
}
?>
А в папке активного скина файл block.AddonPopular.tpl
ADDON_POPULAR_LIMIT — параметр определяет количество выводимых товаров в блоке
его прописываем в конфиге модуля.
Теперь вопрос: также хотелось сделать блок «Самые обсуждаемые», но так как с MySQL знаком плохо не знаю как сделать запрос к БД. Прошу помочь знающих людей. Заранее спасибо.
UPD
Сделал функцию для блока «Самые обсуждаемые», но она делает два запроса к БД
public function GetAddonsTop($iLimit) {
$sql = "SELECT
addon_id
FROM
".DB_TABLE_ADDONS_COMMENT."
GROUP BY
addon_id
ORDER BY
MAX(addon_id) asc
LIMIT ?d;
";
$aIds=array();
if ($aRows=$this->oDb->select($sql, $iLimit)) {
foreach ($aRows as $aRow) {
$aIds[]=$aRow["addon_id"];
}
}
$sWhere = '';
$iCount = count($aIds);
if ($iCount == 1) {
$sWhere = " addon_id = ".$aIds[0]." ";
}
else if ($iCount > 1){
$sWhere = " addon_id IN (".implode(',', $aIds) .") ";
}
$aResult=array();
if ($iCount > 0) {
$sql = "SELECT
*
FROM
".DB_TABLE_ADDONS."
WHERE
".$sWhere."
ORDER BY
RAND()
";
if ($aRows=$this->oDb->select($sql)) {
foreach ($aRows as $aRow) {
$aResult[]=new AddonEntity_Addon($aRow);
}
}
}
return $aResult;
}
Может кто-нибудь поможет оптимизировать эту функцию?
0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.
0 комментариев