private:koding:hostcms:modules:shop:useful:ssylki_na_sledjuschij_i_predyduschij_tovar:shop_nearest
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

private/koding/hostcms/modules/shop/useful/ssylki_na_sledjuschij_i_predyduschij_tovar/shop_nearest.txt · Last modified: 25.12.17 в 09:48 by maximzasorin_gmail.com