web-dev-qa-db-fra.com

Magento: comment accéder aux variables personnalisées en PHP?

Je connais les 'variables personnalisées' et leur utilisation avec des {{}} crochets dans les modèles de courrier électronique ainsi que dans les blocs statiques.

Cependant, je souhaite les utiliser dans le code de modèle, à savoir view.phtml.

Je veux pouvoir accéder à la «valeur simple variable» pour récupérer une valeur de conversion, c'est-à-dire un nombre/une chaîne en tant que nombre pour un «code de variable» donné.

18
ʍǝɥʇɐɯ

Je fais cela depuis un certain temps pour créer divers messages modifiables via l'interface d'administration, de sorte que je n'ai pas à fouiller dans le code lorsque le goût du moment change.

Pour accéder à la valeur plain de la variable personnalisée avec le codecustom_variable_code, utilisez ceci:

Mage::getModel('core/variable')->loadByCode('custom_variable_code')->getValue('plain');

REMARQUE: Magasin unique n'affiche pas la liste déroulante de sélection de magasin pour la portée de la variable. Cette réponse n’est pas techniquement correcte, afin de vous préparer au cas où vous auriez plusieurs magasins.

31
Fiasco Labs

Malheureusement, toutes les autres réponses ne sont pas correctes à 100%. Utilisez-le comme ceci (notez la setStoreId() pour obtenir la valeur de la vue magasin correcte):

$value = Mage::getModel('core/variable')
    ->setStoreId(Mage::app()->getStore()->getId())
    ->loadByCode('variable_code')
    ->getValue('text');

Ou pour obtenir la valeur html: 

$value = Mage::getModel('core/variable')
    ->setStoreId(Mage::app()->getStore()->getId())
    ->loadByCode('variable_code')
    ->getValue('html');

Si aucune valeur html n'est définie, getValue() renvoie la valeur textuelle si vous demandez la valeur html.

30

Stackoverflow presque à la rescousse à nouveau. Je pensais que ce serait ça:

Définition d'une variable globale dans Magento, à l'aide d'une interface graphique?

Mais ce n'était pas, c'était:

  $angle = Mage::getModel('core/variable')->loadByCode('angle')->getData('store_plain_value');
10
ʍǝɥʇɐɯ

La seule façon dont je vois que vous pouvez y parvenir est d’avoir une méthode dans le bloc de modèles, qui produira le résultat souhaité.

Par exemple, dans le template view.phtml, vous avez le code suivant:

<div id="title_container">
    <h2><?= $this->getTitle(); ?></h2>
</div>

La fonction peut représenter votre code de variable et toute logique liée à ce qui est affiché dans le titre doit être placée dans le bloc.

Juste pour clarifier, le bloc est la variable $ this

Si vous n'êtes pas sûr du nom de classe réel de votre bloc, vous pouvez faire quelque chose comme:

Mage::log(get_class($this));

dans var/log/system.log, vous imprimerez la classe du bloc de ce modèle.

C'est le meilleur moyen.

HTH :)

1
Gabriel Spiteri

// Pour obtenir la valeur TEXT de la variable personnalisée:

Mage::getModel('core/variable')->setStoreId(Mage::app()->getStore()->getId())->loadByCode('custom_variable_code')->getValue('text');

// Pour obtenir la valeur HTML de la variable personnalisée:

Mage::getModel('core/variable')->setStoreId(Mage::app()->getStore()->getId())->loadByCode('custom_variable_code')->getValue('html');

// L'identifiant du magasin est défini comme variables personnalisées pouvant être modifiées pour plusieurs magasins.

1
gaurangkathiriya

Remarque: une variable personnalisée peut avoir des valeurs différentes pour différents magasins.  

Donc, pour accéder à stocker une valeur spécifique pour la variable personnalisée avec le codecustom_variable_code

Utilisez ceci:

$storeId = Mage::app()->getStore()->getId();

  $custom_variable_text = Mage::getModel('core/variable')->setStoreId($storeId)
                          ->loadByCode('custom_variable_code')
                          ->getValue('text');

  $custom_variable_plain_value = Mage::getModel('core/variable')->setStoreId($storeId)
                                ->loadByCode('custom_variable_code')
                                ->getValue('plain');

  $custom_variable_html_value = Mage::getModel('core/variable')->setStoreId($storeId)
                                ->loadByCode('custom_variable_code')
                                ->getValue('html');
0
Rahul Gupta