static function addNearest(Shop_Controller_Show $Shop_Controller_Show, $count = 1, $group = true) { if (!$Shop_Controller_Show->item) { return false; } $oShop = $Shop_Controller_Show->getEntity(); switch ($oShop->items_sorting_direction) { case 1: $items_sorting_direction_prev = 'ASC'; $items_sorting_direction_next = 'DESC'; $items_compare_sign_prev = '>'; $items_compare_sign_next = '<'; break; case 0: default: $items_sorting_direction_prev = 'DESC'; $items_sorting_direction_next = 'ASC'; $items_compare_sign_prev = '<'; $items_compare_sign_next = '>'; } $oXmlNearest = Core::factory('Core_Xml_Entity')->name('nearest'); $oCurrent = Core_Entity::factory('shop_item', $Shop_Controller_Show->item); // Поиск предыдущих $oItems = Core_Entity::factory('shop_item'); $oItems->queryBuilder() ->where('active', '=', 1) ->where('shop_id', '=', $oShop->id) ->where('deleted', '=', 0) ->limit($count); // Определяем поле сортировки информационных элементов switch ($oShop->items_sorting_field) { case 1: $oItems ->queryBuilder() ->where('name', $items_compare_sign_prev, $oCurrent->name) ->orderBy('name', $items_sorting_direction_prev) ->orderBy('sorting', $items_sorting_direction_prev) ; break; case 2: $oItems ->queryBuilder() ->where('sorting', $items_compare_sign_prev, $oCurrent->sorting) ->orderBy('sorting', $items_sorting_direction_prev) ->orderBy('name', $items_sorting_direction_prev) ; break; case 0: default: $oItems ->queryBuilder() ->where('datetime', $items_compare_sign_prev, $oCurrent->datetime) ->orderBy('datetime', $items_sorting_direction_prev) ->orderBy('sorting', $items_sorting_direction_prev) ; } if ($group) { $oItems->queryBuilder() ->where('shop_group_id', '=', $Shop_Controller_Show->group); } $oItems = $oItems->findAll(); if (count($oItems)) { $oXmlPrevious = Core::factory('Core_Xml_Entity')->name('prev'); foreach ($oItems as $oItem) { $oXmlPrevious->addEntity($oItem->clearEntities()); } $oXmlNearest->addEntity($oXmlPrevious); } // Поиск следующих $oItems = Core_Entity::factory('shop_item'); $oItems->queryBuilder() ->where('shop_id', '=', $oShop->id) ->where('deleted', '=', 0) ->where('active', '=', 1) ->limit($count) ->clearOrderBy(); // Определяем поле сортировки информационных элементов switch ($oShop->items_sorting_field) { case 1: $oItems ->queryBuilder() ->where('name', $items_compare_sign_next, $oCurrent->name) ->orderBy('name', $items_sorting_direction_next) ->orderBy('sorting', $items_sorting_direction_next) ; break; case 2: $oItems ->queryBuilder() ->where('sorting', $items_compare_sign_next, $oCurrent->sorting) ->orderBy('sorting', $items_sorting_direction_next) ->orderBy('name', $items_sorting_direction_next) ; break; case 0: default: $oItems ->queryBuilder() ->where('datetime', $items_compare_sign_next, $oCurrent->datetime) ->orderBy('datetime', $items_sorting_direction_next) ->orderBy('sorting', $items_sorting_direction_next) ; } if ($group) { $oItems->queryBuilder() ->where('shop_group_id', '=', $Shop_Controller_Show->group); } $oItems = $oItems->findAll(); if (count($oItems)) { $oXmlNext = Core::factory('Core_Xml_Entity')->name('next'); foreach ($oItems as $oItem) { $oXmlNext->addEntity($oItem->clearEntities()); } $oXmlNearest->addEntity($oXmlNext); } return $oXmlNearest; }
Страницу создал Егор Козырев 23.08.17 в 16:09