Итак, задача:
Отсортировать элементы по цене (цены берутся из отдельной таблицы, свои типы цен, валюты, остатки и т.п., редакция старт)
[spoiler]
1. для начала описываем необходимые нам таблицы, для фильтрации, сортировки и т.п.
в моем случае их примерно так. (стоит отметить, что пока сильно не заморачивался с поддержкой инфоблоков 1.0, включал поддержку на будущее местами)
2. Теперь можно приступить и к компонету... параметры наскорую взял из одного из своих компонентов
все стандартно никаких велосипедов нет, отмечу, что для фильтрации и т.п. используются айдишники свойст, а не их коды (так проще);
3. Сам компонент (гибрид апи старого и нового ядра)
все стандартно, подготавливаем данные
подключаем необходимые модули
получаем параметры инфоблока, больше нас будут интересовать версия инфоблока
подготавливаем массив select (если нужно добавить дополнительные поля, их стоит описать в нашем \Siteshouse\Asz\ElementTable)
добавляем свойства, если указаны в параметрах компонента (в $arSelect впринципе необязательно загонять, значения свойств удобнее получить отдельно уже в getlist элементов)
дальше фильтр
дальше уже формируем даннные для запроса в бд, заодно устанавливаем сортировки, лимиты и т.п. (пока получение свойств вырезаются, быстрее с помощью старого апи их собрать, после если потребуется можно и доработать)
с постраничкой возникли проблемы, поэтому нужен костыль для подсчета количества элементов
теперь все готово, для выборки данных. Свойства получаем в цикле используя CIBlockElement::GetProperty
постраничка, ничего толкового не придумал. Поэтому костыль в 2-3 метра
мета теги и данные для крошек (старые метатеги из свойств, уже можно не учитывать)
секретное получение цен, ничего сверх там не хранится (сначала забираю данные о доступных типах цен для групп пользователей, дальше метод уже просто собирает цены в массив array("ид-элемента"=>array("VALUE"=>10000.00,"CUR"=>"RUB"
))
ну дальше тут понятно
и крошки с метатегами
Ну и разумеется данный ориентированно костыльный подход, требует критики.
Поэтому любая критика в комментариях приветствуется...
Отсортировать элементы по цене (цены берутся из отдельной таблицы, свои типы цен, валюты, остатки и т.п., редакция старт)
[spoiler]
1. для начала описываем необходимые нам таблицы, для фильтрации, сортировки и т.п.
в моем случае их примерно так. (стоит отметить, что пока сильно не заморачивался с поддержкой инфоблоков 1.0, включал поддержку на будущее местами)
CModule::AddAutoloadClasses('siteshouse.asz', array(
'Siteshouse\Asz\PriceTable' => 'lib/price.php', //секретке
'Siteshouse\Asz\CurencyFunc' => 'lib/curencyfunc.php', //секретке
'Siteshouse\Asz\PropertyValuesTable' => 'lib/propertyvalues.php',
'Siteshouse\Asz\ElementTable' => 'lib/element.php',
)); |
<?php
/**
* Bitrix Framework
* @package Bitrix
* @subpackage siteshouse.asz
* @copyright 2014 Zahalski Andrew
*/
namespace Siteshouse\Asz;
use Bitrix\Main\Entity;
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
class ElementTable extends Entity\DataManager
{
public static function getFilePath()
{
return __FILE__;
}
public static function getTableName()
{
return 'b_iblock_element';
}
public static function getMap()
{
return array(
'ID' => array(
'data_type' => 'integer',
'primary' => true,
'autocomplete' => true,
),
'NAME' => array(
'data_type' => 'string',
),
'CODE' => array(
'data_type' => 'string',
),
'PREVIEW_TEXT' => array(
'data_type' => 'string',
),
'DETAIL_TEXT' => array(
'data_type' => 'string',
),
'IBLOCK_ID' => array(
'data_type' => 'integer',
),
'IBLOCK' => array(
'data_type' => 'Iblock',
'reference' => array('=this.IBLOCK_ID' => 'ref.ID'),
),
'ACTIVE' => array(
'data_type' => 'boolean',
'values' => array('N','Y'),
),
'IBLOCK_SECTION_ID' => array(
'data_type' => 'integer',
),
'DETAIL_PICTURE' => array(
'data_type' => 'integer',
),
'PROP' => array(
'data_type' => 'Siteshouse\Asz\PropertyValuesTable',
'reference' => array('=this.ID' => 'ref.IBLOCK_ELEMENT_ID'),
'join_type' => "LEFT"
),
'PRICE' => array(
'data_type' => 'Siteshouse\Asz\PriceTable',
'reference' => array('=this.ID' => 'ref.PRODID'),
'join_type' => "LEFT"
),
);
}
}
|
<?php
/**
* Bitrix Framework
* @package Bitrix
* @subpackage siteshouse.asz
* @copyright 2014 Zahalski Andrew
*/
namespace Siteshouse\Asz;
use Bitrix\Main\Entity;
use Bitrix\Main\Localization\Loc;
Loc::loadMessages(__FILE__);
class PropertyValuesTable extends Entity\DataManager {
public static $iblockNameIb = false;
public static $iblockTyperIb = false;
public static function getFilePath()
{
return __FILE__;
}
public static function getTableName()
{
//self::$iblockTyperIb = true;
//self::$iblockNameIb = 3;
if(!self::$iblockTyperIb || !self::$iblockNameIb)
return 'b_iblock_element_property';
return 'b_iblock_element_prop_s'.self::$iblockNameIb;
}
public static function getMap()
{
$tableField = array();
if(!self::$iblockTyperIb) {
$tableField['ID'] = array(
'data_type' => 'integer',
'primary' => true,
'autocomplete' => true,
);
$tableField['IBLOCK_PROPERTY_ID'] = array(
'data_type' => 'integer',
'primary' => false,
);
$tableField['IBLOCK_ELEMENT_ID'] = array(
'data_type' => 'integer',
'primary' => false,
);
$tableField['VALUE'] = array(
'data_type' => 'string',
'primary' => false,
);
$tableField['VALUE_TYPE'] = array(
'data_type' => 'string',
'primary' => false,
);
$tableField['VALUE_ENUM'] = array(
'data_type' => 'integer',
'primary' => false,
);
$tableField['VALUE_NUM'] = array(
'data_type' => 'string',
'primary' => false,
);
$tableField['DESCRIPTION'] = array(
'data_type' => 'string',
'primary' => false,
);
}else{
\CModule::IncludeModule("iblock");
$IBLOCK_ID = self::$iblockNameIb;
$properties = \CIBlockProperty::GetList(Array("sort"=>"asc", "name"=>"asc"), Array("IBLOCK_ID"=>$IBLOCK_ID));
$arProp = array();
while ($prop_fields = $properties->GetNext())
{
$arProp[] = $prop_fields;
}
$tableField["IBLOCK_ELEMENT_ID"] = array(
'data_type' => 'integer',
'primary' => true,
'autocomplete' => false,
);
foreach($arProp as $prop){
$tableField["PROPERTY_".$prop["ID"]] = array(
'data_type' => ($prop["TYPE"]=="N" || $prop["TYPE"]=="L" || $prop["TYPE"]=="F" || $prop["TYPE"]=="G" || $prop["TYPE"]=="E") ? 'integer' : 'string',
'primary' => false,
);
$tableField["DESCRIPTION_".$prop["ID"]] = array(
'data_type' => 'string',
'primary' => false,
);
}
}
return $tableField;
}
}
?>
|
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
/** @var array $arCurrentValues */
/** @global CUserTypeManager $USER_FIELD_MANAGER */
global $USER_FIELD_MANAGER;
if(!CModule::IncludeModule("iblock"))
return;
$arIBlockType = CIBlockParameters::GetIBlockTypes();
$arIBlock = array();
$rsIBlock = CIBlock::GetList(array("sort" => "asc"), array("TYPE" => $arCurrentValues["IBLOCK_TYPE"], "ACTIVE"=>"Y"));
while($arr=$rsIBlock->Fetch())
$arIBlock[$arr["ID"]] = "[".$arr["ID"]."] ".$arr["NAME"];
$arProperty = array();
$arPropertyID = array();
$arProperty_LNS = array();
$arProperty_N = array();
$arProperty_X = array();
if (0 < intval($arCurrentValues['IBLOCK_ID']))
{
$rsProp = CIBlockProperty::GetList(array("sort"=>"asc", "name"=>"asc"), array("IBLOCK_ID"=>$arCurrentValues["IBLOCK_ID"], "ACTIVE"=>"Y"));
while ($arr=$rsProp->Fetch())
{
if($arr["PROPERTY_TYPE"] != "F"){
$arProperty[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"];
$arPropertyID[$arr["ID"]] = "[".$arr["CODE"]."] ".$arr["NAME"];
}
if($arr["PROPERTY_TYPE"]=="N")
$arProperty_N[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"];
if($arr["PROPERTY_TYPE"]!="F")
{
if($arr["MULTIPLE"] == "Y")
$arProperty_X[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"];
elseif($arr["PROPERTY_TYPE"] == "L")
$arProperty_X[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"];
elseif($arr["PROPERTY_TYPE"] == "E" && $arr["LINK_IBLOCK_ID"] > 0)
$arProperty_X[$arr["CODE"]] = "[".$arr["CODE"]."] ".$arr["NAME"];
}
}
}
$arProperty_UF = array();
$arSProperty_LNS = array();
$arSort = CIBlockParameters::GetElementSortFields(
array('SHOWS', 'SORT', 'TIMESTAMP_X', 'NAME', 'ID', 'ACTIVE_FROM', 'ACTIVE_TO'),
array('KEY_LOWERCASE' => 'Y')
);
$arAscDesc = array(
"asc" => GetMessage("IBLOCK_SORT_ASC"),
"desc" => GetMessage("IBLOCK_SORT_DESC"),
);
$arComponentParameters = array(
"PARAMETERS" => array(
"IBLOCK_TYPE" => array(
"PARENT" => "BASE",
"NAME" => GetMessage("IBLOCK_TYPE"),
"TYPE" => "LIST",
"VALUES" => $arIBlockType,
"REFRESH" => "Y",
),
"IBLOCK_ID" => array(
"PARENT" => "BASE",
"NAME" => GetMessage("IBLOCK_IBLOCK"),
"TYPE" => "LIST",
"ADDITIONAL_VALUES" => "Y",
"VALUES" => $arIBlock,
"REFRESH" => "Y",
),
"SECTION_ID" => array(
"PARENT" => "BASE",
"NAME" => GetMessage("IBLOCK_SECTION_ID"),
"TYPE" => "STRING",
"DEFAULT" => '={$_REQUEST["SECTION_ID"]}',
),
"SECTION_CODE" => array(
"PARENT" => "BASE",
"NAME" => GetMessage("IBLOCK_SECTION_CODE"),
"TYPE" => "STRING",
"DEFAULT" => '',
),
"ELEMENT_SORT_FIELD" => array(
"PARENT" => "DATA_SOURCE",
"NAME" => GetMessage("IBLOCK_ELEMENT_SORT_FIELD"),
"TYPE" => "LIST",
"VALUES" => $arSort,
"ADDITIONAL_VALUES" => "Y",
"DEFAULT" => "sort",
),
"ELEMENT_SORT_ORDER" => array(
"PARENT" => "DATA_SOURCE",
"NAME" => GetMessage("IBLOCK_ELEMENT_SORT_ORDER"),
"TYPE" => "LIST",
"VALUES" => $arAscDesc,
"DEFAULT" => "asc",
"ADDITIONAL_VALUES" => "Y",
),
"FILTER_NAME" => array(
"PARENT" => "DATA_SOURCE",
"NAME" => GetMessage("IBLOCK_FILTER_NAME_IN"),
"TYPE" => "STRING",
"DEFAULT" => "arrFilter",
),
"SECTION_URL" => CIBlockParameters::GetPathTemplateParam(
"SECTION",
"SECTION_URL",
GetMessage("IBLOCK_SECTION_URL"),
"",
"URL_TEMPLATES"
),
"DETAIL_URL" => CIBlockParameters::GetPathTemplateParam(
"DETAIL",
"DETAIL_URL",
GetMessage("IBLOCK_DETAIL_URL"),
"",
"URL_TEMPLATES"
),
"ADD_SECTIONS_CHAIN" => array(
"PARENT" => "ADDITIONAL_SETTINGS",
"NAME" => GetMessage("CP_BCS_ADD_SECTIONS_CHAIN"),
"TYPE" => "CHECKBOX",
"DEFAULT" => "N",
),
"SET_TITLE" => array(),
"SET_STATUS_404" => array(
"PARENT" => "ADDITIONAL_SETTINGS",
"NAME" => GetMessage("CP_BCS_SET_STATUS_404"),
"TYPE" => "CHECKBOX",
"DEFAULT" => "N",
),
"PAGE_ELEMENT_COUNT" => array(
"PARENT" => "VISUAL",
"NAME" => GetMessage("IBLOCK_PAGE_ELEMENT_COUNT"),
"TYPE" => "STRING",
"DEFAULT" => "30",
),
"PROPERTY_CODE" => array(
"PARENT" => "VISUAL",
"NAME" => GetMessage("IBLOCK_PROPERTY"),
"TYPE" => "LIST",
"MULTIPLE" => "Y",
"VALUES" => $arPropertyID,
"ADDITIONAL_VALUES" => "Y",
),
"CACHE_TIME" => array("DEFAULT"=>36000000),
"CACHE_FILTER" => array(
"PARENT" => "ADDITIONAL_SETTINGS",
"NAME" => GetMessage("IBLOCK_CACHE_FILTER"),
"TYPE" => "CHECKBOX",
"DEFAULT" => "N",
),
),
);
CIBlockParameters::AddPagerSettings($arComponentParameters, GetMessage("T_IBLOCK_DESC_PAGER_CATALOG"), true, true);
?>
|
3. Сам компонент (гибрид апи старого и нового ядра)
все стандартно, подготавливаем данные
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
use Siteshouse\Asz as ASZ;
global $DB;
/** @global CUser $USER */
global $USER;
/** @global CMain $APPLICATION */
global $APPLICATION;
/** @global CCacheManager $CACHE_MANAGER */
global $CACHE_MANAGER;
CPageOption::SetOptionString("main", "nav_page_in_session", "N");
//echo'<pre>';print_r($arParams);echo'</pre>';
$arParams["IBLOCK_ID"] = intval($arParams["IBLOCK_ID"]);
$arParams["SECTION_ID"] = intval($arParams["SECTION_ID"]);
$arParams["SECTION_CODE"] = trim($arParams["SECTION_CODE"]);
//параметры постраничной навигации
$arParams["DISPLAY_TOP_PAGER"] = $arParams["DISPLAY_TOP_PAGER"]=="Y";
$arParams["DISPLAY_BOTTOM_PAGER"] = $arParams["DISPLAY_BOTTOM_PAGER"]!="N";
$arParams["PAGER_TITLE"] = trim($arParams["PAGER_TITLE"]);
$arParams["PAGER_SHOW_ALWAYS"] = $arParams["PAGER_SHOW_ALWAYS"]!="N";
$arParams["PAGER_TEMPLATE"] = trim($arParams["PAGER_TEMPLATE"]);
$arParams["PAGER_DESC_NUMBERING"] = $arParams["PAGER_DESC_NUMBERING"]=="Y";
$arParams["PAGER_DESC_NUMBERING_CACHE_TIME"] = intval($arParams["PAGER_DESC_NUMBERING_CACHE_TIME"]);
$arParams["PAGER_SHOW_ALL"] = $arParams["PAGER_SHOW_ALL"]!=="N";
$arNavParams = array(
"nPageSize" => $arParams["PAGE_ELEMENT_COUNT"],
"bDescPageNumbering" => $arParams["PAGER_DESC_NUMBERING"],
'iNumPage' => is_set($_GET['PAGEN_1']) ? $_GET['PAGEN_1'] : 1,
"bShowAll" => $arParams["PAGER_SHOW_ALL"],
);
$arNavigation = CDBResult::GetNavParams($arNavParams);
if($arNavigation["PAGEN"]==0 && $arParams["PAGER_DESC_NUMBERING_CACHE_TIME"]>0)
$arParams["CACHE_TIME"] = $arParams["PAGER_DESC_NUMBERING_CACHE_TIME"];
//разрешенные свойства
if(!is_array($arParams["PROPERTY_CODE"]))
$arParams["PROPERTY_CODE"] = array();
foreach($arParams["PROPERTY_CODE"] as $k=>$v)
if($v==="")
unset($arParams["PROPERTY_CODE"][$k]);
global $arFilterMain;
$filterVar = $arFilterMain;
if($this->StartResultCache(false, array($arrFilter, $arNavigation, $filterVar, $limit))){
//логика
} |
if(!CModule::IncludeModule("iblock"))
{
$this->AbortResultCache();
ShowError(GetMessage("IBLOCK_MODULE_NOT_INSTALLED"));
return;
}
if(!CModule::IncludeModule('siteshouse.asz')) {
$this->AbortResultCache();
return;
} |
//получаем параметры инфоблока $res = CIBlock::GetByID($arParams["IBLOCK_ID"]); $arResult["IBLOCK"] = $res->GetNext(); //$arResult["IBLOCK"]["VERSION"] - версия инфоблока |
//необходимые поля
$arSelect = array("ID","IBLOCK_ID","CODE","NAME","ACTIVE","PREVIEW_TEXT","IBLOCK_SECTION_ID","DETAIL_PICTURE"); |
//получаем id свойств для выборки из настроек компонента
$arSelectProp = array();
$arSelectPropId = array();
if(is_array($arParams["PROPERTY_CODE"]) && count($arParams["PROPERTY_CODE"])>0){
foreach($arParams["PROPERTY_CODE"] as $propId) {
$arSelectProp[] = 'PROPERTY_'.str_replace("PROP","",$propId);
$arSelectPropId[] = str_replace("PROP","",$propId);
}
}
$arSelect = array_merge($arSelect,$arSelectProp); |
//фильтрация
$arFilter = array(
"IBLOCK_ID"=>$arParams["IBLOCK_ID"],
"ACTIVE"=>"Y",
);
if($arParams["SECTION_ID"]>0) {
$arFilter["IBLOCK_SECTION_ID"][] = $arParams["SECTION_ID"];
}
elseif(strlen($arParams["SECTION_CODE"])>0) {
$db_list = CIBlockSection::GetList(array(), array("IBLOCK_ID"=>$arParams["IBLOCK_ID"],"CODE"=>$arParams["SECTION_CODE"]), false, array("ID"));
if($ar_result = $db_list->GetNext())
{
$arParams["SECTION_ID"] = $ar_result["ID"];
}
}
if(is_array($filterVar)){
foreach($filterVar as $prop=>$val){
if($arResult["IBLOCK"]["VERSION"]==2){
$arFilter['PROP.'.$prop] = $val;
}elseif($arResult["IBLOCK"]["VERSION"]==1){
//TODO реализовать фильтр для первой версии инфоблоков
}
}
}
//получаем список вложенных разделов
$filterSection = array("IBLOCK_ID"=>$arParams["IBLOCK_ID"]);
if($arParams["SECTION_ID"]){
$filterSection["SECTION_ID"]=$arParams["SECTION_ID"];
}
$db_list = CIBlockSection::GetList(array(), array("IBLOCK_ID"=>$arParams["IBLOCK_ID"],"SECTION_ID"=>$arParams["SECTION_ID"]), false, array("ID"));
while($ar_result = $db_list->GetNext())
{
$arFilter["IBLOCK_SECTION_ID"][] = $ar_result["ID"];
} |
//собираем данные для выборки элементов
$query = array();
$query['select'] = array();
//устанавливаем айдишник и тип инфоблока
ASZ\PropertyValuesTable::$iblockNameIb = $arParams["IBLOCK_ID"];
if($arResult["IBLOCK"]["VERSION"]==2){ //инфоблоки 2.0
ASZ\PropertyValuesTable::$iblockTyperIb = true;
}elseif($arResult["IBLOCK"]["VERSION"]==1){ //инфоблоки 1.0
ASZ\PropertyValuesTable::$iblockTyperIb = false;
}
//добавляем сортировку
$orderPrice = true; //пока не выносим в параметры компонента
if($orderPrice){
$query['order'] = array("PRICE.PRICEVAL" => "ASC");
}else{
$query['order'] = array("NAME" => "DESC");
}
//добавляем поля и свойства для выборки
$arFinSelect = array();
foreach($arSelect as $val){
if(strpos($val,"PROPERTY_")!==false) {
$val = false;
}
if($val) $arFinSelect[] = $val;
}
//$arFinSelect[] = "PROP"; если надо выбрать значения свойств
$query['select'] = array_merge($query['select'],$arFinSelect);
//добавляем фильтр
$query['filter'] = $arFilter;
//добавляем лимиты для постранички
if (isset($arNavParams['nPageTop']))
{
$query['limit'] = $arNavParams['nPageTop'];
}
else
{
$query['limit'] = $arNavParams['nPageSize'];
$query['offset'] = ($arNavParams['iNumPage']-1) * $arNavParams['nPageSize'];
}
|
//подсчет для постранички, костылим
$query_chain = new \Bitrix\Main\Entity\Query(ASZ\ElementTable::getEntity());
$query_chain->setSelect(array('CNT' => array('expression' => array('COUNT(*)'), 'data_type'=>'integer')));
$query_chain->setFilter($query['filter']);
$result_chain = $query_chain->exec()->fetch();
$result_chain = $result_chain["CNT"];
unset($query_chain);
|
//собираем элементы
$result = ASZ\ElementTable::GetList($query);
unset($query);
$result = new CIBlockResult($result);
$result->SetUrlTemplates($arParams["DETAIL_URL"]);
$result->SetSectionContext();
$arResult["ITEMS"] = array();
$arResult["ITEM_IDS"] = array();
$countProp = count($arSelectPropId);
while($arItem = $result->GetNext())
{
if($countProp>0){
$db_props = CIBlockElement::GetProperty($arParams["IBLOCK_ID"], $arItem["ID"], array("sort" => "asc"), Array("ID"=>$arSelectPropId));
while($ar_props = $db_props->Fetch()){
$arItem["PROP"][$ar_props["ID"]] = $ar_props;
}
}
$arResult["ITEM_IDS"][] = $arItem["ID"];
$arButtons = CIBlock::GetPanelButtons(
$arItem["IBLOCK_ID"],
$arItem["ID"],
0,
array("SECTION_BUTTONS"=>false, "SESSID"=>false)
);
$arItem["EDIT_LINK"] = $arButtons["edit"]["edit_element"]["ACTION_URL"];
$arItem["DELETE_LINK"] = $arButtons["edit"]["delete_element"]["ACTION_URL"];
$arResult["ITEMS"][] = $arItem;
} |
//постраничная, костылим $result->NavStart($arNavigation,false,true); $result->NavRecordCount = $result_chain; $result->NavPageSize = $arNavParams['nPageSize']; $result->bShowAll = $arNavParams['bShowAll']; $result->NavPageCount = floor($result->NavRecordCount/$result->NavPageSize) + 1; $result->NavPageNomer = $arNavParams['iNumPage']; $arResult["NAV_STRING"] = $result->GetPageNavStringEx($navComponentObject, $arParams["PAGER_TITLE"], $arParams["PAGER_TEMPLATE"], $arNavParams['bShowAll']); $arResult["NAV_CACHED_DATA"] = $navComponentObject->GetTemplateCachedData(); $arResult["NAV_RESULT"] = $result; |
//мета теги для категории
$res = CIBlockSection::GetList(
$arOrder = Array("SORT"=>"DESC") ,
$arFilter = array('IBLOCK_ID'=>$arParams["IBLOCK_ID"],'CODE'=>$arParams["SECTION_CODE"]),
false,
false
);
while($obElement = $res->GetNextElement(false,false))
{
$arItem = $obElement->GetFields();
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arParams["IBLOCK_ID"], $arItem["ID"]);
$arResult["IPROPERTY_VALUES"] = $ipropValues->getValues();
$arResult["CHAIN"]["NAME"] = $arItem["NAME"];
$arResult["CHAIN"]["URL"] = $arItem['SECTION_PAGE_URL'];
}
|
)) if(count($arResult["ITEM_IDS"])>0){
//получаем типы цен для групп текущего пользователя
$arGroups = $USER->GetUserGroupArray();
if(is_array($arGroups)){
$priceTip = \Siteshouse\Asz\CurencyFunc::getPriceForGroup($arGroups,SITE_ID);
}else{
$priceTip = \Siteshouse\Asz\CurencyFunc::getPriceForGroup();
}
//получаем цены
$arResult["PRICE"] = \Siteshouse\Asz\CurencyFunc::getPriceBase($priceTip,$arResult["ITEM_IDS"],SITE_ID);
}
|
$this->SetResultCacheKeys(array( "NAV_CACHED_DATA", "CHAIN", "IPROPERTY_VALUES" )); $this->IncludeComponentTemplate(); |
if($this->StartResultCache(false, array($arrFilter, $arNavigation, $filterVar, $limit))){
//логика
} |
if(isset($arResult['IPROPERTY_VALUES']["SECTION_META_TITLE"]) && $arParams["SECTION_CODE"]) {
//$APPLICATION->SetTitle($arResult['IPROPERTY_VALUES']["SECTION_META_TITLE"]);
$APPLICATION->SetPageProperty("title", $arResult['IPROPERTY_VALUES']["SECTION_META_TITLE"]);
$APPLICATION->SetPageProperty("keywords", $arResult['IPROPERTY_VALUES']["SECTION_META_KEYWORDS"]);
$APPLICATION->SetPageProperty("description", $arResult['IPROPERTY_VALUES']["SECTION_META_DESCRIPTION"]);
}
if(isset($arResult["CHAIN"]["NAME"]) && $arParams["SECTION_CODE"]){
$APPLICATION->AddChainItem($arResult["CHAIN"]["NAME"], $arResult["CHAIN"]["URL"]);
}
|
Поэтому любая критика в комментариях приветствуется...