Nous ne répondons seulement qu'aux sujets dont l'auteur a complété sa signature [Lire]



Vous avez des soucis avec votre Opencart v1.5.x, nous pouvons résoudre vos problèmes,
contactez le Bureau France !

par tel: 0 891 690 175 ou par
email

Invalid argument supplied for foreach()

Soutien et conseil sur les "Thèmes graphique" pour OpenCart

Re: Invalid argument supplied for foreach()

Messagepar villagedefrance » 03 Fév 2014, 16:00

Salut Canou,

Qu'en est-il de ton erreur "foreach" ? résolue ?

Pour info, ce type d'erreur est généralement causée par un "array" qui n'a pas été créé (déclaré) correctement dans le controleur. Lorsque l'"array" est ensuite appelé par "foreach" dans le fichier .tpl (exemple : products as product), il ne peut pas être traité correctement.
Image
Site Web (en Anglais) : http://villagedefrance.net
Extensions pour Opencart, toutes versions, en Anglais et en Français.
Boutique basée sur Opencart v1.8.1 Overclocked Edition.
Site hébergé chez http://www.compila.com (UK)
Avatar de l’utilisateur
villagedefrance
Administrateur
Administrateur
 
Messages: 338
Inscription: 05 Avr 2013, 19:03
Localisation: Grande Bretagne

Re: Invalid argument supplied for foreach()

Messagepar Canou83 » 03 Fév 2014, 16:13

Salut villagedefrance, non toujours pas.

Le développeur du Template et ceux du module de cache et module d'optimisation se renvoient la balle. :(
Opencart 2.3.0.3 en fr
Journal 2
Avatar de l’utilisateur
Canou83
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 133
Inscription: 09 Déc 2013, 17:33
Localisation: PACA

Re: Invalid argument supplied for foreach()

Messagepar LeorLindel » 03 Fév 2014, 16:24

As-tu désinstallé et ré-installé le module "Nouveautés" comme je te l'avais signalé car souvent ce genre de problème se solutionne suite à cette manip ?
Image
1 - A lire avant de poster un sujet
2 - Politique sur la signature.

Quand le sujet est résolu, pensez à ajouter la petite coche verte Image dans le titre initial en éditant votre premier message et non dans votre dernière réponse.
Merci


Toutes les extensions commerciales (templates ou modules payants) ne peuvent pas faire l'objet d'ouverture de sujet, prière de bien vouloir s'adresser au concepteur en cas de problème ou demande de renseignements.

Seul, on avance plus vite, à plusieurs on avance plus loin.
Avatar de l’utilisateur
LeorLindel
Administrateur
Administrateur
 
Messages: 4227
Inscription: 19 Fév 2010, 13:44
Localisation: Lutéce

Re: Invalid argument supplied for foreach()

Messagepar Canou83 » 03 Fév 2014, 16:27

Oui je l'ai fait, LeorLindel, sans succès malheureusement.
Opencart 2.3.0.3 en fr
Journal 2
Avatar de l’utilisateur
Canou83
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 133
Inscription: 09 Déc 2013, 17:33
Localisation: PACA

Re: Invalid argument supplied for foreach()

Messagepar villagedefrance » 03 Fév 2014, 16:42

Ok, il te faut alors étudier ton controleur manuellement en détail (.\catalog\controller\module\latest.php) ...

Vérifie que le bon fichier "model" est appellé;
Vérifie que l'array "products" est correctement appellé :
Code: Tout sélectionner
$this->data['products'] = array();

Vérifie que l'array "products" est ouvert correctement :
Code: Tout sélectionner
$this->data['products'][] = array(
            'product_id' => $result['product_id'], ...


Compare chaque ligne avec le code par défaut. L'erreur doit être facile a trouver car c'est une erreur php sérieuse.

Si tu ne trouves toujours pas, met l'intégralité du code du controller dans ton prochain post que l'on puisse voir.
Image
Site Web (en Anglais) : http://villagedefrance.net
Extensions pour Opencart, toutes versions, en Anglais et en Français.
Boutique basée sur Opencart v1.8.1 Overclocked Edition.
Site hébergé chez http://www.compila.com (UK)
Avatar de l’utilisateur
villagedefrance
Administrateur
Administrateur
 
Messages: 338
Inscription: 05 Avr 2013, 19:03
Localisation: Grande Bretagne

Re: Invalid argument supplied for foreach()

Messagepar LeorLindel » 03 Fév 2014, 16:51

@ villagedefrance,

Je ne pense pas que cela vienne d'un fichier controller ou model car cette erreur apparaissait avant (v1.5.2_Fr) et apparait encore suite à une installation neuve (v1.5.6.1_Fr).
Image
1 - A lire avant de poster un sujet
2 - Politique sur la signature.

Quand le sujet est résolu, pensez à ajouter la petite coche verte Image dans le titre initial en éditant votre premier message et non dans votre dernière réponse.
Merci


Toutes les extensions commerciales (templates ou modules payants) ne peuvent pas faire l'objet d'ouverture de sujet, prière de bien vouloir s'adresser au concepteur en cas de problème ou demande de renseignements.

Seul, on avance plus vite, à plusieurs on avance plus loin.
Avatar de l’utilisateur
LeorLindel
Administrateur
Administrateur
 
Messages: 4227
Inscription: 19 Fév 2010, 13:44
Localisation: Lutéce

Re: Invalid argument supplied for foreach()

Messagepar Canou83 » 03 Fév 2014, 17:11

villagedefrance a écrit:Ok, il te faut alors étudier ton controleur manuellement en détail (.\catalog\controller\module\latest.php) ...

Vérifie que le bon fichier "model" est appellé;
Vérifie que l'array "products" est correctement appellé :
Code: Tout sélectionner
$this->data['products'] = array();

Vérifie que l'array "products" est ouvert correctement :
Code: Tout sélectionner
$this->data['products'][] = array(
            'product_id' => $result['product_id'], ...


Compare chaque ligne avec le code par défaut. L'erreur doit être facile a trouver car c'est une erreur php sérieuse.

Si tu ne trouves toujours pas, met l'intégralité du code du controller dans ton prochain post que l'on puisse voir.


villagedefrance, j'ai vérifié que tu m'as demandé, et il me semble que tout est en lieu et place.

Voici mon code complet :

Code: Tout sélectionner
<?php
class ControllerModuleLatest extends Controller {
   protected function index($setting) {
      
      $this->load->model('setting/setting');
      
         $plus_minus_quantity = $this->model_setting_setting->getSetting('plus_minus_quantity', $this->request->post);
         
         if (!empty($plus_minus_quantity)) {
            $this -> data['plus_minus_quantity'] = $plus_minus_quantity['plus_minus_quantity_module']['1']['enable_on_modules']['latest'];
            
            $this->document->addScript('catalog/view/javascript/plus_minus_quantity.js');
         }
      
      $this->language->load('module/latest');
      
         $this->data['heading_title'] = $this->language->get('heading_title');
      
      $this->data['button_cart'] = $this->language->get('button_cart');
            
      $this->load->model('catalog/product');
      
      $this->load->model('tool/image');
      
      $this->data['setting'] = $setting;
      
      $this->data['products'] = array();
      
      $data = array(
         'sort'  => 'p.date_added',
         'order' => 'DESC',
         'start' => 0,
         'limit' => $setting['limit']
      );

      $results = $this->model_catalog_product->getProducts($data);

      foreach ($results as $result) {
         if ($result['image']) {
            $image = $this->model_tool_image->resize($result['image'], $setting['image_width'], $setting['image_height']);
            $image_big = $this->model_tool_image->resize($result['image'],  ($this->config->get('config_image_product_width') * 2), ($this->config->get('config_image_product_height') * 2));
         } else {
            $image = false;
         }
                  
         if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
            $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
         } else {
            $price = false;
         }
               
         if ((float)$result['special']) {
            $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
         } else {
            $special = false;
         }
         
         /*------------------------------------------------------------------------
           Countdown by Dimitar Koev
         -------------------------------------------------------------------------*/
         $this->load->model('catalog/UniversumGraboCount');
         
         
         
         $specials_date = $this->model_catalog_UniversumGraboCount->getProductDiscountDates($result['product_id']);
         $specials_purchased = $this->model_catalog_UniversumGraboCount->getVouchersBought($result['product_id']);
         
         $this->data['quantity_start'] = $result['quantity'];
         $this->data['quantity_left'] = $result['quantity'] - $specials_purchased['quantity_purchased'];
         
         if ($specials_date['date_end']) {            
            list($year,$month,$day)    =    explode('-',$specials_date['date_end']);
            $stringDate = $year.', '.$month.' - 1, '.$day;
         }else{
            $stringDate = 0;
         }
         
         /*------------------------------------------------------------------------
         
         -------------------------------------------------------------------------*/
         
         if ($this->config->get('config_review_status')) {
            $rating = $result['rating'];
         } else {
            $rating = false;
         }
         
         $this->data['products'][] = array(
            'product_id' => $result['product_id'],
            'thumb'       => $image,
            'big_feature'   => $image_big,
            'name'        => $result['name'],
            'startdate'        => $result['date_added'],
            'date_end'  => $stringDate,
            'quantity' => $result['quantity'],
            'quantity_start' =>  $specials_purchased['quantity_purchased'],
            'description' => mb_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',
            'price'       => $price,
            'special'     => $special,
            'rating'     => $rating,
            'reviews'    => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
            'href'        => $this->url->link('product/product', 'product_id=' . $result['product_id']),
         );
      }

      if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/latest.tpl')) {
         $this->template = $this->config->get('config_template') . '/template/module/latest.tpl';
      } else {
         $this->template = 'default/template/module/latest.tpl';
      }

      $this->render();
   }
}
?>
Opencart 2.3.0.3 en fr
Journal 2
Avatar de l’utilisateur
Canou83
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 133
Inscription: 09 Déc 2013, 17:33
Localisation: PACA

Re: Invalid argument supplied for foreach()

Messagepar villagedefrance » 03 Fév 2014, 17:50

Ok, il y a quelques petites erreurs dans le controleur ...

Je crois que la cause de l'erreur "foreach" vient de cette ligne :
Code: Tout sélectionner
$this->data['setting'] = $setting;


$setting est l'array des paramètres du module, mais "$this->data['setting']" n'est pas un array, c'est un "string". Il faudrait donc tout d'abord déclarer "settings" (et non pas 'setting') comme un array :
Code: Tout sélectionner
$this->data['settings'] = array();

et ensuite avoir :
Code: Tout sélectionner
$this->data['settings'][] = $setting;


Je suppose qu'il y a un "foreach" dans le fichier .tpl qui appelle cet array, du genre :
Code: Tout sélectionner
<?php foreach ($settings as $setting) { ?>


Sinon je ne vois pas du tout la raison de cet array, car il n'a rien a voir avec le module par défaut.
Image
Site Web (en Anglais) : http://villagedefrance.net
Extensions pour Opencart, toutes versions, en Anglais et en Français.
Boutique basée sur Opencart v1.8.1 Overclocked Edition.
Site hébergé chez http://www.compila.com (UK)
Avatar de l’utilisateur
villagedefrance
Administrateur
Administrateur
 
Messages: 338
Inscription: 05 Avr 2013, 19:03
Localisation: Grande Bretagne

Re: Invalid argument supplied for foreach()

Messagepar Canou83 » 03 Fév 2014, 18:04

J'imagine que tu parles du fichier /catalog/view/theme/MonTemplate/template/module/latest.tpl

Code: Tout sélectionner
<?php
$this->language->load('Universum_custom/Universum');
$text_wish = $this->language->get('text_wish');
$text_compare = $this->language->get('text_compare');
$text_sale = $this->language->get('text_sale');
$text_save = $this->language->get('text_save');
$text_new_prod = $this->language->get('text_new_prod');
$text_left = $this->language->get('text_left');
$text_purchased = $this->language->get('text_purchased');
$text_limited = $this->language->get('text_limited');
?>
<?php if (($setting['position'] == 'content_top') || ($setting['position'] == 'content_bottom')){ ?>

<div class="box">
  <h2 class="heading_title"><span><?php echo $heading_title; ?></span></h2>
  <div class="box-content">
    <div class="box-product">
      <?php foreach ($products as $product) { ?>
      <div class="prod_hold">
        <?php if ($product['thumb']) { ?>
        <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
        <?php } ?>
        <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
        <?php
        $startDate1 = strtotime(mb_substr($product['startdate'], 0, 10));
        $endDate2 = strtotime(date("Y-m-d"));
        $days = ceil(($endDate2 / 86400)) - ceil(($startDate1 / 86400));
        ?>
        <?php if($this->config->get('UniversumControl_status') == '1'){ ?>
        <?php $numeroNew = $this->config->get('UniversumControl_new_label'); ?>
        <?php } else { ?>
        <?php $numeroNew = 10; ?>
        <?php } ?>
        <?php if ($days < $numeroNew) { ?>
        <span class="new_prod"><?php echo $text_new_prod; ?></span>
        <?php } ?>
        <?php if ($product['price']) { ?>
        <div class="price">
          <?php if (!$product['special']) { ?>
          <?php echo $product['price']; ?>
          <?php } else { ?>
          <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
          <div class="sale_save_holder">
            <?php
        $val1 = preg_replace("/[^0-9.]/", "", $product['special']);
      $val2 = preg_replace("/[^0-9.]/", "", $product['price']);
        ?>
            <?php
        $res = ($val1 / $val2) * 100;
        $res = 100 - $res;
        $res = round($res, 1);
        ?>
            <span class="sale"><?php echo $text_sale; ?></span> <span class="save"><?php echo $text_save; ?>: <?php echo $res; ?>%</span> </div>
          <?php } ?>
        </div>
        <?php } ?>
        <div class="prod-info-fly">
          <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
          <?php if ($product['price']) { ?>
          <div class="price">
            <?php if (!$product['special']) { ?>
            <?php echo $product['price']; ?>
            <?php } else { ?>
            <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
            <?php if(($this->config->get('UniversumControl_status') == '1') && ($this->config->get('UniversumControl_countdown') == '1')){ ?>
            <?php if ($product['date_end'] != '0000, 00 - 1, 00') { ?>
            <span class="turning_clock"></span>
            <div class="count_holder_small">
              <div class="count_info"><?php echo $text_limited; ?></div>
              <div id="UniversumCountSmallLatest<?php echo $product['product_id']; ?>"></div>
              <script type="text/javascript">
               $(function () {   
                  $('#UniversumCountSmallLatest<?php echo $product['product_id']; ?>').countdown({until: new Date(<?php echo $product['date_end']; ?>), compact: false});
               });
      </script>
              <div class="clear"></div>
             
            </div>
            <?php } ?>
            <?php } ?>
            <?php } ?>
            <div class="clear"></div>
          </div>
          <?php } ?>
          <?php if ($product['rating']) { ?>
          <div class="rating"><img src="catalog/view/theme/default/image/stars-<?php echo $product['rating']; ?>.png" alt="<?php echo $product['reviews']; ?>" /></div>
          <?php } ?>
          <div class="cart"> <?php if(!empty($plus_minus_quantity) && $plus_minus_quantity==1) { ?>
            <div class="plus_minus_quantity">
            <input type="button" onclick="subtractQty(this)" value="-" class="qty-minus" />
            <input type="text" value="1" size="1" class="quantity" name="quantity_<?php echo $product['product_id']; ?>">
            <input type="button" onclick="addQty(this)" value="+" class="qty-plus" />
            
            </div>
                <a class="add_to_cart_small" title="<?php echo $button_cart; ?>" onclick="addToCartQty('<?php echo $product['product_id']; ?>', this);"><?php echo $button_cart; ?></a>
            <?php } else {   ?>
                 <a class="add_to_cart_small" title="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');"><?php echo $button_cart; ?></a>
            <?php } ?> <a class="add_to_wishlist_small" onclick="addToWishList('<?php echo $product['product_id']; ?>');" title="<?php echo $text_wish; ?>"><?php echo $text_wish; ?></a> <a class="add_to_compare_small" onclick="addToCompare('<?php echo $product['product_id']; ?>');" title="<?php echo $text_compare; ?>"><?php echo $text_compare; ?></a> </div>
        </div>
      </div>
      <?php } ?>
    </div>
  </div>
</div>
<?php } else { ?>
<div class="box">
  <div class="box-heading"><?php echo $heading_title; ?></div>
  <div class="box-content">
    <?php foreach ($products as $product) { ?>
    <div class="prod_hold">
      <?php if ($product['thumb']) { ?>
      <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
      <?php } ?>
      <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
      <?php
        $startDate1 = strtotime(mb_substr($product['startdate'], 0, 10));
        $endDate2 = strtotime(date("Y-m-d"));
        $days = ceil(($endDate2 / 86400)) - ceil(($startDate1 / 86400));
        ?>
      <?php if($this->config->get('UniversumControl_status') == '1'){ ?>
      <?php $numeroNew = $this->config->get('UniversumControl_new_label'); ?>
      <?php } else { ?>
      <?php $numeroNew = 10; ?>
      <?php } ?>
      <?php if ($days < $numeroNew) { ?>
      <span class="new_prod"><?php echo $text_new_prod; ?></span>
      <?php } ?>
      <?php if ($product['price']) { ?>
      <div class="price">
        <?php if (!$product['special']) { ?>
        <?php echo $product['price']; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
        <?php } ?>
      </div>
      <?php } ?>
      <div class="cart"> <?php if(!empty($plus_minus_quantity) && $plus_minus_quantity==1) { ?>
            <div class="plus_minus_quantity">
            <input type="button" onclick="subtractQty(this)" value="-" class="qty-minus" />
            <input type="text" value="1" size="1" class="quantity" name="quantity_<?php echo $product['product_id']; ?>">
            <input type="button" onclick="addQty(this)" value="+" class="qty-plus" />
            
            </div>
                <a class="add_to_cart_small" title="<?php echo $button_cart; ?>" onclick="addToCartQty('<?php echo $product['product_id']; ?>', this);"><?php echo $button_cart; ?></a>
            <?php } else {   ?>
                 <a class="add_to_cart_small" title="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');"><?php echo $button_cart; ?></a>
            <?php } ?> <a class="add_to_wishlist_small" onclick="addToWishList('<?php echo $product['product_id']; ?>');" title="<?php echo $text_wish; ?>"><?php echo $text_wish; ?></a> <a class="add_to_compare_small" onclick="addToCompare('<?php echo $product['product_id']; ?>');" title="<?php echo $text_compare; ?>"><?php echo $text_compare; ?></a> </div>
    </div>
    <?php } ?>
  </div>
</div>
<?php } ?>
Opencart 2.3.0.3 en fr
Journal 2
Avatar de l’utilisateur
Canou83
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 133
Inscription: 09 Déc 2013, 17:33
Localisation: PACA

Re: Invalid argument supplied for foreach()

Messagepar villagedefrance » 03 Fév 2014, 18:54

Ok, j'ai re-écris tes fichiers, principalement le controleur mais il y a aussi un ajustement dans le .tpl.

Je te les mets ci-dessous. Fait un backup des originaux au cas ou, et teste les miens.
CONTROLLER:
Code: Tout sélectionner
<?php
class ControllerModuleLatest extends Controller {
   protected function index($setting) {
     
      $this->load->model('setting/setting');
   
      $plus_minus_quantity = $this->model_setting_setting->getSetting('plus_minus_quantity', $this->request->post);
   
      if (!empty($plus_minus_quantity)) {
         $this -> data['plus_minus_quantity'] = $plus_minus_quantity['plus_minus_quantity_module']['1']['enable_on_modules']['latest'];
      
         $this->document->addScript('catalog/view/javascript/plus_minus_quantity.js');
      }
   
      $this->language->load('module/latest');
   
      $this->data['heading_title'] = $this->language->get('heading_title');
   
      $this->data['button_cart'] = $this->language->get('button_cart');
   
      $this->load->model('catalog/product');
   
      $this->load->model('tool/image');
   
      // Position
      $this->data['position'] = $setting['position'];
   
      if ($this->data['position'] == 'content_top' || $this->data['position'] == 'content_bottom') {
         $this->data['content'] = true;
      } else {
         $this->data['content'] = false;
      }
     
      $this->data['products'] = array();
     
      $data = array(
         'sort'     => 'p.date_added',
         'order'    => 'DESC',
         'start'    => 0,
         'limit'    => $setting['limit']
      );

      $results = $this->model_catalog_product->getProducts($data);

      foreach ($results as $result) {
         if ($result['image']) {
            $image = $this->model_tool_image->resize($result['image'], $setting['image_width'], $setting['image_height']);
            $image_big = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width') * 2, $this->config->get('config_image_product_height') * 2);
         } else {
            $image = false;
            $image_big = false;
         }
      
         if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
            $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
         } else {
            $price = false;
         }
               
         if ((float)$result['special']) {
            $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
         } else {
            $special = false;
         }
      
         $this->load->model('catalog/UniversumGraboCount');
      
         $specials_date = $this->model_catalog_UniversumGraboCount->getProductDiscountDates($result['product_id']);
         $specials_purchased = $this->model_catalog_UniversumGraboCount->getVouchersBought($result['product_id']);
         
         if ($result['quantity'] > 0) {
            $this->data['quantity_start'] = $result['quantity'];
         } else {
            $this->data['quantity_start'] = 0;
         }
         
         if ($specials_purchased['quantity_purchased']) {
            $this->data['quantity_left'] = $result['quantity'] - $specials_purchased['quantity_purchased'];
            $purchased = $specials_purchased['quantity_purchased'];
         } else {
            $this->data['quantity_left'] = $result['quantity'];
            $purchased = 0;
         }
         
         if ($specials_date['date_end']) {           
            list ($year, $month, $day) = explode('-', $specials_date['date_end']);
            $stringDate = $year . ', ' . $month . ' - 1, ' . $day;
         } else {
            $stringDate = 0;
         }
         
         if ($this->config->get('config_review_status')) {
            $rating = $result['rating'];
         } else {
            $rating = false;
         }
         
         $this->data['products'][] = array(
            'product_id'    => $result['product_id'],
            'thumb'          => $image,
            'big_feature'      => $image_big,
            'name'           => $result['name'],
            'startdate'     => $result['date_added'],
            'date_end'     => $stringDate,
            'quantity'       => $result['quantity'],
            'quantity_start' => $purchased,
            'description'    => mb_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',
            'price'          => $price,
            'special'        => $special,
            'rating'           => $rating,
            'reviews'       => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
            'href'              => $this->url->link('product/product', 'product_id=' . $result['product_id'])
         );
      }
   
      if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/latest.tpl')) {
         $this->template = $this->config->get('config_template') . '/template/module/latest.tpl';
      } else {
         $this->template = 'default/template/module/latest.tpl';
      }

      $this->render();
   }
}
?>


TEMPLATE:
Code: Tout sélectionner
<?php
$this->language->load('Universum_custom/Universum');
$text_wish = $this->language->get('text_wish');
$text_compare = $this->language->get('text_compare');
$text_sale = $this->language->get('text_sale');
$text_save = $this->language->get('text_save');
$text_new_prod = $this->language->get('text_new_prod');
$text_left = $this->language->get('text_left');
$text_purchased = $this->language->get('text_purchased');
$text_limited = $this->language->get('text_limited');
?>
<?php if ($content) { ?>

<div class="box">
  <h2 class="heading_title"><span><?php echo $heading_title; ?></span></h2>
  <div class="box-content">
    <div class="box-product">
      <?php foreach ($products as $product) { ?>
      <div class="prod_hold">
        <?php if ($product['thumb']) { ?>
        <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
        <?php } ?>
        <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
        <?php
        $startDate1 = strtotime(mb_substr($product['startdate'], 0, 10));
        $endDate2 = strtotime(date("Y-m-d"));
        $days = ceil(($endDate2 / 86400)) - ceil(($startDate1 / 86400));
        ?>
        <?php if($this->config->get('UniversumControl_status') == '1'){ ?>
        <?php $numeroNew = $this->config->get('UniversumControl_new_label'); ?>
        <?php } else { ?>
        <?php $numeroNew = 10; ?>
        <?php } ?>
        <?php if ($days < $numeroNew) { ?>
        <span class="new_prod"><?php echo $text_new_prod; ?></span>
        <?php } ?>
        <?php if ($product['price']) { ?>
        <div class="price">
          <?php if (!$product['special']) { ?>
          <?php echo $product['price']; ?>
          <?php } else { ?>
          <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
          <div class="sale_save_holder">
            <?php
        $val1 = preg_replace("/[^0-9.]/", "", $product['special']);
      $val2 = preg_replace("/[^0-9.]/", "", $product['price']);
        ?>
            <?php
        $res = ($val1 / $val2) * 100;
        $res = 100 - $res;
        $res = round($res, 1);
        ?>
            <span class="sale"><?php echo $text_sale; ?></span> <span class="save"><?php echo $text_save; ?>: <?php echo $res; ?>%</span> </div>
          <?php } ?>
        </div>
        <?php } ?>
        <div class="prod-info-fly">
          <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
          <?php if ($product['price']) { ?>
          <div class="price">
            <?php if (!$product['special']) { ?>
            <?php echo $product['price']; ?>
            <?php } else { ?>
            <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
            <?php if(($this->config->get('UniversumControl_status') == '1') && ($this->config->get('UniversumControl_countdown') == '1')){ ?>
            <?php if ($product['date_end'] != '0000, 00 - 1, 00') { ?>
            <span class="turning_clock"></span>
            <div class="count_holder_small">
              <div class="count_info"><?php echo $text_limited; ?></div>
              <div id="UniversumCountSmallLatest<?php echo $product['product_id']; ?>"></div>
              <script type="text/javascript">
               $(function () {   
                  $('#UniversumCountSmallLatest<?php echo $product['product_id']; ?>').countdown({until: new Date(<?php echo $product['date_end']; ?>), compact: false});
               });
      </script>
              <div class="clear"></div>
             
            </div>
            <?php } ?>
            <?php } ?>
            <?php } ?>
            <div class="clear"></div>
          </div>
          <?php } ?>
          <?php if ($product['rating']) { ?>
          <div class="rating"><img src="catalog/view/theme/default/image/stars-<?php echo $product['rating']; ?>.png" alt="<?php echo $product['reviews']; ?>" /></div>
          <?php } ?>
          <div class="cart"> <?php if(!empty($plus_minus_quantity) && $plus_minus_quantity==1) { ?>
            <div class="plus_minus_quantity">
            <input type="button" onclick="subtractQty(this)" value="-" class="qty-minus" />
            <input type="text" value="1" size="1" class="quantity" name="quantity_<?php echo $product['product_id']; ?>">
            <input type="button" onclick="addQty(this)" value="+" class="qty-plus" />
           
            </div>
                <a class="add_to_cart_small" title="<?php echo $button_cart; ?>" onclick="addToCartQty('<?php echo $product['product_id']; ?>', this);"><?php echo $button_cart; ?></a>
            <?php } else {   ?>
                 <a class="add_to_cart_small" title="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');"><?php echo $button_cart; ?></a>
            <?php } ?> <a class="add_to_wishlist_small" onclick="addToWishList('<?php echo $product['product_id']; ?>');" title="<?php echo $text_wish; ?>"><?php echo $text_wish; ?></a> <a class="add_to_compare_small" onclick="addToCompare('<?php echo $product['product_id']; ?>');" title="<?php echo $text_compare; ?>"><?php echo $text_compare; ?></a> </div>
        </div>
      </div>
      <?php } ?>
    </div>
  </div>
</div>
<?php } else { ?>
<div class="box">
  <div class="box-heading"><?php echo $heading_title; ?></div>
  <div class="box-content">
    <?php foreach ($products as $product) { ?>
    <div class="prod_hold">
      <?php if ($product['thumb']) { ?>
      <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
      <?php } ?>
      <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
      <?php
        $startDate1 = strtotime(mb_substr($product['startdate'], 0, 10));
        $endDate2 = strtotime(date("Y-m-d"));
        $days = ceil(($endDate2 / 86400)) - ceil(($startDate1 / 86400));
        ?>
      <?php if($this->config->get('UniversumControl_status') == '1'){ ?>
      <?php $numeroNew = $this->config->get('UniversumControl_new_label'); ?>
      <?php } else { ?>
      <?php $numeroNew = 10; ?>
      <?php } ?>
      <?php if ($days < $numeroNew) { ?>
      <span class="new_prod"><?php echo $text_new_prod; ?></span>
      <?php } ?>
      <?php if ($product['price']) { ?>
      <div class="price">
        <?php if (!$product['special']) { ?>
        <?php echo $product['price']; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span>
        <?php } ?>
      </div>
      <?php } ?>
      <div class="cart"> <?php if(!empty($plus_minus_quantity) && $plus_minus_quantity==1) { ?>
            <div class="plus_minus_quantity">
            <input type="button" onclick="subtractQty(this)" value="-" class="qty-minus" />
            <input type="text" value="1" size="1" class="quantity" name="quantity_<?php echo $product['product_id']; ?>">
            <input type="button" onclick="addQty(this)" value="+" class="qty-plus" />
           
            </div>
                <a class="add_to_cart_small" title="<?php echo $button_cart; ?>" onclick="addToCartQty('<?php echo $product['product_id']; ?>', this);"><?php echo $button_cart; ?></a>
            <?php } else {   ?>
                 <a class="add_to_cart_small" title="<?php echo $button_cart; ?>" onclick="addToCart('<?php echo $product['product_id']; ?>');"><?php echo $button_cart; ?></a>
            <?php } ?> <a class="add_to_wishlist_small" onclick="addToWishList('<?php echo $product['product_id']; ?>');" title="<?php echo $text_wish; ?>"><?php echo $text_wish; ?></a> <a class="add_to_compare_small" onclick="addToCompare('<?php echo $product['product_id']; ?>');" title="<?php echo $text_compare; ?>"><?php echo $text_compare; ?></a> </div>
    </div>
    <?php } ?>
  </div>
</div>
<?php } ?>
Image
Site Web (en Anglais) : http://villagedefrance.net
Extensions pour Opencart, toutes versions, en Anglais et en Français.
Boutique basée sur Opencart v1.8.1 Overclocked Edition.
Site hébergé chez http://www.compila.com (UK)
Avatar de l’utilisateur
villagedefrance
Administrateur
Administrateur
 
Messages: 338
Inscription: 05 Avr 2013, 19:03
Localisation: Grande Bretagne

Re: Invalid argument supplied for foreach()

Messagepar Canou83 » 03 Fév 2014, 19:03

Merci villagedefrance pour ce temps passé.

Je mets en oeuvre et j'essaye.

Je reviens vers toi pour t'en donner le résultat.

:)
Opencart 2.3.0.3 en fr
Journal 2
Avatar de l’utilisateur
Canou83
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 133
Inscription: 09 Déc 2013, 17:33
Localisation: PACA

Re: Invalid argument supplied for foreach()

Messagepar Canou83 » 04 Fév 2014, 08:14

Bonjour villagedefrance. Ce n'est malheureusement concluant. l'erreur est toujours présente.

je vous glisse aussi les 2 ou 3 qui sont apparues ces derniers jours mais qui ne sont pas liées.

C'est une histoire de dingue ce truc. Je vais faire un clone sur le templates d'origine et si j'ai la même erreur c'est que cela vient pas de son template.

2014-02-03 20:42:39 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/aquamagasin.com/catalog/view/theme/Universum/template/module/latest.tpl on line 18
2014-02-03 20:48:43 - PHP Notice: Array to string conversion in /homez.792/freewrs/aquamagasin.com/vqmod/vqcache/vq2-admin_view_template_sale_order_list.tpl on line 122
2014-02-03 21:45:03 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/aquamagasin.com/catalog/view/theme/Universum/template/module/latest.tpl on line 18
2014-02-03 22:46:28 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/aquamagasin.com/catalog/view/theme/Universum/template/module/latest.tpl on line 18
2014-02-03 23:54:38 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/aquamagasin.com/catalog/view/theme/Universum/template/module/latest.tpl on line 18
2014-02-04 1:00:09 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/aquamagasin.com/catalog/view/theme/Universum/template/module/latest.tpl on line 18
2014-02-04 2:06:50 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/aquamagasin.com/catalog/view/theme/Universum/template/module/latest.tpl on line 18
2014-02-04 3:19:21 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/aquamagasin.com/catalog/view/theme/Universum/template/module/latest.tpl on line 18
2014-02-04 4:54:06 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/aquamagasin.com/catalog/view/theme/Universum/template/module/latest.tpl on line 18
2014-02-04 6:30:13 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/aquamagasin.com/catalog/view/theme/Universum/template/module/latest.tpl on line 18
2014-02-04 6:41:30 - PHP Notice: Undefined index: zone_id in /homez.792/freewrs/aquamagasin.com/vqmod/vqcache/vq2-catalog_controller_account_register.php on line 462
2014-02-04 6:41:31 - PHP Notice: Undefined index: zone_id in /homez.792/freewrs/aquamagasin.com/vqmod/vqcache/vq2-catalog_controller_account_register.php on line 462
2014-02-04 6:41:31 - PHP Notice: Undefined index: zone_id in /homez.792/freewrs/aquamagasin.com/vqmod/vqcache/vq2-catalog_controller_account_register.php on line 462
2014-02-04 6:41:32 - PHP Notice: Undefined index: zone_id in /homez.792/freewrs/aquamagasin.com/vqmod/vqcache/vq2-catalog_controller_account_register.php on line 462
2014-02-04 6:41:33 - PHP Notice: Undefined index: zone_id in /homez.792/freewrs/aquamagasin.com/vqmod/vqcache/vq2-catalog_controller_account_register.php on line 462
2014-02-04 7:08:40 - PHP Notice: Array to string conversion in /homez.792/freewrs/aquamagasin.com/vqmod/vqcache/vq2-admin_view_template_sale_order_list.tpl on line 122
Opencart 2.3.0.3 en fr
Journal 2
Avatar de l’utilisateur
Canou83
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 133
Inscription: 09 Déc 2013, 17:33
Localisation: PACA

Re: Invalid argument supplied for foreach()

Messagepar villagedefrance » 04 Fév 2014, 14:47

Dans ce cas là, le problème vient sans aucun doute de ton extension "Countdown".

Code: Tout sélectionner
/*------------------------------------------------------------------------
      Countdown by Dimitar Koev
-------------------------------------------------------------------------*/
     $this->load->model('catalog/UniversumGraboCount');
     ....


Je n'ai pas pu examiner ca en détail car je n'avais pas le fichier "model", mais le code dans le controleur est douteux. Et même aprés mes efforts pour le rectifier, il y a toujours la même erreur en ligne 18. La raison est trés claire, l'array "products" n'est pas créé correctement et donc retourne une erreur dans le fichier .tpl.

Ma conclusion est qu'il y a une erreur dans le fichier "model", et les données nécessaires pour construire l'array "products" ne sont pas accessible.

Si c'est une vQmod, désinstalle-la, sinon Il faut voir ca avec le developpeur.
Image
Site Web (en Anglais) : http://villagedefrance.net
Extensions pour Opencart, toutes versions, en Anglais et en Français.
Boutique basée sur Opencart v1.8.1 Overclocked Edition.
Site hébergé chez http://www.compila.com (UK)
Avatar de l’utilisateur
villagedefrance
Administrateur
Administrateur
 
Messages: 338
Inscription: 05 Avr 2013, 19:03
Localisation: Grande Bretagne

Re: Invalid argument supplied for foreach()

Messagepar Canou83 » 04 Fév 2014, 17:57

Merci pour ta ténacité.

Pour information le fichier catalog/model/catalog/UniversumGraboCount.php

Code: Tout sélectionner
<?php
/*------------------------------------------------------------------------
//-----------------------------------------------------
// GraboCountdown Module for Universum Premium theme by Dimitar Koev
// Copyright (C) 2012 Dimitar Koev. All Rights Reserved!
// Author: Dimitar Koev
// Author websites: http://www.althemist.com  /  http://www.dimitarkoev.com
// @license - Copyrighted Commercial Software                           
// support@althemist.com                         
//-----------------------------------------------------
-------------------------------------------------------------------------*/

class ModelCatalogUniversumGraboCount extends ModelCatalogProduct {
   
   public function getProductDiscountDates($product_id) {
      if ($this->customer->isLogged()) {
         $customer_group_id = $this->customer->getCustomerGroupId();
      } else {
         $customer_group_id = $this->config->get('config_customer_group_id');
      }   
     
      $query = $this->db->query("SELECT *, UNIX_TIMESTAMP(date_end) AS date_end_timestamp FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");
     
      if ($query->num_rows) {
         return $query->row;
      } else {
         return FALSE;
      }
   }
   
   public function getVouchersBought($product_id) {     
     
      $query = $this->db->query("SELECT SUM( quantity ) AS quantity_purchased FROM " . DB_PREFIX . "order_product WHERE product_id = '" . (int)$product_id . "' GROUP BY product_id");
     
      if ($query->num_rows) {
         return $query->row;
      } else {
         return FALSE;
      }
   }

}
?>


De mon côté, j'ai fait un clone et je vais faire des essais sur le template natif. Si cette erreur n'apparait pas/plus alors que tous le modules sont identiques, c'est que là c'est bien son template qui est en cause, ou en tout cas une partie de son code comme tu le pressens.

Les seules erreurs que 'jai sur le clone sont pour le moment :

Code: Tout sélectionner
2014-02-04 17:22:04 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-04 17:22:04 - PHP Notice:  Undefined variable: profiles in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_product_product.tpl on line 99


Mais me semble-t-il rien à voir. J'ai juste basculé le clone, désactivé son template.
Opencart 2.3.0.3 en fr
Journal 2
Avatar de l’utilisateur
Canou83
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 133
Inscription: 09 Déc 2013, 17:33
Localisation: PACA

Re: Invalid argument supplied for foreach()

Messagepar Canou83 » 05 Fév 2014, 10:20

Suite...

Sur le clone j'ai ces erreurs :

Code: Tout sélectionner
2014-02-04 17:22:04 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-04 17:22:04 - PHP Notice:  Undefined variable: profiles in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_product_product.tpl on line 99
2014-02-04 18:01:50 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-04 18:01:59 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-04 22:35:54 - PHP Warning:  Invalid argument supplied for foreach() in /homez.792/freewrs/test.aquamagasin.com/catalog/view/theme/default/template/module/latest.tpl on line 5
2014-02-04 22:35:55 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-04 22:36:01 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-04 22:37:04 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-04 22:37:16 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-04 22:37:16 - PHP Notice:  Undefined variable: profiles in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_product_product.tpl on line 99
2014-02-04 22:37:40 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-05 9:17:09 - PHP Warning:  Invalid argument supplied for foreach() in /homez.792/freewrs/test.aquamagasin.com/catalog/view/theme/default/template/module/latest.tpl on line 5
2014-02-05 9:17:10 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-05 9:17:18 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124
2014-02-05 9:17:21 - PHP Notice:  Undefined variable: error in /homez.792/freewrs/test.aquamagasin.com/vqmod/vqcache/vq2-catalog_view_theme_default_template_common_header.tpl on line 124


Et j'ai bien celle-ci :

2014-02-05 9:17:09 - PHP Warning: Invalid argument supplied for foreach() in /homez.792/freewrs/test.aquamagasin.com/catalog/view/theme/default/template/module/latest.tpl on line 5


problème de template ou de OC ?
Opencart 2.3.0.3 en fr
Journal 2
Avatar de l’utilisateur
Canou83
Utilisateur enregistré
Utilisateur enregistré
 
Messages: 133
Inscription: 09 Déc 2013, 17:33
Localisation: PACA

PrécédenteSuivante

Retourner vers Soutien

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron