Jump to content

[Bug] Prestashop 1.7: Appel d'une page html avec Ajax


Recommended Posts

Bonjour,

J'utilise actuellement Prestashop 1.7.7.4 et ma version PHP est la 7.3, sur un hébergement mutualisé OVH.

Vous pouvez retrouver le site web à l'adresse suivante : https://unmomentchezmeme.fr

J'ai acheté un template qui installe différents modules propres à lui même. Et il se trouve que depuis quelques jours, un bug est apparu sans comprendre pourquoi.

Sur ma page d'accueil, j'ai différents blocs html qui sont chargés par un module "Dor Manager Blocks HTML", avec un fichier ajax.php qui me sert le html dans sa réponse. Ainsi, le contenu de mes pages est enregistrée en BDD dans la table dor_managerblocks_lang. Aussi, mon footer est chargé exactement de la même manière par le module "Dor Manager Blocks Footer".

Tout allait bien jusqu'à présent, sauf que depuis deux jours, les réponses Ajax sont totalement vides. Du coup, ma page d'accueil et mon footer ne sont pas affichés.

Le développeur du thème ne répondant pas, je m'en remets à vous pour essayer de trouver de l'aide..

Ci-dessous, vous retrouverez les différents fichiers appelés pour charger le contenu du module "Dor Manager Blocks HTML" (pour le footer c'est exactement la même méthode d'appel)

classe dor_managerblocks.php

// fonction appelée lors d'un call ajax
public function hookAjaxCall($params) {
    global $smarty, $cookie;
    $varsData = "";
    $hook     = isset($_POST["hook"])?$_POST["hook"]:"";
    if ($hook == "") {return false;
    }

    $staticBlocks = $this->DorCacheManagerBlock($hook, 1);
    $this->smarty->assign(array(
    'staticblocks' => $staticBlocks['data'],
    ));
    $varsData   = $this->display(__FILE__, 'block-item.tpl');
    $dataResult = Tools::jsonEncode($varsData);
    return $dataResult;
}

// une des fonctions appelée pour afficher le contenu sans ajax ?
public function hookblockDorado1($param) {
    $hook         = "blockDorado1";
    $staticBlocks = $this->DorCacheManagerBlock($hook, 0);
    $this->smarty->assign(array(
    'staticblocks' => $staticBlocks['data'],
    'hook'         => $hook,
    'ajaxload'     => $staticBlocks['ajax'],
    'blockPath'    => $this->blockPath,
    ));
    return $this->display(__FILE__, 'block.tpl');
}

 

ajax.php

include(dirname(__FILE__).'/../../config/config.inc.php');
include(dirname(__FILE__).'/../../init.php');
$context = Context::getContext();
$products = Module::getInstanceByName('dor_managerblocks');
echo $products->hookAjaxCall(array('cookie' => $context->cookie, 'cart' => $context->cart));

 

staticblock.js

var DORSTATICBLOCK = {
    init:function(){
        window.addEventListener('load', function (){
            DORSTATICBLOCK.AjaxLoadBlock();
        });
    },
    ReloadProcess:function(){
        var html = "";
        html += '<div class="graph__preloader">';
            html += '<div class="js-preloader preloader">';
              html += '<b class="preloader__bar -bar1"></b>';
              html += '<b class="preloader__bar -bar2"></b>';
              html += '<b class="preloader__bar -bar3"></b>';
              html += '<b class="preloader__bar -bar4"></b>';
              html += '<b class="preloader__bar -bar5"></b>';
            html += '</div>';
        html += '</div>';
        return html;
    },
    AjaxLoadBlock:function(){
        var urlAjax = prestashop.urls.base_url+"modules/dor_managerblocks/ajax.php";
        if(typeof urlAjax != "undefined"){
            var processHtml = DORSTATICBLOCK.ReloadProcess();
            jQuery(".dor-html-block .graph__preloader").remove();
            jQuery(".dor-html-block").append(processHtml);
            jQuery(".dor-html-block").css({
                'position':'relative'
            });
            $(".dor-html-block").each(function(){
                var hook = $(this).attr("data-hook");
                var params = {}
                params.hook = hook;
                jQuery.ajax({
                    url: urlAjax,
                    data:params,
                    type:"POST",
                    success:function(data){
                        setTimeout(function(){
                            var results = JSON.parse(data);
                            jQuery(".dor-html-block[data-hook='"+hook+"'] .graph__preloader").remove();
                            jQuery(results).insertAfter(".dor-html-block[data-hook='"+hook+"']");
                            jQuery(".dor-html-block[data-hook='"+hook+"']").remove();
                            if(typeof DORTHEME != "undefined" && typeof DORTHEME.CountdownHome != "undefined"){
                                DORTHEME.CountdownHome();
                            }
                            if(typeof DORTHEME != "undefined" && typeof DORTHEME.PopupVideo != "undefined"){
                                DORTHEME.PopupVideo();
                            }
                        },300);
                        return false;
                    }
                });
            });
        }
    }
}

jQuery(document).ready(function(){
    DORSTATICBLOCK.init();
});

 

block-item.tpl

 {foreach from=$staticblocks key=key item=block}
  {if $block.active == 1}
	  <p class ="title_block"> {l s={$block.title} } </p>
  {/if}
  {$block.description nofilter}
  {if $block.insert_module == 1}
	{$block.block_module}
   {/if}
 {/foreach}

 

Je vous remercie d'avoir pris le temps de lire mon post, j'espère vraiment que quelqu'un pourra me donner un coup de main !

Link to comment
Share on other sites

4 minutes ago, Mediacom87 said:

Mode debug activé pour avoir peut être un message d'erreur sur le appels ajax ?

Bonjour @Mediacom87 !

J'ai déjà essayé effectivement, je n'ai pas d'erreurs. Status 200, en réponse: "/n/n/n/n" .. Je n'ai aucune erreur c'est bien pour ça que je ne comprends pas !

EDIT: la réponse avec le mode debug activé:

"\n<!-- begin block-item.tpl -->\n \n<!-- end block-item.tpl -->\n"

 

Edited by mysterhyde83
Réponse avec mode débug (see edit history)
Link to comment
Share on other sites

7 minutes ago, Mediacom87 said:

En regardant le code de ce module comme souvent sur les template c'ets un code suranné, donc il faudrait réécrire convenablement ce module pour qu'il fonctionne proprement dans un premier temps et cela faciliterais grandement sa maintenance.

Oui je comprends bien, malheureusement mes compétences en php et js sont assez limitées.. La dernière maj du template date de septembre 2020, je trouve ça inadmissible que ça n'ait pas été changé depuis sa création (2016) .. Faudrait-il refactorer le fichier PHP et le fichier JS ou seulement l'un des deux ?

Link to comment
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
×
×
  • Create New...