0

errors in system.log

ERR (3): Warning: Invalid argument supplied for foreach() in /home3/produdo3/public_html/qtscanada/app/code/community/EM/Em0141settings/Model/Observer.php on line 28 2016-10-31T17:34:09+00:00 ERR (3): Warning: Invalid argument supplied for foreach() in /home3/produdo3/public_html/qtscanada/app/code/community/EM/Em0141settings/Model/Observer.php on line 28

Observer.php

<?php

class EM_Em0141settings_Model_Observer
{
    public function beforeGenerateBlocks(Varien_Event_Observer $observer)
    {
        if ((Mage::getSingleton('core/design_package')->getPackageName() == 'em0141') &&
            (Mage::getDesign()->getTheme('frontend') == 'default')) {
            # Disable default magento navigation
            if (Mage::helper('themeframework/settings')->getGeneral_DisableDefaultNav()!=1 && (Mage::
                getConfig()->getModuleConfig('EM_Megamenupro')->is('active', 'true'))) {
                $blocks = $observer->getLayout()->getXpath('//block[@name="em0141.catalog.topnav"]');
                if (!empty($blocks))
                    $blocks[0]->addAttribute('ignore', true);
            }

            # Disable EM variation module on frontend
            if (Mage::helper('themeframework/settings')->getGeneral_DisableFrontendVariation()!=1 ||
                Mage::helper('themeframework/settings')->checkMobile() == 'true') {
                $blocks = $observer->getLayout()->getXpath('//block[@name="em_variation_tpl" or @name="color_variation"]');
                foreach ($blocks as $block)
                    $block->addAttribute('ignore', true);
            }

            # Disable Admin Toolbar
            if (Mage::helper('themeframework/settings')->getGeneral_AdminToolbar()!=1) {
                $blocks = $observer->getLayout()->getXpath('//block[@name="em_admin_toolbar"]');
                foreach ($blocks as $block)
                    $block->addAttribute('ignore', true);
            }
        }
    }

    public function beforeCatalogProductCollectionLoad(Varien_Event_Observer $observer)
    {
        if ((Mage::getSingleton('core/design_package')->getPackageName() == 'em0141') &&
            (Mage::getDesign()->getTheme('frontend') == 'default')) {
            $collection = $observer->getEvent()->getCollection();
            if (!($collection instanceof Mage_Reports_Model_Resource_Product_Collection))
                $observer->getEvent()->getCollection()->addAttributeToSelect('image');
        }
    }

    public function addItemEvent($observer)
    {
        $observer->getHead()->addCSS('em0141/em0141.css');
        $observer->getHead()->addItem('skin_js', 'em0141/em0141.js');
        return $this;
    }
}

Excellence.php

public function collectRates(Mage_Shipping_Model_Rate_Request $request)
{
    if (!Mage::getStoreConfig('carriers/'.$this->_code.'/active')) {
        return false;
    }

    $price = $this->getConfigData('price'); // set a default shipping price maybe 0
    $price = 0;

    //var_dump($request);
    // $api_url = "http://www.eshipper.com/fetch_rates";
    // $api_username = "opsapi";
    // $api_password = "opsapipass";
    $api_url = $this->getConfigData('api');
    $api_username = $this->getConfigData('apiusername');
    $api_password = $this->getConfigData('apipassword');
    $increase_rate = $this->getConfigData('increaserate');
    $weight_class = $this->getConfigData('weightclass');

    //Case1: Price Depends on Country,State and Pin Code
    $destCountry = $request->getDestCountryId();
    $destRegion = $request->getDestRegionId();
    $destRegionCode = $request->getDestRegionCode();
    // print_r($destStreet = $request->getDestStreet()); echo ': Dest Street<br/>';
    $destStreet = $request->getDestStreet();
    $destCity = $request->getDestCity();
    $destPostcode = $request->getDestPostcode();
    $country_id = $request->getCountryId();
    $region_id = $request->getRegionId();
    //$region_code = $request->getRegionCode();
    $city = $request->getCity();
    $postcode = $request->getPostcode();

    $region = Mage::getModel('directory/region')->load($region_id);
    $region_code = $region->getCode();

    $service_url = 'http://maps.googleapis.com/maps/api/geocode/json?address='.$destPostcode.'&sensor=false';
    $curl = curl_init($service_url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $curl_response = curl_exec($curl);
    if ($curl_response === false) {
        $info = curl_getinfo($curl);
        curl_close($curl);
        die('error occured during curl exec. Additioanl info: ' . var_export($info));
    }
    curl_close($curl);
    $decoded = json_decode($curl_response);
    if (isset($decoded->response->status) && $decoded->response->status == 'ERROR') {
        die('error occured: ' . $decoded->response->errormessage);
    }

    $result = $decoded->results;
    $city_name = $result[0]->address_components[1]->long_name;

     if ($request->getAllItems()) {

        $total_item = count($request->getAllItems());
        $currency = Mage::app()->getStore()->getCurrentCurrencyCode();
        $prod_html = '';
        $count_row = 1;
        foreach ($request->getAllItems() as $item) {

            if ($item->getProduct()->isVirtual() || $item->getParentItem()) {
                continue;
            }

            if ($item->getHasChildren() && $item->isShipSeparately()) {
                $count_children = count($item->getHasChildren());
                $count_children_row = 1;
                foreach ($item->getChildren() as $child) {
                    if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) {
                        $product_id = $child->getProductId();
                        $productObj = Mage::getModel('catalog/product')->load($product_id);
                        $ship_price = $productObj->getData('shipping_price'); //our shipping attribute code
                        //$price += (float)$ship_price;
                        $prd_name = str_replace('"',"'",$productObj->getName());
                        $prod_html .= '{"name":"'.$prd_name.'","sku":"'.$productObj->getSku().'","quantity":'.$item->getQty().',"weight":'.floor($item->getWeight()).',"weightUnit":"'.$weight_class.'","price":'.$item->getPrice().',"vendor":"null","requires_shipping":true,"taxable":true,"fulfillment_service":"manual","product_id":"'.$product_id.'","variant_id":410333945}';
                        if($count_children_row<$count_children || $count_row<$total_item){
                            $prod_html .= ',';
                        }
                        $count_children_row++;
                    }
                }
            } else {
                $product_id = $item->getProductId();
                $productObj = Mage::getModel('catalog/product')->load($product_id);
                $prd_name = str_replace('"',"'",$productObj->getName());
                $prod_html .= '{"name":"'.$prd_name.'","sku":"'.$productObj->getSku().'","quantity":'.$item->getQty().',"weight":'.floor($item->getWeight()).',"weightUnit":"'.$weight_class.'","price":'.$item->getPrice().',"vendor":"null","requires_shipping":true,"taxable":true,"fulfillment_service":"manual","product_id":"'.$product_id.'","variant_id":410333945}';
            }
            if($count_row<$total_item){
                $prod_html .= ',';
            }
            $count_row++;
        }
    }


    //$fileContents = '{"rate":{"origin":{"country":"CA","postal_code":"V3N4R3","province":"ON","city":"Burnaby","name":null,"address1":"90 Maverick","address2":null,"address3":null,"phone":null,"fax":null,"address_type":null,"company_name":null},"destination":{"country":"'.$destCountry.'","postal_code":"'.$destPostcode.'","province":"'.$destRegionCode.'","city":"'.$destCity.'","name":null,"address1":null,"address2":"","address3":null,"phone":null,"fax":null,"address_type":null,"company_name":""},"items":['.$prod_html.'],"currency":"'.$currency.'"}}';
    $fileContents = '{"rate":{"origin":{"country":"'.$country_id.'","postal_code":"'.$postcode.'","province":"'.$region_code.'","city":"'.$city.'","name":null,"address1":null,"address2":null,"address3":null,"phone":null,"fax":null,"address_type":null,"company_name":null},"destination":{"country":"'.$destCountry.'","postal_code":"'.$destPostcode.'","province":"'.$destRegionCode.'","city":"'.$city_name.'","name":null,"address1":null,"address2":"","address3":null,"phone":null,"fax":null,"address_type":null,"company_name":""},"items":['.$prod_html.'],"currency":"'.$currency.'","CART_NAME":"MAGENTO"}}';
    //print_r($fileContents); exit;

    $ch = curl_init($api_url);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                    'Content-Type: application/json',
                    'API_USERNAME: ' . $api_username,
                    'API_PASSWORD: ' . $api_password
                )
    );
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fileContents);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $data = curl_exec($ch);
    //print_r($data);exit;
    if ($data !== FALSE) {
        $data = json_decode($data, TRUE);
    } else {
        $data = "";
    }
    $rate_array = array();
    if (is_array($data) && sizeof($data['rates']) > 0) {
        foreach ($data['rates'] as $key => $value) {
            $price = $value['total_price'] * 0.01;
            $price_eship_inc = $price + ($price * $increase_rate * 0.01);
            $max_delivery_date = "";
            if (!empty($value['max_delivery_date'])) {
                $max_delivery_date = " (Delivered by: " . $value['max_delivery_date'] . ")";
            } else {
                $max_delivery_date = "";
            }
            $np_label_shipping = $value['service_name'] . $max_delivery_date;
            if($price_eship_inc!=0)
            {
                $rate = array(
                    'id' => "eShipper_" . $value['service_code'],
                    'label' => $np_label_shipping,
                    'cost' => $price_eship_inc,
                    'calc_tax' => 'per_order'
                );
                // $this->add_rate($rate);
                $rate_array[] = $rate;
                //print_r($rate);
            }
        }
    } else {
        $rate = array(
            'id' => "eShipper",
            'label' => "Shipping Rates Not Available",
            'cost' => 0.00,
            'calc_tax' => 'per_order'
        );
        //$this->add_rate($rate);
         //print_r($rate);
    }

    $handling = Mage::getStoreConfig('carriers/'.$this->_code.'/handling');
    $result = Mage::getModel('shipping/rate_result');
    $show = true;
    //print_r($rate_array);
    if($show){



        /*$method->setCarrierTitle($this->getConfigData('title'));
            $method->setMethodTitle($this->getConfigData('name'));
            $method->setPrice($price);
            $method->setCost($price);*/
            //echo $this->_code; exit;
            $i=0;
        foreach($rate_array as $value){
            $i++;
            $method = Mage::getModel('shipping/rate_result_method');
            $method->setCarrier($this->_code);
            $method->setMethod($this->_code.$i);
            $method->setCarrierTitle($this->getConfigData('title'));
            $method->setMethodTitle($value['label']);
            $method->setPrice($value['cost']);
            $method->setCost($value['cost']);
            $result->append($method);
        }



    }else{
        $error = Mage::getModel('shipping/rate_result_error');
        $error->setCarrier($this->_code);
        $error->setCarrierTitle($this->getConfigData('name'));
        $error->setErrorMessage($this->getConfigData('specificerrmsg'));
        $result->append($error);
    }
    return $result;
}
public function getAllowedMethods()
{
    return array('excellence'=>$this->getConfigData('name'));
}

}

1
  • Please accept any of the answer, if it helped out to resolve your issue. Nov 2, 2016 at 16:29

2 Answers 2

0

Replace below code section (I can see two occurances):

foreach ($blocks as $block)
    $block->addAttribute('ignore', true);

with this:

 if (is_array($blocks)) {
     foreach ($blocks as $block) {
         $block->addAttribute('ignore', true);
     }
 }
6
  • ERR (3): Notice: Undefined offset: 0 in /home3/produdo3/public_html/qtscanada/app/code/community/Excellence/Ship/Model/Carrier/Excellence.php on line 58 2016-10-31T16:52:18+00:00 Nov 1, 2016 at 13:58
  • i'm integrating shipping api in my site . there is also error in excellence.php Nov 1, 2016 at 13:59
  • 1
    This is some other error which triggers on another file. I cannot help you without see that file. Also for this particular question, your comment is not relevant at all. Nov 1, 2016 at 14:00
  • I uploaded that file also . and Thanks for your reply Nov 1, 2016 at 14:00
  • 1
    You need to learn PHP first I believe. This is just pure php thing. Not at all related to Magento. Nov 1, 2016 at 14:04
0

You pass $blocks variable into foreach(), but it can be null if no results found. Debug your xpath call and use following code for foreach

if($blocks) {
    foreach($blocks as $block) {
        //....
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.