Jump to content

[RESOLU] Problème FrontController.php


Recommended Posts

Bonjour,

 

J'ai créé un nouveau hook en suivant scrupuleusement la méthode qu'Olivier CLEMENCE décrit sur son blog.

La création du nouveau hook fonctionne très bien par contre depuis, sur certaines pages sendtoafriend-form.php et /cheque/payment.php, j'ai l'erreur suivante :

 

Fatal error: Call to a member function assign() on a non-object in C:\wamp\www\prestashop\override\classes\FrontController.php on line 5

Call Stack

# Time Memory Function Location

1 0.0219 251856 {main}( ) ..\sendtoafriend-form.php:0

2 0.0826 4007464 sendToAFriend2->displayPageForm( ) ..\sendtoafriend-form.php:32

3 0.0830 4010120 include( 'C:\wamp\www\prestashop\header.php' ) ..\sendtoafriend2.php:72

4 0.0852 4276992 FrontController->displayHeader( ) ..\header.php:34

 

Lorsque que je supprime ou renomme le fichier FrontController.php qui doit être créé dans ce tutorial, tout fonctionne correctement...

 

Est-ce que quelqu'un peut m'aider ?

Merci

Edited by kenicki (see edit history)

Share this post


Link to post
Share on other sites

Bonjour Kenicki, voici quelques questions:

 

- As-tu une version en ligne de ta boutique où l'on peut voir l'erreur ?

- As-tu bien créer le fichier "FrontController.php" dans le dossier "override/classes" ?

- Vérifie que le nom de ton hook est bien unique, peut être as-tu utiliser un nom de hook déjà existant qui serait alors appelé sur certaine page.

- Peux-tu nous montrer le code du module que tu souhaite accrocher à ton nouveau hook ?

Share this post


Link to post
Share on other sites

Merci maniT4c pour ta réponse, voila quelques précisions :

 

- Ma boutique n'est pas encore en ligne...

- mon fichier FrontController.php a bien été créé dans le répertoire "override/classes"

(Il y a d'ailleurs dans ce répertoire une fichier nommé "_FrontController.php")

- Le nom de mon hook est unique

- Le module que j'utilise dans ce nouveau hook est la navigation à facette dont voici le code

 

<!-- Block layered navigation module -->
{if $nbr_filterBlocks != 0}
<script type="text/javascript">
current_friendly_url = '#{$current_friendly_url}';
{if version_compare($smarty.const._PS_VERSION_,'1.5','>')}
param_product_url = '#{$param_product_url}';
{else}
param_product_url = '';
{/if}
</script>
<div id="layered_block_left" class="block">
<h4>{l s='Catalog' mod='blocklayered'}</h4>
<div class="block_content">
 <form action="#" id="layered_form">
  <div>
   {if isset($selected_filters) && $n_filters > 0}
   <div id="enabled_filters">
 <span class="layered_subtitle" style="float: none;">{l s='Enabled filters:' mod='blocklayered'}</span>
 <ul>
 {foreach from=$selected_filters key=filter_type item=filter_values}
  {foreach from=$filter_values key=filter_key item=filter_value name=f_values}
   {foreach from=$filters item=filter}
    {if $filter.type == $filter_type && isset($filter.values)}
	 {if isset($filter.slider)}
	  {if $smarty.foreach.f_values.first}
	   <li>
	    <a href="#" rel="layered_{$filter.type}_slider" title="{l s='Cancel' mod='blocklayered'}">x</a>
	    {$filter.name|escape:html:'UTF-8'} ({$filter.unit|escape:html:'UTF-8'}){l s=':' mod='blocklayered'}
	    {$filter.values[0]|escape:html:'UTF-8'} -
	    {$filter.values[1]|escape:html:'UTF-8'}
	   </li>
	  {/if}
	 {else}
	  {foreach from=$filter.values key=id_value item=value}
	   {if $id_value == $filter_key && !is_numeric($filter_value) && ($filter.type eq 'id_attribute_group' || $filter.type eq 'id_feature') || $id_value == $filter_value && $filter.type neq 'id_attribute_group' && $filter.type neq 'id_feature'}
	    <li>
		 <a href="#" rel="layered_{$filter.type_lite}_{$id_value}" title="{l s='Cancel' mod='blocklayered'}">x</a>
		 {$filter.name|escape:html:'UTF-8'}{l s=':' mod='blocklayered'} {$value.name|escape:html:'UTF-8'}
	    </li>
	   {/if}
	  {/foreach}
	 {/if}
    {/if}
   {/foreach}
  {/foreach}
 {/foreach}
 </ul>
   </div>
   {/if}
   {foreach from=$filters item=filter}
 {if isset($filter.values)}
  {if isset($filter.slider)}
  <div class="layered_{$filter.type}" style="display: none;">
  {else}
  <div>
  {/if}
  <span class="layered_subtitle">{$filter.name|escape:html:'UTF-8'} {if isset($filter.unit)}({$filter.unit|escape:html:'UTF-8'}){/if}</span>
  <span class="layered_close"><a href="#" rel="ul_layered_{$filter.type}_{$filter.id_key}">v</a></span>
  <div class="clear"></div>
  <ul id="ul_layered_{$filter.type}_{$filter.id_key}">
  {if !isset($filter.slider)}
   {if $filter.filter_type == 0}
    {foreach from=$filter.values key=id_value item=value name=fe}
	 {if $value.nbr || !$hide_0_values}
	 <li class="nomargin {if $smarty.foreach.fe.index >= $filter.filter_show_limit}hiddable{/if}">
	  {if isset($filter.is_color_group) && $filter.is_color_group}
	   <input class="color-option {if isset($value.checked) && $value.checked}on{/if} {if !$value.nbr}disable{/if}" type="button" name="layered_{$filter.type_lite}_{$id_value}" rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr}disabled="disabled"{/if} style="background: {if isset($value.color)}{if file_exists($smarty.const._PS_ROOT_DIR_|cat:"/img/co/$id_value.jpg")}url(img/co/{$id_value}.jpg){else}{$value.color}{/if}{else}#CCC{/if};" />
	   {if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
	  {else}
	   <input type="checkbox" class="checkbox" name="layered_{$filter.type_lite}_{$id_value}" id="layered_{$filter.type_lite}{if $id_value || $filter.type == 'quantity'}_{$id_value}{/if}" value="{$id_value}{if $filter.id_key}_{$filter.id_key}{/if}"{if isset($value.checked)} checked="checked"{/if}{if !$value.nbr} disabled="disabled"{/if} />
	  {/if}
	  <label for="layered_{$filter.type_lite}_{$id_value}"{if !$value.nbr} class="disabled"{else}{if isset($filter.is_color_group) && $filter.is_color_group} name="layered_{$filter.type_lite}_{$id_value}" class="layered_color" rel="{$id_value}_{$filter.id_key}"{/if}{/if}>
	   {if !$value.nbr}
	   {$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}
	   {else}
	   <a href="{$value.link}" rel="{$value.rel}">{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}</a>
	   {/if}
	  </label>
	 </li>
	 {/if}
    {/foreach}
   {else}
    {if $filter.filter_type == 1}
    {foreach from=$filter.values key=id_value item=value name=fe}
	 {if $value.nbr || !$hide_0_values}
	 <li class="nomargin {if $smarty.foreach.fe.index >= $filter.filter_show_limit}hiddable{/if}">
	  {if isset($filter.is_color_group) && $filter.is_color_group}
	   <input class="radio color-option {if isset($value.checked) && $value.checked}on{/if} {if !$value.nbr}disable{/if}" type="button" name="layered_{$filter.type_lite}_{$id_value}" rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr}disabled="disabled"{/if} style="background: {if isset($value.color)}{if file_exists($smarty.const._PS_ROOT_DIR_|cat:"/img/co/$id_value.jpg")}url(img/co/{$id_value}.jpg){else}{$value.color}{/if}{else}#CCC{/if};"/>
	   {if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
	  {else}
	   <input type="radio" class="radio layered_{$filter.type_lite}_{$id_value}" name="layered_{$filter.type_lite}{if $filter.id_key}_{$filter.id_key}{else}_1{/if}" id="layered_{$filter.type_lite}{if $id_value || $filter.type == 'quantity'}_{$id_value}{if $filter.id_key}_{$filter.id_key}{/if}{/if}" value="{$id_value}{if $filter.id_key}_{$filter.id_key}{/if}"{if isset($value.checked)} checked="checked"{/if}{if !$value.nbr} disabled="disabled"{/if} />
	  {/if}
	  <label for="layered_{$filter.type_lite}_{$id_value}"{if !$value.nbr} class="disabled"{else}{if isset($filter.is_color_group) && $filter.is_color_group} name="layered_{$filter.type_lite}_{$id_value}" class="layered_color" rel="{$id_value}_{$filter.id_key}"{/if}{/if}>
	   {if !$value.nbr}
	    {$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}</a>
	   {else}
	    <a href="{$value.link}" rel="{$value.rel}">{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}</a>
	   {/if}
	  </label>
	 </li>
	 {/if}
    {/foreach}
    {else}
	 <select class="select" {if $filter.filter_show_limit > 1}multiple="multiple" size="{$filter.filter_show_limit}"{/if}>
	  <option value="">{l s='No filters' mod='blocklayered'}</option>
	  {foreach from=$filter.values key=id_value item=value}
	  {if $value.nbr || !$hide_0_values}
	   <option style="color: {if isset($value.color)}{$value.color}{/if}" id="layered_{$filter.type_lite}{if $id_value || $filter.type == 'quantity'}_{$id_value}{/if}" value="{$id_value}_{$filter.id_key}" {if isset($value.checked) && $value.checked}selected="selected"{/if} {if !$value.nbr}disabled="disabled"{/if}>
	    {$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}</a>
	   </option>
	  {/if}
	  {/foreach}
	 </select>
    {/if}
   {/if}
  {else}
   {if $filter.filter_type == 0}
    <label for="{$filter.type}">{l s='Range:' mod='blocklayered'}</label> <span id="layered_{$filter.type}_range"></span>
    <div class="layered_slider_container">
	 <div class="layered_slider" id="layered_{$filter.type}_slider"></div>
    </div>
    <script type="text/javascript">
    {literal}
	 var filterRange = {/literal}{$filter.max}-{$filter.min}{literal};
	 var step = filterRange / 100;
	 if (step > 1)
	  step = parseInt(step);
	 addSlider('{/literal}{$filter.type}{literal}',{
	  range: true,
	  step: step,
	  min: {/literal}{$filter.min}{literal},
	  max: {/literal}{$filter.max}{literal},
	  values: [ {/literal}{$filter.values[0]}{literal}, {/literal}{$filter.values[1]}{literal}],
	  slide: function( event, ui ) {
	   stopAjaxQuery();
	   $('#layered_{/literal}{$filter.type}{literal}_range').html(ui.values[ 0 ] + ' - ' + ui.values[ 1 ]);
	  },
	  stop: function () {
	   reloadContent();
	  }
	 }, '{/literal}{$filter.unit}{literal}');
    {/literal}
    </script>
   {else}
    {if $filter.filter_type == 1}
    <li class="nomargin">
	 {l s='From' mod='blocklayered'} <input class="layered_{$filter.type}_range layered_input_range_min layered_input_range" id="layered_{$filter.type}_range_min" type="text" value="{$filter.values[0]}"/>
	 <span class="layered_{$filter.type}_range_unit">{$filter.unit}</span>
	 {l s='to' mod='blocklayered'} <input class="layered_{$filter.type}_range layered_input_range_max layered_input_range" id="layered_{$filter.type}_range_max" type="text" value="{$filter.values[1]}"/>
	 <span class="layered_{$filter.type}_range_unit">{$filter.unit}</span>
	 <script type="text/javascript">
	 {literal}
	  $('#layered_{/literal}{$filter.type}{literal}_range_min').attr('limitValue', {/literal}{$filter.min}{literal});
	  $('#layered_{/literal}{$filter.type}{literal}_range_max').attr('limitValue', {/literal}{$filter.max}{literal});
	 {/literal}
	 </script>
    </li>
    {else}
    {foreach from=$filter.list_of_values  item=values}
	 <li class="nomargin {if $filter.values[1] == $values[1] && $filter.values[0] == $values[0]}layered_list_selected{/if} layered_list" onclick="$('#layered_{$filter.type}_range_min').val({$values[0]});$('#layered_{$filter.type}_range_max').val({$values[1]});reloadContent();">
	  - {l s='From' mod='blocklayered'} {$values[0]} {$filter.unit} {l s='to' mod='blocklayered'} {$values[1]} {$filter.unit}
	 </li>
    {/foreach}
    <li style="display: none;">
	 <input class="layered_{$filter.type}_range" id="layered_{$filter.type}_range_min" type="hidden" value="{$filter.values[0]}"/>
	 <input class="layered_{$filter.type}_range" id="layered_{$filter.type}_range_max" type="hidden" value="{$filter.values[1]}"/>
    </li>
    {/if}
   {/if}
  {/if}
  {if count($filter.values) > $filter.filter_show_limit && $filter.filter_show_limit > 0 && $filter.filter_type != 2}
   <span class="hide-action more">{l s='Show more' mod='blocklayered'}</span>
   <span class="hide-action less">{l s='Show less' mod='blocklayered'}</span>
  {/if}
  </ul>
 </div>
 <script type="text/javascript">
 {literal}
  $('.layered_{/literal}{$filter.type}{literal}').show();
 {/literal}
 </script>
 {/if}
   {/foreach}
  </div>
  <input type="hidden" name="id_category_layered" value="{$id_category_layered}" />
  {foreach from=$filters item=filter}
   {if $filter.type_lite == 'id_attribute_group' && isset($filter.is_color_group) && $filter.is_color_group && $filter.filter_type != 2}
 {foreach from=$filter.values key=id_value item=value}
  {if isset($value.checked)}
   <input type="hidden" name="layered_id_attribute_group_{$id_value}" value="{$id_value}_{$filter.id_key}" />
  {/if}
 {/foreach}
   {/if}
  {/foreach}
 </form>
</div>
<div id="layered_ajax_loader" style="display: none;">
 <p><img src="{$img_ps_dir}loader.gif" alt="" /><br />{l s='Loading...' mod='blocklayered'}</p>
</div>
</div>
{else}
<div id="layered_block_left" class="block">
<div class="block_content">
 <form action="#" id="layered_form">
  <input type="hidden" name="id_category_layered" value="{$id_category_layered}" />
 </form>
</div>
<div style="display: none;">
 <p style=""><img src="{$img_ps_dir}loader.gif" alt="" /><br />{l s='Loading...' mod='blocklayered'}</p>
</div>
</div>
{/if}
<!-- /Block layered navigation module -->

 

Merci d'avance pour ton aide

Share this post


Link to post
Share on other sites

Bonjour,

 

Je ne pense pas que le problème vienne du module mais plutôt de l'override du frontController.

J'ai le même soucis avec les modules blockwishlist et mailalerts. ( PS 1.4.8.2 )

J'utilise la fonction suivante dans l'override :

 

public function displayHeader()
   {
       self::$smarty->assign(array(
       'HOOK_TOP_META_LEFT' => Module::hookExec('topMetaLeft'),
       'HOOK_TOP_META_RIGHT' => Module::hookExec('topMetaRight')
       ));
       return parent::displayHeader();
   }

 

et j'ai bien l'erreur suivante Call to a member function assign() on a non-object pour la ligne 3 du code ci-dessus.

Par ailleurs aucun problème avec les autres modules.

 

qqun à une idée ?

Edited by imasubmarine (see edit history)

Share this post


Link to post
Share on other sites

Problème résolu pour moi en modifiant l'override comme ci-dessous :-) :

public function displayHeader()
{
	if (!self::$initialized)
		parent::init();
	self::$smarty->assign(array(
	'HOOK_TOP_META_LEFT' => Module::hookExec('topMetaLeft'),
	'HOOK_TOP_META_RIGHT' => Module::hookExec('topMetaRight')
	));
	return parent::displayHeader();
}

 

Que qqun me corrige svp si ce n'est pas la bonne manière de procéder.

Share this post


Link to post
Share on other sites

Bon Smarty semble clairement pas initialisé essaye d'ajouter ça au début de ta fonction displayHeader

if (!self::$initialized)
	    $this->init();

Dit nous si ça fonctionne (j'ai pas pu tester)

 

Ah ben lol j'avais pas rafraîchit ma page du coup j'ai répondu la même echose que toi.

Share this post


Link to post
Share on other sites

  • 1 month later...

Bonjour,

 

Alors moi j'ai un souci dès que je met le fichier FrontController.php dans override/classes mon site n'est plus accessible en frontOffice

(je suis en version 1.4.9)

 

voici le code de mon FrontController.php :

 

<?php

class FrontController extends FrontControllerCore {
public function displayHeader()
{
if (!self::$initialized)
parent::init();
self::$smarty->assign(array(
'HOOK_HOMETOP' => Module::hookExec('homeTop')
));
return parent::displayHeader();
}
}

 

Pour les autre étapes j'ai bien suivit la méthode d'Olivier CLEMENCE

 

merci si vous avez une idée du problème

Share this post


Link to post
Share on other sites

Bonjour Kassh,

tu devrais ouvrir un nouveau post pour deux raisons:

1. ton problème semble différent de celui de kenicki

2. le post étant noté comme résolu tu auras peux de monde qui viendra t'aider.

 

Sur mon blog tu précise que tu as une erreur serveur, peux-tu nous donner la phrase exacte ?

 

Tu as peut-être une boucle qui se forme dans ton php et du coup le serveur plante.

Essai de supprimer la ligne

if (!self::$initialized)
parent::init();

Share this post


Link to post
Share on other sites

Je reviens ici car je suis toujours bloqué sur mon FrontController.php qui veux pas fonctionner

j'ai mis un post mais personne ne semble sen préoccuper du coup si quelqu'un suit encore cette page veut-il bien a voir la gentilles de de jeter un rapide coup d'oeil? Merci. Rien que pour me donner des piste car je suis vraiment bloquer depuis une semaine la dessus et rien à se sujet sur le net..

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More