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'));
}

}

  • Please accept any of the answer, if it helped out to resolve your issue. – Rajeev K Tomy Nov 2 '16 at 16:29
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);
     }
 }
  • 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 – rameez.hashmi Nov 1 '16 at 13:58
  • i'm integrating shipping api in my site . there is also error in excellence.php – rameez.hashmi Nov 1 '16 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. – Rajeev K Tomy Nov 1 '16 at 14:00
  • I uploaded that file also . and Thanks for your reply – rameez.hashmi Nov 1 '16 at 14:00
  • 1
    You need to learn PHP first I believe. This is just pure php thing. Not at all related to Magento. – Rajeev K Tomy Nov 1 '16 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, privacy policy and cookie policy

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