kenicki Posted August 7, 2012 Share Posted August 7, 2012 (edited) 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 August 10, 2012 by kenicki (see edit history) Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted August 8, 2012 Share Posted August 8, 2012 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 ? Link to comment Share on other sites More sharing options...
kenicki Posted August 9, 2012 Author Share Posted August 9, 2012 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 Link to comment Share on other sites More sharing options...
imasubmarine Posted August 10, 2012 Share Posted August 10, 2012 (edited) 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 August 10, 2012 by imasubmarine (see edit history) Link to comment Share on other sites More sharing options...
imasubmarine Posted August 10, 2012 Share Posted August 10, 2012 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. Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted August 10, 2012 Share Posted August 10, 2012 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. Link to comment Share on other sites More sharing options...
kenicki Posted August 10, 2012 Author Share Posted August 10, 2012 YES ça marche, merci à vous 2 ! Link to comment Share on other sites More sharing options...
kassh Posted September 28, 2012 Share Posted September 28, 2012 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 Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted October 1, 2012 Share Posted October 1, 2012 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(); Link to comment Share on other sites More sharing options...
kassh Posted October 1, 2012 Share Posted October 1, 2012 OK merci pour tes conseils voici l'adresse du nouveau topic : http://www.prestashop.com/forums/topic/191508-plantage-avec-frontcontrollerphp-dans-loverritajout-de-hook/ Link to comment Share on other sites More sharing options...
kassh Posted October 5, 2012 Share Posted October 5, 2012 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.. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now