24

Intégrer Prestashop à Joomla : un assemblage contre-nature ? en tout cas un boulot sympa !

2011-04-11 dans Réalisations par vibby

Une des étapes les plus cruciales de la création d’un site Internet, c’est le choix d’une solution technique. On est souvent frustré de devoir faire des sacrifies sur certaines fonctionnalités en faveurs d’autres. Pour Beillevaire, un projet à double contenu (Contenu riche et Vente en ligne), l’agence où je travaille a décider de cumuler les deux solutions : Joomla et Prestashop.

/!\ Attention : Cet article n’est pas vraimenent un tutoriel, il s’agit plutôt de note personelles prises lors du dévelopement d’un projet particulier, afin de pouvoir refaire l’opération sur un autre projet.

Vous ne trouverez pas ici le composant à télécharger tel quel car la version que j’ai fait était basé sur d’anciennes versions de Joomla et Presatashop. Il vous appartient d’adapter ce qui suit à la version en cours.

Aperçu

Quand on connait ces deux solutions open-source, « l’assemblage » semble aboutir à un Frankstein : défiguré et maladroit… Mais en usant d’un bon de bon sens, on arrive à un résultat satisfaisant. La solution que j’ai choisi, c’est l’intégration de Prestashop à l’intérieur de Joomla, comme un simple composant (puis des modules associés). Cela me permet de gérer la mise en page par Joomla, ce qu’il fait bien. Dans ce cas, j’ai gardé indépendant les panneaux d’administration de Prestashop et de Joomla.

D’un manière très empirique j’ai simplement

  • Installer un Joomla de base
  • Créer un composant vierge com_prestashop (par exemple, en s’aidant de http://www.notwebdesign.com/joomla-component-creator/)
  • Installer prestashop dans le dossier du composant, puis vérifier que les deux fonctionnent (indépendamment)
  • Créer les fichiers xml et bootstrap du composant dans le dossier components (A télécharger ici)
  • Créer un élément de menu vers ce composant (en lien de type exterieur : URL du type index.php?option=com_prestashop)
  • Ensuite, tout consiste à essayer de faire fonctionner le composant !

En détails

Autoload

Le premier problème auquel on se heurte, c’est l’autoload : Joomla et Prestashop on chacun le leur. On va donc modifier celui de Joomla (/libraries/loader.php) pour trouver les classes dans prestashop s’il ne les trouve pas ailleurs :

function __autoload($class)
{
if(JLoader::load($class)) {
return true;
}
elseif(!class_exists($class, false)){
$cur_dir=getcwd();
$cur_dir=str_replace("\\administrator","",$cur_dir);
$cur_dir=str_replace("/administrator","",$cur_dir);
if(file_exists($cur_dir.'/components/com_prestashop/classes/'.$class.'.php')){
require_once($cur_dir.'/components/com_prestashop/classes/'.$class.'.php');
return true;
}
}
return false;
}

Et coté Prestashop, on supprime l’autoload, ou mieux, on le conditionne à la pré-existence de la fonction

if(!function_exists('__autoload')){
function __autoload($className)
...
}

A partir de ce moment, vous pouvez essayer de voir ce composant sur le frontend… et suprise ! Ca marche ! (enfin normalement) Mais c’est loin d’être utilisable.

L’intégration visible

Dans ce projet, j’ai tâcher, autant que possible de garder Joomla et Prestashop indépendant l’un de l’autre (avec l’url /joomla/components/com_prestashop pour le Prestashop). C’est pourquoi j’ai beaucoup uttilisé la fonction defined( ‘_JEXEC’ ) qui permet de savoir si on est dans l’exécution de Joomla.

Prestashop utilise l’ingénieux système Smarty pour son moteur de template. Pour pouvoir l’appeller depuis le composant Joomla, il faut le rendre accessible, modifier [joomla]\components\com_prestashop\config\smarty.config.inc.php pour ajouter cette ligne en début de fichier : « global $smarty; ».

Maintenant, on va tâcher de faire apparaitre le site correctement avec ce composant. Pour commencer, il faut détourner le header de Prestashop pour inclure ses appels aux css et js dans Joomla. Pour être pris en compte dans le composant et dans un module Joomla, modifier les deux fichiers \components\com_prestashop\header.php  (après la ligne if(isset($js_files) AND !empty($js_files)) $smarty->assign(‘js_files’, $js_files);,) et \components\com_prestashop\classes\Module.php (au début de la fonction display()) :

if (defined( '_JEXEC' )) {
$document = &JFactory::getDocument();
$document->addCustomTag(Module::hookExec('header'));
 
foreach ($smarty->_tpl_vars['css_files'] as $cssFile => $where) {
$document->addStyleSheet($cssFile);
}
foreach ($smarty->_tpl_vars['js_files'] as $id => $jsFile) {
$document->addScript($jsFile);
}
}

Note : Dans le cas que j’ai réalisé, le mootools inclus dans Joomla a été désactivé au profit de JQuery.

On ne veut pas afficher le header et le footer de Prestashop, il faut conditionner dans \components\com_prestashop\header.php et footer.php les appels aux tpl : ajouter

if (!defined( '_JEXEC' ))

devant

$smarty->display(_PS_THEME_DIR_.'header.tpl');

et

$smarty->display(_PS_THEME_DIR_.'footer.tpl');

A présent, il est temps de faire un grand ménage dans le CSS de Prestashop car il entre en conflit avec celui de Joomla ! Je vous laisse le soin de cette tâche. Pensez surtout a virer les styles « globaux » sur html, body etc.

Gérer URL, liens et rewriting

Dans mon cas, j’ai choisi de fixer les URL de la façon suivante (psp = PrestaShop Page) :

http://[domaine]/[joomla]/index.php?option=com_prestashop&psp=[page_prestashop]&[parametres]

Comme vous le verrez, on utilise de nouvelles constantes lié au nouveau format d’URL. J’ai placé leurs déclarations dans le fichier  [joomla]\components\com_prestashop\config\config.inc.php :

if (defined( '_JEXEC' )) {
define('__PS_BASE_URI_LINK_REWRITE__', '/[joomla]/boutique/');
define('__PS_BASE_URI_LINK__', '/[joomla]/index.php?option=com_prestashop&psp=');
define('__PS_BASE_URI_LINK_SEPARATOR__', '&');
define('__PS_COOKIES_BASE_URI__', '/[joomla]/components/com_prestashop/');
} else {
define('__PS_BASE_URI_LINK_REWRITE__', '/[joomla]/components/com_prestashop/');
define('__PS_BASE_URI_LINK__', '/[joomla]/components/com_prestashop/');
define('__PS_BASE_URI_LINK_SEPARATOR__', '&');
define('__PS_COOKIES_BASE_URI__', '/[joomla]');
}

Par leur nom, vous comprendrez à quoi elle servent. De plus, j’ai prévu les deux cas : hors et dans Joomla. A présent commence le gros boulot : modifier toutes les création de liens et d’URL dans Prestashop.

Il faut modifier « à la dur », tous les liens qui se trouve dans Prestashop :

  • Remplacer dans  com_prestashop\classes\Link.php la chaîne .php? par ‘.__PS_BASE_URI_LINK_SEPARATOR__.’
  • Remplacer dans  com_prestashop\classes\Link.php la chaîne __PS_BASE_URI__ par __PS_BASE_URI_LINK__

Puis modifier  [joomla]\components\com_prestashop\init.php pour remplacer ces lignes

'base_dir' => _PS_BASE_URL_.__PS_BASE_URI__,
'base_dir_ssl' => $protocol_link.$server_host.__PS_BASE_URI__,

par

'base_dir' => _PS_BASE_URL_.__PS_BASE_URI_LINK__,
'base_dir_ssl' => $protocol_link.$server_host.__PS_BASE_URI_LINK__,

Puis ces lignes

'base_dir' => __PS_BASE_URI__,
'base_dir_ssl' => Tools::getHttpHost(true, true).__PS_BASE_URI__,

par

'base_dir' => __PS_BASE_URI_LINK__,
'base_dir_ssl' => Tools::getHttpHost(true, true).__PS_BASE_URI_LINK__,

Il faut aussi nettoyer toutes les URL écrites directement dans les fichiers TPL : modifier tous les fichiers TPL de prestashop pour remplacer .php? par & puis .php » par « 

Les cookies doivent être définis avec le même chemin que celui de Joomla, modifier le fichier [joomla]\components\com_prestashop\classes\Cookie.php en remplçant cette chaine

$this->_path = trim(__PS_BASE_URI__.$path, '/\\').'/';

par

$this->_path = trim(__PS_COOKIES_BASE_URI__.$path, '/\\').'/';

Un autre lien qui n’a pas été modifié, dans le fichier [joomla]\components\com_prestashop\classes\Cookie.php : remplacer cette chaine :

<a href="{$base_dir_ssl}order.php{if $back}?back={$back}{/if}">

par

<a href="{$base_dir_ssl}order{if $back}&back={$back}{/if}">

Rewriting

Il faut ajouter les règles de redirection vers prestashop dans le htaccess de Joomla (aprèes la partie « Rewrite rules to block out some common exploits« ):
De cette manière, on aura des URL bien propres qui commencent par /boutique pour le liens qui pointent sur Prestashop

RewriteRule   ^modules/mod_(.*)$ modules/mod_$1 [L,E]
RewriteRule   ^modules/(.*)$ /components/com_prestashop/modules/$1
RewriteRule   ^themes/(.*)$ /components/com_prestashop/themes/$1

# URL rewriting rules
RewriteRule ^boutique/([a-z0-9]+)\-([a-z0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /components/com_prestashop/img/p/$1-$2$3.jpg [L,E]
RewriteRule ^boutique/([0-9]+)\-([0-9]+)/([_a-zA-Z0-9-]*)\.jpg$ /components/com_prestashop/img/p/$1-$2.jpg [L,E]
RewriteRule ^boutique/([0-9]+)(\-[_a-zA-Z0-9-]*)/([_a-zA-Z0-9-]*)\.jpg$ /components/com_prestashop/img/c/$1$2.jpg [L,E]

RewriteRule ^boutique/lang-([a-z]{2})/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ index.php?Itemid=3&option=com_prestashop&psp=product&id_product=$3&isolang=$1$5 [L,E]
RewriteRule ^boutique/lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ index.php?Itemid=3&option=com_prestashop&psp=product&id_product=$2&isolang=$1$4 [L,E]
RewriteRule ^boutique/lang-([a-z]{2})/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ index.php?Itemid=3&option=com_prestashop&psp=category&id_category=$2&isolang=$1 [QSA,L,E]

RewriteRule ^boutique/([a-zA-Z0-9-]*)/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ index.php?Itemid=3&option=com_prestashop&psp=product&id_product=$2$4 [L,E]
RewriteRule ^boutique/([0-9]+)\-([a-zA-Z0-9-]*)\.html(.*)$ index.php?Itemid=3&option=com_prestashop&psp=product&id_product=$1$3 [L,E]
RewriteRule ^boutique/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ index.php?Itemid=3&option=com_prestashop&psp=category&id_category=$1 [QSA,L,E]

RewriteRule ^boutique/content/([0-9]+)\-([a-zA-Z0-9-]*)(.*)$ index.php?Itemid=3&option=com_prestashop&psp=cms&id_cms=$1 [QSA,L,E]
RewriteRule ^boutique/([0-9]+)__([a-zA-Z0-9-]*)(.*)$ index.php?Itemid=3&option=com_prestashop&psp=supplier&id_supplier=$1$3 [QSA,L,E]
RewriteRule ^boutique/([0-9]+)_([a-zA-Z0-9-]*)(.*)$ index.php?Itemid=3&option=com_prestashop&psp=manufacturer&id_manufacturer=$1$3 [QSA,L,E]

RewriteRule ^boutique/lang-([a-z]{2})/(.*)$ index.php?Itemid=3&option=com_prestashop&psp=$2&isolang=$1 [QSA,L,E]
RewriteRule ^boutique/$ index.php?Itemid=3&option=com_prestashop&Itemid=3 [L,E]

A partir de maintenant, Prestashop dans Joomla devrait fonctionner correctement. Par contre, les utilisateurs ne sont pas du tout « liés ». C’est à dire que si vous placez une zone de connexion Joomla, l’utilisateur ne sera pas connecté sur Prestashop, et vice-versa. Pour synchroniser ces compte (création, modification, changement de mot de passe, login, logout …), j’ai recopié (je sais que ce n’est pas bien :P ) le code de Joomla dans les fonctions de gestion des utilisateurs de Prestashop :

En option : Gestion des utilisateurs

Une chose à penser : Les comptes utilisateurs sont squissés sous Joomla et le seul login possible se fait via Prestashop. Mais quand on se connecte à Prestashop, le composant nous logue simultanément sur Joomla. Cela implique de synchroniser la création et la modification de compte. Autre chose : la durée de session doit être la même dans le deux solutions : dans \components\com_prestashop\classes\Cookie.php pour prestshop et dans l’administration pour Joomla

24 retours jusqu'à maintenant.

  1. Amir dit :

    C’est vraiment du boulot de génie!! je suis fan de votre travail!
    je suis impatient de voir la suite ce cette article. En meme temps je vous demande la permission de traduire votre article, y ramener quelques modifs et le publié sur un de mes blogs.

    Contacter moi par email si vous n’etes pas daccord.

  2. Chevassu Stéphane dit :

    Bonjour.
    Impressionné par votre travail d’intégration, j’essaye de faire de même… logique !

    Je reprend votre méthodologie :

    1 – Installer un Joomla de base
    (OK, j’ai un site actif en Joomla 1.6)

    2 – Créer un composant vierge com_prestashop
    (je l’ai fait à l’aide de http://www.notwebdesign.com/joomla-component-creator/)

    3 – Installer Prestashop dans le dossier du composant, puis vérifier que les deux fonctionnent (Qu’entendez-vous par installer dans le composant ? C’est décompresser l’archive Prestashop dans le dossier com-Prestashop ?)

    4 – Créer les fichiers xml et bootstrap du composant dans le dossier components (A télécharger ici)
    (le fichier que vous proposez en téléchargement est presque identique au composant vierge créé avec component-creator. Comment crée-t-on ce fichier xml ? Avez-vous un lien vers un tuto concernant la création du xml ? Qu’est-ce que le bootstrap ? Pourriez-vous proposer en téléchargement le composant complet (Prestashop + xml + bootstrap) ou bien donner plus d’informations sur cette étapes extrêmement importante qu’est la création d’un composant et de son fichier xml ? Si j’ai bien compris, le fichier xml permet l’installation du composant donc des differents fichier dans la partie frontend et backend ainsi que la création des différentes tables de la bdd et/ou de la bdd spécifique à Prestashop)

    5 – Créer un élément de menu vers ce composant – en lien de type exterieur : URL du type index.php?option=com_prestashop.
    (Je ne suis pas arrivé ici, mais ceci il me semble ne posera pas de problème)

    La suite est à réaliser en suivant vos consignes (modification des fichiers php…etc.
    Merci infiniment de votre aide.
    SC

    • vibby dit :

      Heureux de voir que cela est utile

      3- Par « installer Prestashop », j’entends : transférer les fichiers de base téléchargés et décompréssés de Prestashop dans le dossier du composant, puis lancer la procédure d’installation du Prestashop avec une URL du type [http://domaine.com/joomla/components/com_prestashop/index.php]. Après l’installation, Prestashop doit fonctionner normalement avec cet URL (indépendament de Joomla).

      4- J’ai peut-être été un peu rapide, en effet. Le fichier que je nomme abusivement bootstrap est le fichier de base éxécuté par Joomla quand il affiche ce composant. Je l’ai ajouté à l’archive. Le ficheir XML n’a pas d’importance car l’installation de Prestashop se fait indépendament de Joomla. Le mien est vide en fait. Il pourra être utile pour avoir des paramètres dans Joomla pour ce composant. Ce n’est pas possible de fournir un composant complet car cela necessite de le refaire à chaque nouvelle version de Prestashop (et éventuellement de Joomla aussi), et je n’ai pas le temps pour ça.

      S’il vous manque un détail, redemandez-moi, je n’ai pas bcp de temps pour détailler tout.

      You’re welcome.

      • Chevassu Stéphane dit :

        Merci beaucoup pour ces infos.
        Je teste… et je vous tiens au courant.

        Encore merci.
        SC

  3. Chevassu Stéphane dit :

    C’est à nouveau moi.
    Avec Joomla! 1.6 rien ne fonctionne. Absolument rien car les dossiers ne sont pas les mêmes, ça plante dés l’instal du composant. Un lien externe de type : index.php?option=com_prestashop me rajoute sustématiquement « &Itemid=468″ quand je clique sur le bouton du menu.
    Prestashop ne fonctionne même pas seul, à l’intérieur du composant !!

    Quelle versions de Joomla! et de Prestashop avez-vous utilisées ?
    Je vais ainsi utiliser les mêmes versions pour (tenter) d’utiliser Prestashop dans Joomla!

    Merci.
    SC

    • vibby dit :

      Je l’ai réalisé sur un Joomla 1.5 toujours à sa dernière version, je ne sais plus pour la version Prestashop, mais je ne fais pas les mises à jour.

      En fait, il faut installer le composant complétement vierge, puis le remplir avec Prestashop.
      Il y a peut-etre des changements avec la 1.6, je dois avouer que je n’y ai pas beaucoup touché. Vous avez cherché un générateur de composant pour 1.6 ?

  4. Chevassu Stéphane dit :

    Oui, mais ça ne marche pas non plus.
    J’ai une version en 1.522 de Joomla! pour faire des tests et Prestashop 1.3.5.
    Donc (je vais être un peu long) :

    1 – J’installe depuis le menu de l’admin de Joomla! votre com_prestashop issu du zip et c’est OK!
    2 – Je copie dans com_prestashop les fichiers Prestashop (version 1.3.5) A la fin de l’installe de Prestashop il me demande de supprimer le dossier d’installation et de renommer par sécurité le dossier « admin » en « admin423″. Normalement en tapan …/components/com_prestashop/ la boutique devrais s’afficher, mais il faut impérativement ajouter « index.php » pour y accèder.
    3 – Je crée un lien externe depuis un menu Joomla! : lien = « index.php?option=com_prestashop » (mais là j’ai peut-être faux) et si je clique sur ce lien dans le menu du frontend, il m’affiche dans la barre : « http://localhost:8888/Joomlatest/index.php?option=com_prestashop&Itemid=21″
    4 – si je tape dans la barre : « http://localhost:8888/Joomlatest/components/com_prestashop/ » j’obtiens une page blanche.
    Mais si je rajoute « index.php » ça fonctionne. Donc Prestashop semble fonctionner ?!?!

    Pour les modifications des fichiers Joomla! et Prestashop, vous dites modifier ceci, cela …etc. Mais vous n’êtes pas très précis (vous n’avez pas fais un tutoriel, mais une page d’info sur Prestashop et Joomla! en expliquant que c’était possible.

    Un exemple pour l’autoload. Modif du fichier : « /libraries/loader.php »
    Je colle le code à la fin du fichier car c’est une fonction à ajouter ou je remplace quelque chose ? Et coté Prestashop, vous dites : « on supprime l’autoload, ou mieux, on le conditionne à la pré-existence de la fonction » Wahouu !! J’ai du mal à comprendre.

    if(!function_exists(‘__autoload’)){ <<< à ajouter au dessus de la fonction

    function __autoload($className)


    } <<< à ajouter à la fin de la fonction

    Là je pense avoir compris.
    Si c'est bien celà, ça ne change rien.
    Si je poursuit les modifs des fichier, plus rien ne s'affiche du tout, ni via le menu Joomla ou en direct avec le lien : "http://localhost:8888/Joomlatest/components/com_prestashop/index.php&quot; j'ai une page blanche.

    Vous parlez de Mootools remplacé au profit de JQuery. Faut-il installer un plugin pour avoir JQuery et également un autre plugin pour désactiver Mootools (type JQuery Plugin de corejoomla.com) je ne vois pas comment désactiver Mootools sans entrer dans le code et ça devient vite une usine à gaz, si vous me permettez l'expression !

    Je vais abandonner je pense, c'est dommage, j'aurais aimé avoir ma boutique au couleur du reste de mon site. A moins que vous m'éclairiez plus précisément, ainsi que les autres lecteurs de votre billet qui vont eux aussi se casser les dents (et la tête) sur l'intégration de Prestashop dans Joomla!.

    Merci encore pour votre travail même si je n'en vois pas le résultat concret sur un site en ligne.
    SC

    • vibby dit :

      2- Cela dépent de votre config d’apache, si vous voyez prestashop aec index.php, c’est que ca marche !
      3- Oui, c’est bien cela ! Et PHP devrait cracher une erreur à cause de l’autoload à ce stade
      4- Idem 2

      Je me rend compte en relisant que ce n’est pas très accessible en effet, et que je l’ai fait en ayant la tête dedans. Il faut s’y mettre vraiment pour le faire.

      Pour l’autoload, il faut modifier toute la fonction qui est déjà existante dasn ce fichier

      Si vous avez si systématiquement des pages blanches, c’est sans doute que votre serveur n’est pas configuré en dévelopement, il faut activer l »affichage des erreurs dans php.ini par exemple.

      Concernant Mootools/JQuery, cela fera juste une erreur bloquante js à l’affichage de la page.

      C’est clair que cela reste très technique, et qu’un minimum de connaissance en PHP et en intégration est indispensable.

      Pour voir une site utilisant Prestashop dans Joomla : htp://www.beillevaire.fr

  5. Chevassu Stéphane dit :

    Merci.
    J’avance… l’autoload fonctionne !! Mon lien de menu m’affiche maintenant Prestashop dans Joomla! Le template encadrant Prestashop est un autre template que celui du site (pourquoi, je n’en sais rien mais ça fonctionne). Maintenant il va falloir que Prestashop utilise le template du site.

    Donc, concernant l’intégration proprement dite et la modification des fichiers : Module.php, header.php et footer.php

    1- votre code est mal interprété sur l’affichage de votre site et certain caractères sont affichés en code html : > pour > par exemple.(c’est juste une info pour les copier/coller… il fallait le voir !)
    2- j’ai cherché à le placer juste au début de la fonction display dans Module.php comme vous l’avez expliqué :

    public static function display($file, $template) {

    if (defined( ‘_JEXEC’ )) {
    $document = &JFactory::getDocument();
    $document->addCustomTag(Module::hookExec(‘header’));

    foreach ($smarty->_tpl_vars['css_files'] as $cssFile => $where) {
    $document->addStyleSheet($cssFile);
    }
    foreach ($smarty->_tpl_vars['js_files'] as $id => $jsFile) {
    $document->addScript($jsFile);
    }
    }

    global $smarty;
    $previousTemplate = $smarty->currentTemplate;
    $smarty->currentTemplate = substr(basename($template), 0, -4);
    $smarty->assign(‘module_dir’, __PS_BASE_URI__.’modules/’.basename($file, ‘.php’).’/');
    if (Tools::file_exists_cache(_PS_THEME_DIR_.’modules/’.basename($file, ‘.php’).’/’.$template)){
    $smarty->assign(‘module_template_dir’, _THEME_DIR_.’modules/’.basename($file, ‘.php’).’/');
    $result = $smarty->fetch(_PS_THEME_DIR_.’modules/’.basename($file, ‘.php’).’/’.$template);
    }
    elseif (Tools::file_exists_cache(dirname($file).’/’.$template))
    {
    $smarty->assign(‘module_template_dir’, __PS_BASE_URI__.’modules/’.basename($file, ‘.php’).’/');
    $result = $smarty->fetch(dirname($file).’/’.$template);
    }
    else
    $result = Tools::displayError(‘No template found’);
    $smarty->currentTemplate = $previousTemplate;
    return $result;
    }

    Ça me revoie une erreur : PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 105 bytes) in /Users/imac/Desktop/Site_internet/Joomlatest/components/com_prestashop/classes/Module.php on line 466.

    les boucles foreach semblent tourner sans fin ! Je n’ai pas placé votre code au bon endroit bien sûre… au début de la fonction, c’est vague. Bien que je comprenne à-peu-près comment ça fonctionne, la moindre ligne de code remplacée ou le moindre caractère oublié et plus rien ne marche. Une petite précision de plus serait la bienvenue. Après c’est une histoire de CSS, là je maitrise (le php beaucoup moins) Au moins avec le CSS on sait pourquoi on a mal à la tête à la fin de la journée !

    Sinon pour : « if (defined( ‘_JEXEC’ )) » pour masquer le footer et le header, c’est OK.

    Merci.
    SC

  6. Jean dit :

    Bonjour,
    j’essaie de réaliser votre tuto en local, mais je ne vois pas où modifier l’autoload de prestashop, est-ce dans config/autoload.php?
    Si tel est le cas, j’aurais besoin d’un peu plus de précisions, car, j’ai essayé vos modifications (prestashop 1.4.4) mais rien n’y fait, mon lien joomla vers prestashop m’affiche ceci:

    « This is the default view of your component. To edit it please edit the file: /components/com_prestashop/views/default/tmpl/default.php  »

    Cela dit, merci de partager cette astuce, elle va beaucoup m’aider dès que j’aurai réussi à réaliser toutes les étapes.

  7. vibby dit :

    Bonjour

    J’espere que vous ne galérer. Je vous préviens que ce n’est pas un tuto, mais plutot des notes de bricolage…
    Vous modifier le bon fichier pour l’autoload. Par contre, vous ne semblez pas charger Prestashop. Avez-vous bien téléchager puis remplacer les fichiers de base du composant ?

  8. Jean dit :

    Merci pour votre réponse. Je vais revérifier, mais il me semble que j’ai bien tout remplacé. Je n’en suis en fait encore qu’à l’étape où je devrais voir prestashop à partir du lien. Mais j’ai bien respecté les étapes indiquées jusque là.

  9. Jean dit :

    Je n’avais pas remplacé tous les fichiers. Mais maintenant que c’est réglé, lorsque je clique sur le lien il m’affiche une page blanche.

  10. Jean dit :

    Je dois noter que j’ai le même soucis que Chevassu Stéphane, à savoir que si je n’ajoute pas index.php à l’url de prestashop, j’ai aussi la page blanche. Il doit y avoir un soucis de configuration quelque part.

    • vibby dit :

      Désolé mais je n’ai pas bcp de temps pour voir cela :( Il semble sur Stéphane a reussi à s’en sortir. Donne-t-il des détails ?

  11. [...] Intégrer Prestashop à Joomla : un assemblage contre-nature ? en tout cas un boulot sy… Source: vibby.beauvivre.fr [...]

  12. Gabriel dit :

    Bonjour,
    Avant toute chose, je voulais vous remercier pour avoir partagé vos notes.
    Suite à l’implémentation des appels aux css et js, je me retrouve avec une erreur de type « Undefined index: js_files » et « Warning: Invalid argument supplied for foreach()  » .
    Ces erreurs apparaisse suite à l’exécution de la ligne suivante :

    foreach ($smarty->_tpl_vars['js_files'] as $id => $jsFile) {
    $document->addScript($jsFile);

    Savez-vous d’où pourrait venir cette erreur php ? JQuery ?

    Salutations et merci !
    Gabriel

    • vibby dit :

      C’est une erreur php qui indique que $smarty->_tpl_vars['js_files'] n’est pas un tableau.
      Avez-vous bien déclarer $smarty comme variable globale ?

      Si oui, essayez simplement d’ajouter le test « Ce truc est il un tableau ? » :

      if (is_array($smarty->_tpl_vars['js_files'] )) {
      foreach ($smarty->_tpl_vars['js_files'] as $id => $jsFile) {

      }
      }

      Cette solution ne règle pas réelement le problème mais elle vous débloquera surement.
      Désolé pour la réponse tardive

      • Gabriel dit :

        Bonjour et merci pour votre réponse !

        La variable global $smarty; est bien présente sur la première ligne de smarty.config.inc.php.

        Après avoir rajouter vos quelques lignes ci-dessus, j’ai la deuxième erreur php qui ce règle mais la première est toujours présente !
        « Invalid argument supplied for foreach()”
        ça c’est ok mais il reste toujours le problème “undefined index: js_files ».

        Cette erreur survient après un problème que j’ai avec une boucle sans fin « Maximum function nesting level of ’100′ reached, aborting! » Language.php on line 256 .

        Cette erreur php vient à disparaître si on commente la ligne suivante :
        $output .= call_user_func(array($moduleInstance, ‘hook’.$hook_name), $hookArgs); (Language.php on line 256 .) mais les deux premières erreurs refont leurs apparitions.

        J’ai fait plusieurs tests et j’arrive toujours ou presque au même erreur.

        Screenshot de l’erreur « boucle » : http://imageshack.us/photo/my-images/263/erreurphp.png/

        Salutations et merci !
        Gabriel

    • vibby dit :

      En faisait du boulot pas terrible vous pouvez tout tester comme ça :

      if (is_array($smarty->_tpl_vars )) {
      if (array_key_exists(‘js_files’,$smarty->_tpl_vars )) {
      if (is_array($smarty->_tpl_vars['js_files'] )) {
      foreach ($smarty->_tpl_vars['js_files'] as $id => $jsFile) {

      }
      }
      }
      }

      Sinon (mieux) vous pouvez créer une exception (http://php.net/manual/fr/language.exceptions.php)

      • Gabriel dit :

        Bonjour et merci pour votre dernière réponse, j’ai trouvé la « source » du problème.
        J’ai presque tout fini et il faut dire que ça marche plutôt bien, encore merci.
        Il me reste 3 petits « bogue » récurant et je sais pas si vous avez aussi dû y faire face vous aussi.

        1° C’est surement un problème d’URL parce que quand je tente d’accéder à l’identification ou au compte client j’ai un retour :
        « Fatal error: Class ‘Configuration’ not found in \components\com_prestashop\config\config.inc.php on line 71  » avec ce lien
         » components/com_prestashop/authentication.php?back=my-account.php « .

        2° Faut-il aussi modifier la partie admin du presta pour y accéder où on y arrive avec un simple url ?

        3° Dernière petite chose j’ai une erreur ajax quand je veux ajouter un produit dans le panier : « TECHNICAL ERROR: unable to add the product.
        Details:Error thrown: [object XMLHttpRequest]Text status: parsererror. J’ai activé jQuery et désactivé Mootools avec le plug-in JB Library mais cette erreur persiste.

        Merci pour votre aide et bonnes fêtes.
        Gabriel

    • vibby dit :

      Félicitations ! Je crois que je devrait m’y mettre sérieusement un jour, et proposer un composant prestashop pour Joomla … Je crois que la seule modif qui est necessaire de faire à la main, c’est la modif à l’autoload du joomla. Pour cela, il faudrait idéalement faire les modifs depuis le repository de Prestashop.

      Pour vos soucis :
      1) Attention, je vous conseille de ne pas utiliser le système de login de Joomla, mais celui de Prestashop (c’est l’e-commerce le plus sensible). Est-ce bien le cas ? Si oui, il faudrait modifier la partie qui est ajoutée au login de prestashop, qui gère en même temps le login à Joomla. J’ai très mal (et très vite) réglé cette partie en copiant le code de Joomla qui ouvre une session utilisateur. Il est possible que cette partie du code Joomla est changé …

      2) On arrive à l’admin de presta par l’url http://www.site.com/joomla/components/com_prestashop/admin/

      3) Je ne vois pas d’où cela vient. Concrétement, l’appel en ajax fait référence à une page qui page qui semble planter; essayer de choper l’url demander (dans firebug par exemple), puis appeller l’url dans votre navigateur. Elle devrait être en JSON (du js « compacté »). Vous pouvez trouver des converteurs jsonjs en ligne.

      Bonne continuation :)

Envoyer mon retour






8 - = 5