You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
8.5 KiB
228 lines
8.5 KiB
<?
|
|
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
|
|
|
|
use Bitrix\Main\Loader;
|
|
use Sotbit\Seometa\Orm\SeometaUrlTable;
|
|
use Sotbit\Seometa\Orm\ChpuTagsTable;
|
|
use Bitrix\Main\Text\Encoding;
|
|
use Bitrix\Main\Context;
|
|
|
|
if(!Loader::includeModule('sotbit.seometa') || !Loader::includeModule('iblock'))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
global $sotbitFilterResult;
|
|
global $SeoMetaWorkingConditions;
|
|
|
|
if(!$arParams['CACHE_TIME'])
|
|
{
|
|
$arParams['CACHE_TIME'] = '36000000';
|
|
}
|
|
|
|
$currentPage = $APPLICATION->getCurPage();
|
|
|
|
if($arParams['EXCLUDE_PROPERTY_LIST']) {
|
|
$arParams['EXCLUDE_PROPERTY_LIST'] = array_merge($arParams['EXCLUDE_PROPERTY_LIST'],
|
|
[$arParams['BRANDS_LIST']]);
|
|
} else {
|
|
$arParams['EXCLUDE_PROPERTY_LIST'] = [];
|
|
}
|
|
|
|
$cacheTime = $arParams['CACHE_TIME'];
|
|
$cache_id = serialize(array($arParams, $currentPage, ($arParams['CACHE_GROUPS'] === 'N' ? false : $USER->GetGroups())));
|
|
$cacheDir = '/sotbit.seometa.bottom-menu/';
|
|
$cache = \Bitrix\Main\Application::getInstance()->getManagedCache();
|
|
$arrProperties = array();
|
|
|
|
if($cache->read($cacheTime, $cache_id, $cacheDir))
|
|
{
|
|
$items = $cache->get($cache_id);
|
|
}
|
|
else
|
|
{
|
|
if($arParams['KOMBOX_FILTER'] == 'Y' && CModule::IncludeModule('kombox.filter'))
|
|
{
|
|
$str = CKomboxFilter::GetCurPageParam();
|
|
$str = explode("?", $str);
|
|
$str = $str[0];
|
|
}
|
|
else
|
|
{
|
|
$str = $APPLICATION->GetCurPage();
|
|
}
|
|
|
|
$str = CSeoMeta::encodeRealUrl($str);
|
|
$metaData = SeometaUrlTable::getByRealUrl($str, SITE_ID);
|
|
|
|
if (!$metaData) {
|
|
$requestGet = Context::getCurrent()->getRequest()->getQueryList()->toArray();
|
|
$pageParams = array_keys($requestGet);
|
|
$str = $APPLICATION->GetCurPageParam(
|
|
'',
|
|
$pageParams
|
|
);
|
|
$str = CSeoMeta::encodeRealUrl($str);
|
|
$metaData = SeometaUrlTable::getByRealUrl($str, SITE_ID);
|
|
}
|
|
|
|
if(!$metaData) {
|
|
$metaData = SeometaUrlTable::getByNewUrl($str, SITE_ID);
|
|
}
|
|
|
|
if($metaData['ID']) {
|
|
$arrProperties = ChpuTagsTable::getByChpuID($metaData['ID']);
|
|
|
|
if($arrProperties['TAG_OVERRIDE_TYPE'] == 'Y') {
|
|
$arrIDs = array_diff($arrProperties['TAG_DATA'], $arParams['EXCLUDE_PROPERTY_LIST']);
|
|
|
|
$conditionId = $metaData['CONDITION_ID'];
|
|
$sectionId = $metaData['section_id'];
|
|
|
|
$smartFilter = new \Sotbit\Seometa\Filter\SmartFilter($conditionId);
|
|
$rule = new Sotbit\Seometa\Condition\Rule();
|
|
$condition = $rule->parse($smartFilter->getCondition());
|
|
|
|
$generator = Sotbit\Seometa\Generator\GeneratorFactory::create($smartFilter->getCondition()->FILTER_TYPE);
|
|
|
|
$catalogUrl = new Sotbit\Seometa\Url\CatalogUrl($smartFilter->getCondition());
|
|
// $catalogUrl->cleanTemplate(true);
|
|
$catalogUrl->setSectionPlaceholdersIfNeed($sectionId);
|
|
|
|
$propertySet = new Sotbit\Seometa\Property\PropertySet();
|
|
$propertySetEntity = new Sotbit\Seometa\Property\PropertySetEntity($condition->getData()[0]->getData()[0]->getData());
|
|
$propertySet->add($propertySetEntity);
|
|
|
|
$catalogUrl->replaceFromSet($propertySet, $generator);
|
|
$catalogUrl->getMask();
|
|
|
|
foreach ($arrIDs as $key => $arrID) {
|
|
if($sotbitFilterResult['ITEMS'][$arrID]['VALUES']) {
|
|
foreach ($sotbitFilterResult['ITEMS'][$arrID]['VALUES'] as $value) {
|
|
if(!$link = SeometaUrlTable::getByRealUrl($value['section_filter_link'], SITE_ID)) {
|
|
$link = SeometaUrlTable::getByNewUrl($value['section_filter_link'], SITE_ID);
|
|
}
|
|
|
|
if($link) {
|
|
$item['NAME'] = $value['VALUE'];
|
|
$item['URL'] = $link['REAL_URL'];
|
|
$items['BOTTOM_MENU_PROPERTIES']['SECTION'][$key]['LINKS'][] = $item;
|
|
}
|
|
}
|
|
|
|
if($items['BOTTOM_MENU_PROPERTIES']['SECTION'][$key]['LINKS']) {
|
|
$items['BOTTOM_MENU_PROPERTIES']['SECTION'][$key]['NAME'] = $sotbitFilterResult['ITEMS'][$arrID]['NAME'];
|
|
}
|
|
}
|
|
}
|
|
} else if($arrProperties['TAG_OVERRIDE_TYPE'] == 'M' && $arrProperties['TAG_DATA']['SECTION']) {
|
|
$items['BOTTOM_MENU_PROPERTIES'] = $arrProperties['TAG_DATA'];
|
|
}
|
|
}
|
|
|
|
if($arrProperties['TAG_OVERRIDE_TYPE'] != 'Y' && $arrProperties['TAG_OVERRIDE_TYPE'] != 'M') {
|
|
$arLinksInSection = SeometaUrlTable::getList([
|
|
'filter' => [
|
|
'ACTIVE' => 'Y',
|
|
'section_id' => $sotbitFilterResult['SECTION_ID']
|
|
],
|
|
'select' => [
|
|
'NEW_URL',
|
|
'SITE_ID',
|
|
'iblock_id',
|
|
'PROPERTIES'
|
|
]
|
|
]);
|
|
|
|
|
|
$section = '';
|
|
while ($linkSection = $arLinksInSection->fetch()) {
|
|
$siteID = unserialize($linkSection['SITE_ID']);
|
|
if ($siteID && in_array(SITE_ID,
|
|
$siteID)) {
|
|
$properties = unserialize($linkSection['PROPERTIES']);
|
|
|
|
foreach ($properties as $key => $arrVal) {
|
|
foreach ($arrVal as $val) {
|
|
$arrChpuProps[$key][$val] = $linkSection['NEW_URL'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($arrChpuProps) {
|
|
foreach ($arrChpuProps as $propCODE => $prop) {
|
|
$iblockProperty = CIBlockProperty::GetList(
|
|
array(),
|
|
array(
|
|
'IBLOCK_ID' => $arParams['IBLOCK_ID'],
|
|
'CODE' => $propCODE
|
|
)
|
|
)->fetch();
|
|
|
|
if (!$iblockProperty['ID'] && Loader::includeModule('catalog')) {
|
|
$skuIblockId = CCatalog::GetList(
|
|
array(),
|
|
array(
|
|
'IBLOCK_ID' => $arParams['IBLOCK_ID'],
|
|
'CODE' => $propCODE
|
|
),
|
|
false,
|
|
false,
|
|
array('OFFERS_IBLOCK_ID')
|
|
)->fetch();
|
|
|
|
if ($skuIblockId) {
|
|
$iblockProperty = CIBlockProperty::GetList(
|
|
array(),
|
|
array(
|
|
'IBLOCK_ID' => $skuIblockId['OFFERS_IBLOCK_ID'],
|
|
'CODE' => $propCODE
|
|
)
|
|
)->fetch();
|
|
}
|
|
}
|
|
|
|
if (
|
|
$iblockProperty['ID'] &&
|
|
$sotbitFilterResult['ITEMS'][$iblockProperty['ID']] &&
|
|
!in_array($iblockProperty['ID'],
|
|
$arParams['EXCLUDE_PROPERTY_LIST'])
|
|
) {
|
|
foreach ($prop as $propKey => $pr) {
|
|
foreach ($sotbitFilterResult['ITEMS'][$iblockProperty['ID']]['VALUES'] as $VALUE) {
|
|
if ($VALUE['UPPER'] == mb_strtoupper($propKey)) {
|
|
$link['NAME'] = $propKey;
|
|
$link['URL'] = $pr;
|
|
|
|
$items['BOTTOM_MENU_PROPERTIES']['SECTION'][$propCODE]['LINKS'][] = $link;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (count($items['BOTTOM_MENU_PROPERTIES']['SECTION'][$propCODE]['LINKS']) > 0) {
|
|
$items['BOTTOM_MENU_PROPERTIES']['SECTION'][$propCODE]['NAME'] = $sotbitFilterResult['ITEMS'][$iblockProperty['ID']]['NAME'];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if($arParams['BRANDS_LIST'] && $sotbitFilterResult['ITEMS'][$arParams['BRANDS_LIST']]) {
|
|
$items['BRANDS_LIST'] = [];
|
|
foreach ($sotbitFilterResult['ITEMS'][$arParams['BRANDS_LIST']]['VALUES'] as $brandListItem) {
|
|
if($brandListItem['section_filter_link']) {
|
|
$brandItem['NAME'] = $brandListItem['VALUE'];
|
|
$brandItem['URL'] = $brandListItem['section_filter_link'];
|
|
$items['BRANDS_LIST'][] = $brandItem;
|
|
}
|
|
}
|
|
}
|
|
|
|
$cache->set($cache_id, $items);
|
|
}
|
|
|
|
$arResult = $items;
|
|
|
|
$this->IncludeComponentTemplate();
|
|
?>
|