Код Handler

Задача должна наследоваться от ASMP_Cron_Handler.

<?php

class ASMP_Cron_Handler1 extends ASMP_Cron_Handler
{
    public function execute()
	{
	    $oShop = Core_Entity::factory('Shop', 1);
	    
	    $oCore_QueryBuilder_Select = Core_QueryBuilder::select('shop_items.id')
	        ->from('shop_items')
	        ->where('shop_items.shop_id', '=', $oShop->id)
	        ->open()
                ->where('shop_items.image_large', 'IS', NULL)
                ->setOr()
                ->where('shop_items.image_large', '=', '')
            ->close();
            
        $iFrom = 0;
        $step = 5000;
        
         do {
            $oCore_QueryBuilder_Select->offset($iFrom)->limit($step);
            
            $aRows = $oCore_QueryBuilder_Select->execute()->asAssoc()->result(FALSE);
            
            foreach ($aRows as $row)
            {
                $aIDs[] = $row['id'];
            }
            
            $iFrom += $step;
        
            $iCount = count($aRows);
        }
        while ($iCount);
        
        $this->_total = count($aIDs);
        
        if($this->_total)
        {
            $siteUrl = $this->_getSiteUrl();

            foreach ($aIDs as $entity_id)
            {
                $oShop_Item = Core_Entity::factory('Shop_Item', (int) $entity_id);

                $message = sprintf('%1$s/admin/shop/item/index.php?hostcms[action]=edit&shop_id=%2$d1&shop_group_id=%3$d&hostcms[checked][1][%4$d]=1', $siteUrl, $oShop_Item->shop_id, $oShop_Item->shop_group_id, $oShop_Item->id);

                $this->addLog($message, -1);
            }
        }

	    return TRUE;
	}
}

Поддерживаемые методы в execute()

heartbeat - механизм продления lock во время выполнения долгой задачи

TTL на одну задачу выставлен 60 минут. Если задача выполняется дольше, то её lock нужно продлевать. Иначе она запустится снова параллельно текущей. Для этого в модуле реализован механизм heartbeat.

Последнее обновление