config['lang']; switch($lang) { case "ru": $l = 'en'; break; case "en": $l = 'ru'; break; } $link = $modx->documentIdentifier == $modx->config['site_start'] ? '/' : '/'.$_GET['q']; $res = '' . $l . ''; break; /** * Отображение изображений прикрепленных к документу по его id * @var get = getImages * @var did = ID документа, если не передан - берётся ID текущего документа * @var tpl = чанк для отображения одной записи * @var isOrient = проверка на ориентацию изображения, для включения передать цифру 1 * * @return image = путь к изображению * @return alt = альт изображения * @return title = заголовок изображения * @return description = описание изображения * @return link = сыылка для баннера * @return rotate = как ориентировано изображение (1 - широкое, 2 - высокое, 3 - квадратное) */ case "getImages": $did = (isset($did) && (int)$did > 0) ? (int)$did : $modx->documentIdentifier; $i = 1; if (isset($pagin) && (int)$pagin > 0) { $lim = (isset($limit) && (int)$limit > 0) ? (int)$limit : 10; $start = (int)$_GET['p'] > 1 ? ((int)$_GET['p'] - 1) * $limit : 0; $limit = "LIMIT " . $start . "," . $limit . ""; } else { $limit = (isset($limit) && (int)$limit > 0) ? ' LIMIT ' . (int)$limit : ''; } $images = $modx->db->query(" SELECT SQL_CALC_FOUND_ROWS * FROM `modx_a_images` LEFT JOIN `modx_a_images_fields` ON image_id = image_image_id AND image_lang = '$lang' WHERE image_parent = $did ORDER BY image_position ASC $limit "); if (isset($pagin) && (int)$pagin > 0) { $pages = $modx->db->getRow($modx->db->query("SELECT FOUND_ROWS() AS 'cnt'")); $modx->setPlaceholder('maxitem', $pages['cnt']); $modx->setPlaceholder('limitem', $lim); } while ($image = $modx->db->getRow($images)) { $image['i'] = $i; $image['image'] = "/assets/images/collections/" . $image['image_parent'] . "/" . $image['image_file']; $image['title'] = str_replace(["<", ">", """], ["<", ">", '"'], $image['image_title']); $image['description'] = str_replace(["<", ">", """], ["<", ">", '"'], $image['image_description']); if ((int)$image['image_link'] > 0) { $image['link'] = $modx->makeUrl($image['image_link']); } else { $image['link'] = ''; } if (isset($isOrient) && (int)$isOrient > 0) { $imageinfo = getimagesize(MODX_BASE_PATH . $image['image']); // широкая if (round($imageinfo[1] / $imageinfo[0]) < 1) { $image['rotate'] = 1; // высокая } elseif (round($imageinfo[1] / $imageinfo[0]) > 1) { $image['rotate'] = 2; // квадратная } else { $image['rotate'] = 3; } } if (!empty($image['image_alt'])) { $image['alt'] = $image['image_alt']; } elseif (!empty($image['image_title'])) { $image['alt'] = $image['image_title']; } else { $image['alt'] = $image['image_file']; } $res .= $modx->parseChunk($tpl, $image); $i++; } $modx->setPlaceholder('getImagesCount', $i - 1); break; /** * Формирование меню * @var get = getMenu * @var did = ID документа, если не передан - берётся ID текущего документа * @var tpl = чанк для отображения не активного пункта меню * @var tplActive = чанк для отображения активного пункта меню * @var tplSub = чанк для отображения не активного пункта меню, содержащего подменю * @var dept = глубина вложенности меню * @var order = поле и направление сортировки результатов выборки * @var exclude = исключить из запроса документы с указанными ID (передать список через запятую) * @var subExclude = не выводить дочернее меню для документов с указанными ID (передать список через запятую) * * @return alias = алиас пункта меню * @return menutitle = заголовок пункта меню * @return link = ссылка для пункта меню * @return isfolder = имеет подменю * @return submenu = список пунктов подменю */ case "getMenu": $arrMenu = []; $dept = (int)$dept > 0 ? $dept : 1; $did = is_numeric($did) ? (int)$did : $modx->documentIdentifier; $ids = array_values($modx->getChildIds($did, $dept)); $ids = implode(',', $ids); if ($ids) { $i = 1; if (isset($exclude) && $exclude != '') { $ex = explode(',', $exclude); $excl = ' AND id <> ' . implode(' AND id <> ', $ex); } else { $excl = ''; } if (isset($subExclude) && $subExclude != '') { $subExclude = explode(',', $subExclude); } else { $subExclude = []; } $order = (isset($order) && $order != '') ? $order : 'c.menuindex ASC'; $query = $modx->db->makeArray($modx->db->query(" SELECT c.id, c.alias, c.isfolder, c.parent, c.pagetitle_$lang AS 'pagetitle', c.menutitle_$lang AS 'menutitle', (SELECT COUNT(id) FROM `modx_site_content` WHERE published = 1 AND deleted = 0 AND hidemenu = 0 AND parent = " . (int)$parent . " $excl) AS 'count', (SELECT redirect_target FROM `modx_a_redirect` WHERE redirect_code = 301 AND redirect_source = CONCAT(c.alias, '/')) AS 'redirect' FROM `modx_site_content` c WHERE c.published = 1 AND c.deleted = 0 AND c.hidemenu = 0 AND c.id IN ({$ids}) {$excl} ORDER BY {$order} ")); if (is_array($query)) { foreach ($query as $value) { if ($value['parent'] == $did) { $arrMenu[] = $value; } } foreach ($arrMenu as $key => $value) { foreach ($query as $v) { if ($v['parent'] == $value['id'] && !in_array($value['id'], $subExclude)) { $arrMenu[$key]['submenu'][] = $v; } } } } foreach ($arrMenu as $menu) { $menu['i'] = $i; $menu['link'] = $modx->makeUrl($menu['id']); $menu['menutitle'] = $menu['menutitle'] != '' ? $menu['menutitle'] : $menu['pagetitle']; if ($menu['id'] == $modx->documentIdentifier || $menu['redirect'] == $menu['alias'] . '/' . $modx->documentObject['alias'] . '/') { $subres = ''; if (is_array($menu['submenu'])) { foreach ($menu['submenu'] as $submenu) { $submenu['link'] = $modx->makeUrl($submenu['id']); $submenu['menutitle'] = $submenu['menutitle'] != '' ? $submenu['menutitle'] : $submenu['pagetitle']; $subres .= $modx->parseChunk($tplSub, $submenu); } $menu['submenu'] = $subres; } $res .= $modx->parseChunk($tplActive, $menu); } elseif (isset($menu['submenu']) && is_array($menu['submenu'])) { $subres = ''; foreach ($menu['submenu'] as $submenu) { $submenu['link'] = $modx->makeUrl($submenu['id']); $submenu['menutitle'] = $submenu['menutitle'] != '' ? $submenu['menutitle'] : $submenu['pagetitle']; if ($submenu['id'] == $modx->documentIdentifier) { $subres .= $modx->parseChunk($tplActive, $submenu); } else { $subres .= $modx->parseChunk($tplSub, $submenu); } } $menu['submenu'] = $subres; $res .= $modx->parseChunk($tpl, $menu); } else { $res .= $modx->parseChunk($tpl, $menu); } $i++; } } break; /** * Формирование категорий вопросов * @var get = getFaqsCategories * @var did = ID документа, если не передан - берётся ID текущего документа * @var tpl = чанк для отображения не активной категории * @var tplActive = чанк для отображения активной категории * @var tplSub = чанк для отображения не активной категории, содержащей подкатегорию * @var dept = глубина вложенности категорий * @var order = поле и направление сортировки результатов выборки * @var exclude = исключить из запроса документы с указанными ID (передать список через запятую) * @var subExclude = не выводить дочернее меню для документов с указанными ID (передать список через запятую) * * @return alias = алиас пункта меню * @return menutitle = заголовок пункта меню * @return link = ссылка для пункта меню * @return isfolder = имеет подменю * @return submenu = список пунктов подменю */ case "getFaqsCategories": $arrMenu = []; $dept = (int)$dept > 0 ? $dept : 1; $did = is_numeric($did) ? (int)$did : $modx->documentIdentifier; $ids = array_values($modx->getChildIds($did, $dept)); $ids = implode(',', $ids); if ($ids) { $i = 1; if (isset($exclude) && $exclude != '') { $ex = explode(',', $exclude); $excl = ' AND id <> ' . implode(' AND id <> ', $ex); } else { $excl = ''; } if (isset($subExclude) && $subExclude != '') { $subExclude = explode(',', $subExclude); } else { $subExclude = []; } $order = (isset($order) && $order != '') ? $order : 'c.menuindex ASC'; $query = $modx->db->makeArray($modx->db->query(" SELECT c.id, c.alias, c.isfolder, c.parent, c.pagetitle_$lang AS 'pagetitle', c.menutitle_$lang AS 'menutitle', (SELECT COUNT(id) FROM `modx_site_content` WHERE published = 1 AND deleted = 0 AND hidemenu = 0 AND parent = " . (int)$parent . " $excl) AS 'count', (SELECT COUNT(faq_id) FROM `modx_a_faqs` WHERE faq_active = 1 AND faq_category = c.id GROUP BY faq_category) AS 'num_faq_at_cat', (SELECT redirect_target FROM `modx_a_redirect` WHERE redirect_code = 301 AND redirect_source = CONCAT(c.alias, '/')) AS 'redirect' FROM `modx_site_content` c WHERE c.published = 1 AND c.deleted = 0 AND c.hidemenu = 0 AND c.id IN ({$ids}) ORDER BY {$order} ")); //Получаем вопросы из указанной категории и подсчитываем их количество if (is_array($query)) { foreach ($query as $value) { if ($value['parent'] == $did) { $arrMenu[] = $value; } } foreach ($arrMenu as $key => $value) { foreach ($query as $v) { if ($v['parent'] == $value['id'] && !in_array($value['id'], $subExclude)) { $arrMenu[$key]['submenu'][] = $v; } } } } foreach ($arrMenu as $menu) { $menu['i'] = $i; $menu['link'] = $modx->makeUrl($menu['id']); $menu['menutitle'] = $menu['menutitle'] != '' ? $menu['menutitle'] : $menu['pagetitle']; if ($menu['id'] == $modx->documentIdentifier || $menu['redirect'] == $menu['alias'] . '/' . $modx->documentObject['alias'] . '/') { $subres = ''; if (is_array($menu['submenu'])) { foreach ($menu['submenu'] as $submenu) { $submenu['link'] = $modx->makeUrl($submenu['id']); $submenu['menutitle'] = $submenu['menutitle'] != '' ? $submenu['menutitle'] : $submenu['pagetitle']; $subres .= $modx->parseChunk($tplSub, $submenu); } $menu['submenu'] = $subres; } $res .= $modx->parseChunk($tplActive, $menu); } elseif (isset($menu['submenu']) && is_array($menu['submenu'])) { $subres = ''; foreach ($menu['submenu'] as $submenu) { $submenu['link'] = $modx->makeUrl($submenu['id']); $submenu['menutitle'] = $submenu['menutitle'] != '' ? $submenu['menutitle'] : $submenu['pagetitle']; if ($submenu['id'] == $modx->documentIdentifier) { $subres .= $modx->parseChunk($tplActive, $submenu); } else { $subres .= $modx->parseChunk($tplSub, $submenu); } } $menu['submenu'] = $subres; $res .= $modx->parseChunk($tpl, $menu); } else { $res .= $modx->parseChunk($tpl, $menu); } $i++; } } break; /** * Получить дочерние записи контента * @var get = getContents (Обязательный) * @var tpl = чанк для формирования единици контента (Обязательный) * @var did = ID документа (Если не передан - берётся ID текущего документа) * @var limit = ограничить количество ресурсов в выборке * @var order = поле и направление сортировки результатов выборки (по умолчанию menuindex в прямом порядке) * @var pagin = включение постраничной навигации, для включения передать цифру 1 * @var tplImg = чанк для отображения коллекции изображений * @var exclude = ID документов, которые не нужно показывать * @var include = ID документов, которые нужно показывать */ case "getContents": $did = is_numeric($did) ? (int)$did : $modx->documentIdentifier; $order = (isset($order) && $order != '') ? $modx->db->escape($order) : 'menuindex ASC'; $i = 1; $time_delay = 0; if (isset($pagin) && (int)$pagin > 0) { $lim = (isset($limit) && (int)$limit > 0) ? (int)$limit : 10; $start = (int)$_GET['p'] > 1 ? ((int)$_GET['p'] - 1) * $limit : 0; $limit = "LIMIT " . $start . "," . $limit . ""; } else { $limit = (isset($limit) && (int)$limit > 0) ? ' LIMIT ' . (int)$limit : ''; } $excl = (isset($exclude) && $exclude != '') ? ' AND c.id NOT IN (' . $modx->db->escape($exclude) . ') ' : ''; $incl = (isset($include) && $include != '') ? ' AND c.id IN (' . $modx->db->escape($include) . ') ' : ''; $content = $modx->db->query(" SELECT SQL_CALC_FOUND_ROWS c.id, c.alias, c.pub_date, c.pagetitle_$lang AS 'pagetitle', c.menutitle_$lang AS 'menutitle', c.longtitle_$lang AS 'longtitle', c.description_$lang AS 'description', c.introtext_$lang AS 'introtext', c.content_$lang AS 'content', (SELECT GROUP_CONCAT(image_file ORDER BY image_position ASC SEPARATOR '|') FROM `modx_a_images` WHERE image_parent = c.id) AS 'images', (SELECT value FROM `modx_site_tmplvar_contentvalues` WHERE contentid = c.id AND tmplvarid = (SELECT id FROM `modx_site_tmplvars` WHERE name = 'tv_img') LIMIT 1) AS 'tv_img', (SELECT value FROM `modx_site_tmplvar_contentvalues` WHERE contentid = c.id AND tmplvarid = (SELECT id FROM `modx_site_tmplvars` WHERE name = 'tv_img_blackListChildren') LIMIT 1) AS 'tv_img_blackListChildren', (SELECT value FROM `modx_site_tmplvar_contentvalues` WHERE contentid = c.id AND tmplvarid = (SELECT id FROM `modx_site_tmplvars` WHERE name = 'tv_img_gallerySection') LIMIT 1) AS 'tv_img_gallerySection', IFNULL( (SELECT value FROM `modx_site_tmplvar_contentvalues` WHERE contentid = c.id AND tmplvarid = (SELECT id FROM `modx_site_tmplvars` WHERE name = 'tv_img_alt_$lang') LIMIT 1), (SELECT default_text FROM `modx_site_tmplvars` WHERE name = 'tv_img_alt_$lang' LIMIT 1) ) AS 'tv_img_alt', IFNULL( (SELECT value FROM `modx_site_tmplvar_contentvalues` WHERE contentid = c.id AND tmplvarid = (SELECT id FROM `modx_site_tmplvars` WHERE name = 'tv_img_blackListChildren_alt_$lang') LIMIT 1), (SELECT default_text FROM `modx_site_tmplvars` WHERE name = 'tv_img_blackListChildren_alt_$lang' LIMIT 1) ) AS 'tv_img_blackListChildren_alt' FROM `modx_site_content` c WHERE c.parent = " . (int)$did . " AND c.published = 1 AND c.deleted = 0 AND c.hidemenu = 0 {$excl} {$incl} ORDER BY c.$order $limit "); if (isset($pagin) && (int)$pagin > 0) { $pages = $modx->db->getRow($modx->db->query("SELECT FOUND_ROWS() AS 'cnt'")); $modx->setPlaceholder('maxitem', $pages['cnt']); $modx->setPlaceholder('limitem', $lim); } while ($cont = $modx->db->getRow($content)) { if (isset($cont['images']) && !empty($cont['images'])) { $images = explode("|", $cont['images']); $cont['image'] = ""; $j = 1; foreach ($images as $img) { $img = is_file(MODX_BASE_PATH . "/assets/images/collections/" . $cont['id'] . "/" . $img) ? "/assets/images/collections/" . $cont['id'] . "/" . $img : 'assets/snippets/phpthumb/noimage.png'; $cont['image'] .= $modx->parseChunk($tplImg, ["img" => $img, "alt" => $cont['pagetitle'] . ' ' . $j]); } } $cont['total_records'] = $content->num_rows; $cont['i'] = $i; $cont['time_delay'] = $time_delay; $cont['menutitle'] = $cont['menutitle'] != '' ? $cont['menutitle'] : $cont['pagetitle']; $res .= $modx->parseChunk($tpl, $cont); $i++; $time_delay += 200; } break; /** * Получить дочерние записи контента и установить плейсхолдеры (Блок инфографики на главной) * @var get = getContents (Обязательный) * @var tplSteps = чанк дляформирования списка шагов (навигация)(Обязательный) * @var tplSlides = чанк для формирования слайдера(Обязательный) * @var tplStepListLeft = чанк дляформирования списка шагов левая часть (контент)(Обязательный) * @var tplStepListRight = чанк дляформирования списка шагов правая часть (контент)(Обязательный) * @var limit = ограничить количество ресурсов в выборке */ case "getContentsStagesEmployements": $stepsnavigation = ''; $slides = ''; $stepListLeft = ''; $stepListRight = ''; $did = is_numeric($did) ? (int)$did : $modx->documentIdentifier; $order = (isset($order) && $order != '') ? $modx->db->escape($order) : 'menuindex ASC'; $i = 1; if (isset($limit) && (int)$limit > 0) { $limit = (isset($limit) && (int)$limit > 0) ? ' LIMIT ' . (int)$limit : ''; } $content = $modx->db->query(" SELECT SQL_CALC_FOUND_ROWS c.id, c.alias, c.pub_date, c.pagetitle_$lang AS 'pagetitle', c.menutitle_$lang AS 'menutitle', c.longtitle_$lang AS 'longtitle', c.description_$lang AS 'description', c.introtext_$lang AS 'introtext', c.content_$lang AS 'content', (SELECT GROUP_CONCAT(image_file ORDER BY image_position ASC SEPARATOR '|') FROM `modx_a_images` WHERE image_parent = c.id) AS 'images', (SELECT value FROM `modx_site_tmplvar_contentvalues` WHERE contentid = c.id AND tmplvarid = (SELECT id FROM `modx_site_tmplvars` WHERE name = 'tv_svg_infographic') LIMIT 1) AS 'tv_svg_infographic' FROM `modx_site_content` c WHERE c.parent = " . (int)$did . " AND c.published = 1 AND c.deleted = 0 AND c.hidemenu = 0 $limit "); while ($cont = $modx->db->getRow($content)) { $cont['i'] = $i; $stepsnavigation .= $modx->parseChunk($tplSteps, $cont); $slides .= $modx->parseChunk($tplSlides, $cont); $stepListLeft .= $modx->parseChunk($tplStepListLeft, $cont); $stepListRight .= $modx->parseChunk($tplStepListRight, $cont); $i++; } $modx->setPlaceholder('stepsNavigation', $stepsnavigation); $modx->setPlaceholder('slides', $slides); $modx->setPlaceholder('steplistleft', $stepListLeft); $modx->setPlaceholder('steplistright', $stepListRight); break; /** * Получить дочерние записи контента и установить плейсхолдеры (Слайдер с доп. изображением) * @var get = getContents (Обязательный) * @var tplSlider = чанк дляформирования единицы контента слайдера(Обязательный) * @var tplImages = чанк для формирования единицы изображения(Обязательный) * @var limit = ограничить количество ресурсов в выборке */ case "getContentsOpportunities": $slides = ''; $additionalImages = ''; $did = is_numeric($did) ? (int)$did : $modx->documentIdentifier; $order = (isset($order) && $order != '') ? $modx->db->escape($order) : 'menuindex ASC'; $i = 1; if (isset($limit) && (int)$limit > 0) { $limit = (isset($limit) && (int)$limit > 0) ? ' LIMIT ' . (int)$limit : ''; } $content = $modx->db->query(" SELECT SQL_CALC_FOUND_ROWS c.id, c.alias, c.pub_date, c.pagetitle_$lang AS 'pagetitle', c.menutitle_$lang AS 'menutitle', c.longtitle_$lang AS 'longtitle', c.description_$lang AS 'description', c.introtext_$lang AS 'introtext', c.content_$lang AS 'content', (SELECT GROUP_CONCAT(image_file ORDER BY image_position ASC SEPARATOR '|') FROM `modx_a_images` WHERE image_parent = c.id) AS 'images', (SELECT value FROM `modx_site_tmplvar_contentvalues` WHERE contentid = c.id AND tmplvarid = (SELECT id FROM `modx_site_tmplvars` WHERE name = 'tv_img') LIMIT 1) AS 'tv_img' FROM `modx_site_content` c WHERE c.parent = " . (int)$did . " AND c.published = 1 AND c.deleted = 0 AND c.hidemenu = 0 $limit "); while ($cont = $modx->db->getRow($content)) { if (isset($cont['images']) && !empty($cont['images'])) { $images = explode("|", $cont['images']); $cont['image'] = ""; $j = 1; $img = is_file(MODX_BASE_PATH . "/assets/images/collections/" . $cont['id'] . "/" . $images[0]) ? "/assets/images/collections/" . $cont['id'] . "/" . $images[0] : 'assets/snippets/phpthumb/noimage.png'; $cont['image'] = $img; } $cont['i'] = $i; $slides .= $modx->parseChunk($tplSlider, $cont); $additionalImages .= $modx->parseChunk($tplImages, $cont); $i++; } $modx->setPlaceholder('slidesOpportunities', $slides); $modx->setPlaceholder('images', $additionalImages); break; /** * Получить одну запись контента * @var get = getContent (Обязательный) * @var did = ID документа (Обязательный) * @var tpl = чанк для формирования единици контента - обязательный параметр */ case "getContent": if ((int)$did) { $content = $modx->db->query(" SELECT c.id, c.alias, c.pub_date, c.pagetitle_$lang AS 'pagetitle', c.menutitle_$lang AS 'menutitle', c.longtitle_$lang AS 'longtitle', c.description_$lang AS 'description', c.introtext_$lang AS 'introtext', c.content_$lang AS 'content', (SELECT value FROM `modx_site_tmplvar_contentvalues` WHERE contentid = c.id AND tmplvarid = (SELECT id FROM `modx_site_tmplvars` WHERE name = 'tv_img') LIMIT 1) AS 'tv_img', IFNULL( (SELECT value FROM `modx_site_tmplvar_contentvalues` WHERE contentid = c.id AND tmplvarid = (SELECT id FROM `modx_site_tmplvars` WHERE name = 'tv_img_alt_$lang') LIMIT 1), (SELECT default_text FROM `modx_site_tmplvars` WHERE name = 'tv_img_alt_$lang' LIMIT 1) ) AS 'tv_img_alt' FROM `modx_site_content` c WHERE c.id = " . (int)$did . " AND c.published = 1 AND c.deleted = 0 "); $cont = $modx->db->getRow($content); $res .= $modx->parseChunk($tpl, $cont); } break; /** * Получить список изображений товара для слайдера * @var get = getProductImages * @var pid = ID товара * @var tpl = чанк для формирования единици контента * @var type_slider = тип слайдера (slide - для "галереи клуба", slide_home - для "места проживания"") */ case "getProductImages": $pid = is_numeric($pid) ? (int)$pid : $modx->documentObject['product_id']; $i = 1; $t_slider = $modx->db->escape($type_slider); if (isset($type_slider) && !empty($type_slider)) { $type_slider = "AND image_use = " . "'" . $modx->db->escape($type_slider) . "'"; } else { $type_slider = ""; } $images = $modx->db->makeArray($modx->db->query(" SELECT * FROM `modx_a_product_images` LEFT JOIN `modx_a_product_image_fields` ON image_id = image_image_id AND image_lang = '$lang' WHERE image_product_id = {$pid} {$type_slider} ORDER BY image_position ASC, image_use ASC ")); if (is_array($images) && count($images) > 0) { $imgs_present = 1; foreach ($images as $image) { $image['i'] = $i; if ($t_slider == 'slider_home') { $image['image'] = "/assets/images/products/" . $image['image_product_id'] . "_home/" . $image['image_file']; } else { $image['image'] = "/assets/images/products/" . $image['image_product_id'] . "/" . $image['image_file']; } $image['title'] = $image['image_title']; $image['description'] = $image['image_description']; if (!empty($image['image_alt'])) { $image['alt'] = $image['image_alt']; } elseif (!empty($image['image_title'])) { $image['alt'] = $image['image_title']; } else { $image['alt'] = $image['image_file']; } $slider .= $modx->parseChunk($tpl, $image); $i++; } } else { $imgs_present = 0; } $modx->setPlaceholder('slider', $slider); $modx->setPlaceholder('imgs_present', $imgs_present); break; /** * Получить список товаров по их ID * @var get = getProductsSelect * @var ids = список ID товаров * @var tab = признак таба * @var tpl = чанк для формирования единицы контента * @var tplCharac = чанк для формирования характеристик товара */ case "getProductsSelect": $i = 0; $ids = str_replace(".", ",", $ids); $ids = explode(",", $ids); $ids = array_filter($ids, function ($element) { return !empty($element) && (int)$element > 0; }); if (count($ids) > 0) { $ids = implode(",", $ids); $content = $modx->db->makeArray($modx->db->query(" SELECT p.product_id, p.product_price AS 'price', p.product_price_old AS 'price_old', p.product_url AS 'alias', p.product_status, p.product_discont, p.product_video_link, p.product_availability, ps.product_name, (SELECT COUNT(review_id) FROM `modx_a_reviews` WHERE review_product = p.product_id) AS 'product_review_count', (SELECT image_file FROM `modx_a_product_images` WHERE image_product_id = p.product_id AND image_use = 'cover' LIMIT 1) AS 'cover', (SELECT image_file FROM `modx_a_product_images` WHERE image_product_id = p.product_id AND image_use = 'second' LIMIT 1) AS 'second', (SELECT CONCAT('[', GROUP_CONCAT( '{\"filter_name\":\"',COALESCE(filter_name,''),'\", \"filter_type\":\"',COALESCE(filter_type,''),'\", \"filter_value\":\"',COALESCE(filter_value_{$lang},''),'\", \"filter_value_num\":\"',COALESCE(filter_value_num,''),'\"}'), ']' ) FROM `modx_a_product_filter_values` pfv LEFT JOIN `modx_a_filters` f ON pfv.filter_id = f.filter_id LEFT JOIN `modx_a_filter_strings` fs ON pfv.filter_id = fs.filter_id AND string_locate = '{$lang}' LEFT JOIN `modx_a_filter_values` vs ON pfv.value_id = vs.value_id AND string_locate = '{$lang}' WHERE f.filter_feature = 0 AND pfv.product_id = p.product_id) AS 'characteristics' FROM `modx_a_products` p LEFT JOIN `modx_a_product_strings` ps ON ps.product_id = p.product_id AND ps.string_locate = '$lang' WHERE p.product_id IN (" . $ids . ") AND p.product_active = 1 ")); if (count($content) > 0) { foreach ($content as $cont) { if ($_SESSION['currency'] == 'usd') { $cont['sing'] = ""; $cont['sing_usd'] = $_SESSION["sign"]; } else { $cont['sing'] = $_SESSION["sign"]; $cont['sing_usd'] = ""; } if ($characteristics = $shop->is_json($cont['characteristics'])) { if (is_array($characteristics)) { foreach ($characteristics as $characteristic) { $cont['characteristic'] .= $modx->parseChunk($tplCharac, $characteristic); } } } $cont['i'] = $i++; $cont['link'] = $modx->makeUrl($modx->config['shop_page_item']) . $cont['alias'] . '/'; $cont['cover'] = !empty($cont['cover']) ? '/assets/images/products/' . $cont['product_id'] . '/' . $cont['cover'] : 'assets/snippets/phpthumb/noimage.png'; $cont['second'] = !empty($cont['second']) ? '/assets/images/products/' . $cont['product_id'] . '/' . $cont['second'] : 'assets/snippets/phpthumb/noimage.png'; $cont['price'] = $shop->getPrice($cont['price'], $_SESSION['currency']); $cont['price_old'] = $shop->getPrice($cont['price_old'], $_SESSION['currency']); $cont['cart_count'] = count($_SESSION['cart']); $res .= $modx->parseChunk($tpl, $cont); } $modx->setPlaceholder('productCount' . $tab, count($content)); } else { $modx->setPlaceholder('productCount' . $tab, 0); } } else { $modx->setPlaceholder('productCount' . $tab, 0); } break; /** * Получить товар по ID * @var get = getProductSingle * @var id = ID товара * @var tpl = чанк для формирования единицы контента * @var tplCharac = чанк для формирования характеристик товара */ case "getProductSingle": $i = 0; if (isset($id) && (int)$id > 0) { $id = (int)$id; } else { $id = (int)$modx->documentObject['product_id']; } $modx->db->query(" SET SESSION group_concat_max_len = 100000;"); $content = $modx->db->getRow($modx->db->query(" SELECT p.product_id, p.product_price AS 'price', p.product_price_old AS 'price_old', p.product_url AS 'alias', p.product_status, p.product_discont, p.product_video_link, p.product_availability, ps.product_name, (SELECT COUNT(review_id) FROM `modx_a_reviews` WHERE review_product = p.product_id) AS 'product_review_count', (SELECT image_file FROM `modx_a_product_images` WHERE image_product_id = p.product_id AND image_use = 'cover' LIMIT 1) AS 'cover', (SELECT image_file FROM `modx_a_product_images` WHERE image_product_id = p.product_id AND image_use = 'second' LIMIT 1) AS 'second', ( SELECT CONCAT('[', GROUP_CONCAT( '{\"filter_id\":\"',COALESCE(f.filter_id,''),'\", \"filter_name\":\"',COALESCE(filter_name,''),'\", \"filter_type\":\"',COALESCE(filter_type,''),'\", \"filter_value\":\"',COALESCE(filter_value_{$lang},''),'\", \"filter_value_num\":\"',COALESCE(filter_value_num,''),'\", \"filter_icon\":\"',COALESCE(filter_icon,''),'\"}' ORDER BY f.filter_sort ASC ), ']' ) FROM `modx_a_product_filter_values` pfv LEFT JOIN `modx_a_filters` f ON pfv.filter_id = f.filter_id LEFT JOIN `modx_a_filter_strings` fs ON pfv.filter_id = fs.filter_id AND string_locate = '{$lang}' LEFT JOIN `modx_a_filter_values` vs ON pfv.value_id = vs.value_id AND string_locate = '{$lang}' WHERE pfv.product_id = p.product_id ) AS 'characteristics' FROM `modx_a_products` p LEFT JOIN `modx_a_product_strings` ps ON ps.product_id = p.product_id AND ps.string_locate = '$lang' WHERE p.product_id = (" . $id . ") AND p.product_active = 1 ")); if ($characteristics = $shop->is_json($content['characteristics'])) { foreach ($characteristics as $characteristic) { if ((int)$characteristic['filter_id'] == 10) { $modx->setPlaceholder('city', $characteristic['filter_value']); } $characteristic['filter_value'] = htmlspecialchars_decode($characteristic['filter_value']); $content['characteristic'] .= $modx->parseChunk($tplCharac, $characteristic); } } $content['i'] = $i++; $content['link'] = $modx->makeUrl($modx->config['shop_page_item']) . $content['alias'] . '/'; $content['cover'] = !empty($content['cover']) ? '/assets/images/products/' . $content['product_id'] . '/' . $content['cover'] : 'assets/snippets/phpthumb/noimage.png'; $content['second'] = !empty($content['second']) ? '/assets/images/products/' . $content['product_id'] . '/' . $content['second'] : 'assets/snippets/phpthumb/noimage.png'; $content['price'] = $shop->getPrice($content['price'], $_SESSION['currency']); $content['price_old'] = $shop->getPrice($content['price_old'], $_SESSION['currency']); $res .= $modx->parseChunk($tpl, $content); $modx->setPlaceholder('second', $content['second']); break; /** * Получить список товаров категории * @var get = getCatalog (Обязательный) * @var tpl = чанк для формирования единицы контента (Обязательный) * @var tplCharac = чанк для формирования характеристик товара * @var tplEmpty = чанк, ели нет товаров * @var did = ID категории (Если не передан - берётся ID текущего документа) * @var where = условие для фильтрации * * @return product_name = название * @return cover = главное изображение * @return price = цена * @return sing_usd = отображение знака доллара * @return sing = отображение знака валюты, если не доллар */ case "getCatalog": $i = 1; $where = []; $sort = ""; $did = (int)$did ?: ((int)$modx->documentIdentifier > 1 ? $modx->documentIdentifier : $modx->config['shop_catalog_root']); $ids = array_values($modx->getChildIds($did)); array_push($ids, $did); $filter_ids = (isset($filter_ids) && $filter_ids != '') ? 'AND f.filter_id IN (' . $modx->db->escape($filter_ids) . ') ' : ''; if (isset($pagin) && (int)$pagin > 0) { $lim = (isset($limit) && (int)$limit > 0) ? (int)$limit : 10; $start = (int)$_GET['p'] > 1 ? ((int)$_GET['p'] - 1) * $limit : 0; $limit = "LIMIT " . $start . "," . $limit . ""; } else { $limit = (isset($limit) && (int)$limit > 0) ? ' LIMIT ' . (int)$limit : ''; } if (isset($_GET['sort']) && !empty($_GET['sort'])) { switch ($_GET['sort']) { case "price-up" : $sort = "ORDER BY p.product_price ASC"; break; case "price-down" : $sort = "ORDER BY p.product_price DESC"; break; case "in-stock" : $sort = "ORDER BY p.product_availability DESC"; break; case "first-action" : $sort = "ORDER BY CASE WHEN (p.product_status = 3 AND CAST(p.product_status AS SIGNED) = 3) THEN CAST(p.product_status AS SIGNED) ELSE -999999999 END DESC"; break; case "first-top" : $sort = "ORDER BY CASE WHEN (p.product_status = 4 AND CAST(p.product_status AS SIGNED) = 4) THEN CAST(p.product_status AS SIGNED) ELSE -999999999 END DESC"; break; case "first-hit" : $sort = "ORDER BY CASE WHEN (p.product_status = 5 AND CAST(p.product_status AS SIGNED) = 5) THEN CAST(p.product_status AS SIGNED) ELSE -999999999 END DESC"; break; case "first-new" : $sort = "ORDER BY CASE WHEN (p.product_status = 1 AND CAST(p.product_status AS SIGNED) = 1) THEN CAST(p.product_status AS SIGNED) ELSE -999999999 END DESC"; break; case "rating" : $sort = "ORDER BY p.product_rating DESC"; break; } } if ($filters = $modx->getPlaceholder("filters")) { $filters = explode(";", $filters); if (is_array($filters)) { foreach ($filters as $filter) { $filter = explode("=", $filter); if ($filter[0] == "price") { $range = explode("-", $filter[1]); $where[] = "p.product_price BETWEEN " . (int)$shop->getPriceToDefault($range[0], $_SESSION['currency']) . " AND " . (int)$shop->getPriceToDefault($range[1], $_SESSION['currency']); } else { $values = explode(",", $filter[1]); if (is_array($values)) { $whereValue = []; foreach ($values as $value) { $whereValue[] = "p.product_id IN ( SELECT product_id FROM `modx_a_product_filter_values` WHERE filter_id = ( SELECT filter_id FROM `modx_a_filters` WHERE filter_url = '" . $modx->db->escape($filter[0]) . "' ) AND value_id = ( SELECT value_id FROM `modx_a_filter_values` WHERE filter_url = '" . $modx->db->escape($value) . "' ) )"; } $where[] = "(" . implode(" OR ", $whereValue) . ")"; } } } } } if (count($where) > 0) { $where = "AND " . implode(" AND ", $where); } else { $where = ""; } if (count($ids) > 0) { $ids = implode(",", $ids); $modx->db->query(" SET SESSION group_concat_max_len = 100000;"); $query = $modx->db->query(" SELECT SQL_CALC_FOUND_ROWS *, (SELECT COUNT(review_id) FROM `modx_a_reviews` WHERE review_product = p.product_id) AS 'product_review_count', (SELECT image_file FROM `modx_a_product_images` WHERE image_product_id = p.product_id AND image_use = 'cover' LIMIT 1) AS 'cover', (SELECT image_file FROM `modx_a_product_images` WHERE image_product_id = p.product_id AND image_use = 'second' LIMIT 1) AS 'second', (SELECT CONCAT('[', GROUP_CONCAT( '{\"filter_name\":\"',COALESCE(filter_name,''),'\", \"filter_type\":\"',COALESCE(filter_type,''),'\", \"filter_icon\":\"',COALESCE(filter_icon,''),'\", \"filter_url\":\"',COALESCE(vs.filter_url,''),'\", \"filter_value\":\"',COALESCE(filter_value_{$lang},''),'\", \"filter_value_num\":\"',COALESCE(filter_value_num,''),'\", \"filter_id\":\"',COALESCE(f.filter_id,''),'\"}'), ']' ) FROM `modx_a_product_filter_values` pfv JOIN `modx_a_filters` f ON pfv.filter_id = f.filter_id {$filter_ids} LEFT JOIN `modx_a_filter_strings` fs ON pfv.filter_id = fs.filter_id AND string_locate = '{$lang}' LEFT JOIN `modx_a_filter_values` vs ON pfv.value_id = vs.value_id AND string_locate = '{$lang}' WHERE pfv.product_id = p.product_id) AS 'characteristics' FROM `modx_a_products` p LEFT JOIN `modx_a_product_strings` ps ON p.product_id = ps.product_id AND string_locate = '{$lang}' WHERE p.product_id IN (SELECT DISTINCT product_id FROM `modx_a_product_categories` WHERE modx_id IN ({$ids})) AND p.product_active = 1 {$where} {$sort} {$limit} "); if (isset($pagin) && (int)$pagin > 0) { $pages = $modx->db->getRow($modx->db->query("SELECT FOUND_ROWS() AS 'cnt'")); $modx->setPlaceholder('maxitem', $pages['cnt']); $modx->setPlaceholder('limitem', $lim); } $content = $modx->db->makeArray($query); if (count($content) > 0) { foreach ($content as $cont) { if ($_SESSION['currency'] == 'usd') { $cont['sing'] = ""; $cont['sing_usd'] = $_SESSION["sign"]; } else { $cont['sing'] = $_SESSION["sign"]; $cont['sing_usd'] = ""; } if ($characteristics = $shop->is_json($cont['characteristics'])) { if (is_array($characteristics)) { $childCharacteristics = $characteristics; foreach ($characteristics as $characteristic) { if ((int)$characteristic['filter_id'] === 6) { foreach ($childCharacteristics as $childCharacteristic) { if ((int)$childCharacteristic['filter_id'] === 10) { $city_country_string = $characteristic['filter_value'] . "/" . $childCharacteristic['filter_value']; } } } $characteristic['country_city'] = $city_country_string; $cont['characteristic'] .= $modx->parseChunk($tplCharac, $characteristic); } } } $cont['product_url'] = $modx->makeUrl($modx->config['shop_catalog_root']) . $cont['product_url'] . '/'; $cont['cover'] = !empty($cont['cover']) ? '/assets/images/products/' . $cont['product_id'] . '/' . $cont['cover'] : 'assets/snippets/phpthumb/noimage.png'; $cont['second'] = !empty($cont['second']) ? '/assets/images/products/' . $cont['product_id'] . '/' . $cont['second'] : 'assets/snippets/phpthumb/noimage.png'; $cont['price'] = $shop->getPrice($cont['product_price'], $_SESSION['currency']); $cont['price_old'] = $shop->getPrice($cont['product_price_old'], $_SESSION['currency']); $cont['cart_count'] = count($_SESSION['cart']); $res .= $modx->parseChunk($tpl, $cont); } } } $res = empty($res) ? $modx->getChunk($tplEmpty) : $res; break; /** * Получить список всех товаров (из корня магазина) * @var get = getCatalogRoot (Обязательный) * @var tpl = чанк для формирования единицы контента (Обязательный) * @var tplCharac = чанк для формирования характеристик товара * @var did = ID категории (Если не передан - берётся ID текущего документа) * @var slideAvail = условие для фильтрации * @var filter_ids = ID фильтров и характеристик которые нужно получить * * @return product_name = название * @return cover = главное изображение * @return price = цена * @return sing_usd = отображение знака доллара * @return sing = отображение знака валюты, если не доллар */ case "getCatalogRoot": $i = 1; $where = []; $sort = ""; $slideAvail = (isset($slideAvail) && (int)$slideAvail == 1) ? 'WHERE p.product_availability = 1' : ''; $did = (int)$did ?: ((int)$modx->documentIdentifier > 1 ? $modx->documentIdentifier : $modx->config['shop_catalog_root']); $ids = array_values($modx->getChildIds($did)); array_push($ids, $did); $filter_ids = (isset($filter_ids) && $filter_ids != '') ? 'AND f.filter_id IN (' . $modx->db->escape($filter_ids) . ') ' : ''; if (isset($pagin) && (int)$pagin > 0) { $lim = (isset($limit) && (int)$limit > 0) ? (int)$limit : 10; $start = (int)$_GET['p'] > 1 ? ((int)$_GET['p'] - 1) * $limit : 0; $limit = "LIMIT " . $start . "," . $limit . ""; } else { $limit = (isset($limit) && (int)$limit > 0) ? ' LIMIT ' . (int)$limit : ''; } if (isset($_GET['sort']) && !empty($_GET['sort'])) { switch ($_GET['sort']) { case "price-up" : $sort = "ORDER BY p.product_price ASC"; break; case "price-down" : $sort = "ORDER BY p.product_price DESC"; break; case "in-stock" : $sort = "ORDER BY p.product_availability DESC"; break; case "first-action" : $sort = "ORDER BY CASE WHEN (p.product_status = 3 AND CAST(p.product_status AS SIGNED) = 3) THEN CAST(p.product_status AS SIGNED) ELSE -999999999 END DESC"; break; case "first-top" : $sort = "ORDER BY CASE WHEN (p.product_status = 4 AND CAST(p.product_status AS SIGNED) = 4) THEN CAST(p.product_status AS SIGNED) ELSE -999999999 END DESC"; break; case "first-hit" : $sort = "ORDER BY CASE WHEN (p.product_status = 5 AND CAST(p.product_status AS SIGNED) = 5) THEN CAST(p.product_status AS SIGNED) ELSE -999999999 END DESC"; break; case "first-new" : $sort = "ORDER BY CASE WHEN (p.product_status = 1 AND CAST(p.product_status AS SIGNED) = 1) THEN CAST(p.product_status AS SIGNED) ELSE -999999999 END DESC"; break; case "rating" : $sort = "ORDER BY p.product_rating DESC"; break; } } if ($filters = $modx->getPlaceholder("filters")) { $filters = explode(";", $filters); if (is_array($filters)) { foreach ($filters as $filter) { $filter = explode("=", $filter); if ($filter[0] == "price") { $range = explode("-", $filter[1]); $where[] = "p.product_price BETWEEN " . (int)$shop->getPriceToDefault($range[0], $_SESSION['currency']) . " AND " . (int)$shop->getPriceToDefault($range[1], $_SESSION['currency']); } else { $values = explode(",", $filter[1]); if (is_array($values)) { $whereValue = []; foreach ($values as $value) { $whereValue[] = "p.product_id IN ( SELECT product_id FROM `modx_a_product_filter_values` WHERE filter_id = ( SELECT filter_id FROM `modx_a_filters` WHERE filter_url = '" . $modx->db->escape($filter[0]) . "' ) AND value_id = ( SELECT value_id FROM `modx_a_filter_values` WHERE filter_url = '" . $modx->db->escape($value) . "' ) )"; } $where[] = "(" . implode(" OR ", $whereValue) . ")"; } } } } } if (count($where) > 0) { $where = "AND " . implode(" AND ", $where); } else { $where = ""; } if (count($ids) > 0) { $ids = implode(",", $ids); $modx->db->query(" SET SESSION group_concat_max_len = 100000;"); $query = $modx->db->query(" SELECT SQL_CALC_FOUND_ROWS *, (SELECT COUNT(review_id) FROM `modx_a_reviews` WHERE review_product = p.product_id) AS 'product_review_count', (SELECT image_file FROM `modx_a_product_images` WHERE image_product_id = p.product_id AND image_use = 'cover' LIMIT 1) AS 'cover', (SELECT image_file FROM `modx_a_product_images` WHERE image_product_id = p.product_id AND image_use = 'second' LIMIT 1) AS 'second', (SELECT CONCAT('[', GROUP_CONCAT( '{\"filter_name\":\"',COALESCE(filter_name,''),'\", \"filter_type\":\"',COALESCE(filter_type,''),'\", \"filter_url\":\"',COALESCE(vs.filter_url,''),'\", \"filter_value\":\"',COALESCE(filter_value_{$lang},''),'\", \"filter_value_num\":\"',COALESCE(filter_value_num,''),'\", \"filter_id\":\"',COALESCE(f.filter_id,''),'\"}'), ']' ) FROM `modx_a_product_filter_values` pfv INNER JOIN `modx_a_filters` f ON pfv.filter_id = f.filter_id {$filter_ids} LEFT JOIN `modx_a_filter_strings` fs ON pfv.filter_id = fs.filter_id AND string_locate = '{$lang}' LEFT JOIN `modx_a_filter_values` vs ON pfv.value_id = vs.value_id AND string_locate = '{$lang}' WHERE pfv.product_id = p.product_id) AS 'characteristics' FROM `modx_a_products` p LEFT JOIN `modx_a_product_strings` ps ON p.product_id = ps.product_id AND string_locate = '{$lang}' {$slideAvail} {$where} "); if (isset($pagin) && (int)$pagin > 0) { $pages = $modx->db->getRow($modx->db->query("SELECT FOUND_ROWS() AS 'cnt'")); $modx->setPlaceholder('maxitem', $pages['cnt']); $modx->setPlaceholder('limitem', $lim); } $content = $modx->db->makeArray($query); if (count($content) > 0) { foreach ($content as $cont) { if ($_SESSION['currency'] == 'usd') { $cont['sing'] = ""; $cont['sing_usd'] = $_SESSION["sign"]; } else { $cont['sing'] = $_SESSION["sign"]; $cont['sing_usd'] = ""; } if ($characteristics = $shop->is_json($cont['characteristics'])) { if (is_array($characteristics)) { $childCharacteristics = $characteristics; foreach ($characteristics as $characteristic) { if ((int)$characteristic['filter_id'] === 6) { foreach ($childCharacteristics as $childCharacteristic) { if ((int)$childCharacteristic['filter_id'] === 10) { $city_country_string = $characteristic['filter_value'] . "/" . $childCharacteristic['filter_value']; } } } $characteristic['country_city'] = $city_country_string; $cont['characteristic'] .= $modx->parseChunk($tplCharac, $characteristic); } } } $cont['product_url'] = $modx->makeUrl($modx->config['shop_catalog_root']) . $cont['product_url'] . '/'; $cont['cover'] = !empty($cont['cover']) ? '/assets/images/products/' . $cont['product_id'] . '/' . $cont['cover'] : 'assets/snippets/phpthumb/noimage.png'; $cont['second'] = !empty($cont['second']) ? '/assets/images/products/' . $cont['product_id'] . '/' . $cont['second'] : 'assets/snippets/phpthumb/noimage.png'; $cont['price'] = $shop->getPrice($cont['product_price'], $_SESSION['currency']); $cont['price_old'] = $shop->getPrice($cont['product_price_old'], $_SESSION['currency']); $cont['cart_count'] = count($_SESSION['cart']); $res_tpl .= $modx->parseChunk($tpl, $cont); } $modx->setPlaceholder('res_tpl', $res_tpl); } } $res_empty = empty($res_tpl) ? $modx->getChunk($tplEmpty) : $res; $modx->setPlaceholder('res_empty', $res_empty); break; /** * проверка на наличие выбранных фильтров */ case "checkFilters": if ($modx->getPlaceholder('filters')) { $res = $modx->getChunk($tpl); } break; /** * */ case "showAdvantages": $filters = $modx->getPlaceholder('filters'); if($filters){ $values = $shop->checkAdvantagesForValues($filters); if($values){ $res = $modx->parseChunk($tpl, [ 'values' => implode(', ', array_column($values, 'value')) ]); } } break; /** * Получить фильтры категории * @var get = getFilters * @var did = ID категории * @var tpl = Чанк для формирования единицы контента * @var tplInner = Чанк для формирования внутренней записи * * @return filter_inner = Список значений фильтра * @return filter_name = Название фильтра * @return filter_value = Значение фильтра * @return value_url = Значение url фильтра * @return filter_active= Если фильтр уже отмечен */ case "getFilters": $i = 2; $query = $modx->db->makeArray($modx->db->query(" SELECT f.filter_id, f.filter_url, f.filter_sort, fv.filter_url AS 'value_url', fv.value_id, fv.filter_value_{$lang}, (SELECT filter_name FROM `modx_a_filter_strings` WHERE filter_id = f.filter_id AND string_locate = '{$lang}') AS 'filter_name' FROM `modx_a_filters` f LEFT JOIN `modx_a_filter_values` fv ON f.filter_id = fv.filter_id WHERE f.filter_feature = 1 ORDER BY f.filter_sort, value_url ")); $url_filter = array(); if ($urlFilters = $modx->getPlaceholder("filters")) { $urlFilters = explode(";", $urlFilters); if (is_array($urlFilters)) { foreach ($urlFilters as $urlFilter) { $urlFilter = explode("=", $urlFilter); if ($urlFilter[0] != "price") { $values = explode(",", $urlFilter[1]); if (is_array($values)) { foreach ($values as $value) { $urlFltr[$urlFilter[0]][] = $value; $url_filter[$modx->db->getValue('Select `filter_id` from modx_a_filters where `filter_url`="'.$urlFilter[0].'"')][] = $modx->db->getValue('Select `value_id` from modx_a_filter_values where `filter_url`="'.$value.'"'); } } } } } } $url_filter_ex = array(); $joins = array(); if (count($url_filter)) { foreach($url_filter as $key => $val) { $url_filter_ex[$key] = '(t'.$key.'.value_id in ('.implode(',',$val).') and t'.$key.'.filter_id='.$key.')'; $joins[] = 'left join modx_a_product_filter_values as t'.$key.' on t.product_id = t'.$key.'.product_id'; } } //$modx->logEvent(0, 3, '
'.print_r($url_filter_ex,1).'', 'filter'); $sqls = array(); if (is_array($query)) { foreach ($query as $q) { $filters[$q['filter_id']]['filter_name'] = $q['filter_name']; $filters[$q['filter_id']]['filter_values'][$q['value_id']]['filter_value'] = $q['filter_value_' . $lang]; $filters[$q['filter_id']]['filter_values'][$q['value_id']]['value_url'] = $q['value_url']; $filters[$q['filter_id']]['filter_values'][$q['value_id']]['filter_url'] = $q['filter_url']; $filters[$q['filter_id']]['filter_values'][$q['value_id']]['filter_active'] = 0; //$filters[$q['filter_id']]['filter_values'][$q['value_id']]['disabled'] = 'disabled'; if (is_array($urlFltr)) { foreach ($urlFltr as $k => $v) { if ($q['filter_url'] == $k && in_array($q['value_url'], $v)) { $filters[$q['filter_id']]['filter_values'][$q['value_id']]['filter_active'] = 1; } } } } } $sqls = array(); if (is_array($filters)) { foreach ($filters as $filter_id => $filter) { $filter['filter_values'] = $shop->customMultiSort($filter['filter_values'], 'filter_value'); if (is_array($filter['filter_values'])) { $iterate = 1; foreach ($filter['filter_values'] as $item) { $filter_value = $modx->db->getValue('Select `value_id` from modx_a_filter_values where `filter_url`="'.$modx->db->escape($item['value_url']).'"'); if (count($url_filter_ex)) { $url_filter_ex2 = array(); foreach($url_filter_ex as $k => $v) if ($k!=$filter_id) $url_filter_ex2[] = $v; if (count($url_filter_ex2)) $url_filter_exp = ' and '.implode(' and ',$url_filter_ex2); else $url_filter_exp = 'and 1'; } $sql = 'select count(*) from modx_a_product_filter_values as t join modx_a_products as p on t.product_id = p.product_id '.implode(' ',$joins).' where (t.filter_id in ('.$filter_id.') and t.value_id='.$filter_value.') '.$url_filter_exp; $sqls[] = $sql; $item['count'] = $modx->db->getValue($sql); $item['i'] = $iterate; $filter['filter_inner'] .= $modx->parseChunk($tplInner, $item); $iterate++; } } $filter['i'] = $i++; $res .= $modx->parseChunk($tpl, $filter); } } //$modx->logEvent(0, 3, implode('