Jump to content

Difficultés avec du php


Recommended Posts

Bonsoir,

 

Autre demande, qui ne va pas chercher bien loin je pense.

 

Cela se passe sur mon site http://www.kosmeopolis.com/, qui est en version 1.5.4.1.

 

 

J'ai deux problèmes :

 

 

- le premier via le backoffice où, dans le module de configuration du templace, je voudrais ajouter du php.

 

J'ai des lignes de type :

<li class="item"><a href="mon-lien">mon-texte</a></li>

et je dois changer le a href par quelque chose comme :

<li class="item"><span title=<?php echo base64_encode("mon-lien")?> class="url">mon-texte</span></li>

(ensuite un script mouline le tout pour crypter le lien)

 

Bien entendu, cela ne fonctionne pas !

 

 

- le second, je dois modifier des fichiers tpl (exemple : myaccountfooter) avec des lignes du genre :

<li><a href="mon-lien" title="">mon texte</a></li>

ici encore, je dois mettre ce fameux

<span title=<?php echo base64_encode("mon-lien")?> class="url">mon-texte</span>

J'ai essayé un include mais j'ai dû me tromper et puis, j'aimerais faire cela proprement.

 

 

J'attends vos propositions par MP, merci !

Edited by dkbane (see edit history)
Link to comment
Share on other sites

L'inclusion des balises php est interdite dans Prestashop ou alors on ne respecte plus le MVC (Modèle Vue Controleur)

Vous devez utiliser des variables smarty, assignées dans le controleur correspondant avec la syntaxe suivante:

$this->context->smarty->assign(array(
			'ma_variable' => base64_encode("mon-lien")
));

et l'utiliser dans votre tpl:

<span title={$ma_variable} class="url">mon-texte</span> 

ou dans votre cas assigner une nouvelle fonction à smarty

$smarty->registerPlugin("modifier",'base64_encode',  'base64_encode');

et utiliser celle-ci dans votre tpl

{assign var="mon_url" value='http://mon_url.com'}
{$mon_url|base64_encode}

Mais c'est assez curieux de vouloir encoder une balise title ??? (celle-ci servant d'information, et là vous la cachez^^)

Link to comment
Share on other sites

Bonsoir,

 

Pfiou, c'est technique mais merci beaucoup !!

 

"Vous devez utiliser des variables smarty, assignées dans le controleur correspondant avec la syntaxe suivante:"

=> où dois-je écrire le code présenté ensuite ? (Je suis vraiment nul en php et cie...)

 

Pour aller plus loin, ce que je veux dire c'est que je vois de quoi vous parlez, je comprends à peu près mais il me manque des éléments pour réussir à appliquer ce que vous dites !

Link to comment
Share on other sites

mes deux problèmes sont sur : blockmyaccountfooter.tpl du thème (cf ci-dessous) et sinon dans un module dans le back office.

<!-- Block myaccount module -->
    <div class="blocks span3">
    <p class="p_titre_footer">{l s='My account' mod='blockmyaccountfooter'}</p>
    <ul>
            <li><a href="{$link->getPageLink('history', true)}" title="">{l s='My orders' mod='blockmyaccountfooter'}</a></li>
            <li><a href="{$link->getPageLink('order-slip', true)}" title="">{l s='My credit slips' mod='blockmyaccountfooter'}</a></li>
            <li><a href="{$link->getPageLink('addresses', true)}" title="">{l s='My addresses' mod='blockmyaccountfooter'}</a></li>
            <li><a href="{$link->getPageLink('identity', true)}" title="">{l s='My personal info' mod='blockmyaccountfooter'}</a></li>
            <li><a href="{$wishlist_link}" title="{l s='My wishlists' mod='blockwishlist'}">Mes sélections</a></li>

    </ul>
    </div>

Sinon, pour le module dans le back office ce doit être un peu plus compliqué mais, déjà, si je résouds blockmyaccountfooter ce sera bien :)

Link to comment
Share on other sites

ben vous rajoutez votre assignation dans blockmyaccountfooter.php

	public function hookFooter($params)
	{
		if (!$this->isCached('blockmyaccountfooter.tpl', $this->getCacheId()))
			$this->smarty->assign(array(
                                'mon-title' => base64_encode("http://votre_url"),
				'voucherAllowed' => CartRule::isFeatureActive(),
				'returnAllowed' => (int)Configuration::get('PS_ORDER_RETURN'),
				'HOOK_BLOCK_MY_ACCOUNT' => Hook::exec('displayMyAccountBlockfooter')
			));
		return $this->display(__FILE__, 'blockmyaccountfooter.tpl', $this->getCacheId());
	}

et vous utilisez {$mon-title} dans le tpl

Link to comment
Share on other sites

Bonjour,

 

En premier lieu, j'ai essayé mais aucun lien ne se créé.

 

Mon fichier php contient (j'ai mis echo sur le premier pour tester mais cela ne marche pas non plus - je mets que les 2 premières occurences) :


<?php
public function hookFooter($params)
    {
        if (!$this->isCached('blockmyaccountfooter.tpl', $this->getCacheId()))
            $this->smarty->assign(array(
                                'mon-titlea1' => echo base64_encode("http://www.kosmeopolis.com/historique-des-commandes"),
                'voucherAllowed' => CartRule::isFeatureActive(),
                'returnAllowed' => (int)Configuration::get('PS_ORDER_RETURN'),
                'HOOK_BLOCK_MY_ACCOUNT' => Hook::exec('displayMyAccountBlockfooter')
            ));
        return $this->display(__FILE__, 'blockmyaccountfooter.tpl', $this->getCacheId());
    }
    
public function hookFooter($params)
    {
        if (!$this->isCached('blockmyaccountfooter.tpl', $this->getCacheId()))
            $this->smarty->assign(array(
                                'mon-titlea2' => base64_encode("http://www.kosmeopolis.com/avoirs"),
                'voucherAllowed' => CartRule::isFeatureActive(),
                'returnAllowed' => (int)Configuration::get('PS_ORDER_RETURN'),
                'HOOK_BLOCK_MY_ACCOUNT' => Hook::exec('displayMyAccountBlockfooter')
            ));
        return $this->display(__FILE__, 'blockmyaccountfooter.tpl', $this->getCacheId());
    }

Mon fichier TPL quant à lui contient :

    <div class="blocks span3">
    <p class="p_titre_footer">{l s='My account' mod='blockmyaccountfooter'}</p>
    <ul>
            <li><span title="{$mon_titlea1}" class="url">{l s='My orders' mod='blockmyaccountfooter'}</span></li>
            <li><span title="{$mon_titlea2}" class="url">{l s='My credit slips' mod='blockmyaccountfooter'}</span></li>
            <li><span title="{$mon_titlea3}" class="url">{l s='My addresses' mod='blockmyaccountfooter'}</span></li>
            <li><span title="{$mon_titlea4}" class="url">{l s='My personal info' mod='blockmyaccountfooter'}</span></li>
            <li><span title="$mon_titlea5}" class="url">Mes sélections</span></li>
    </ul>
    </div>

Je suppose que la solution n'est pas loin !

 

 

Sinon, pour répondre à Alexandre : j'ai un scrit dans le header qui fait que le lien est visible si on a javascript, et non-visible sur on a pas javascript (google n'a pas javascript).

Link to comment
Share on other sites

Commencez par enlever le echo (qui ne vous montrera rien de toute façon à cet endroit) et supprimez le fichier cache : cache/smarty/cache/blockmyaccountfooter

 

En effet, si ce fichier existe, le tpl n'est pas régénéré: if (!$this->isCached('blockmyaccountfooter.tpl', $this->getCacheId()))

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...