Mots-clé : var_export

Smarty : dump de variable : écrire une fonction plugin

Vous avez sûrement déjà été confronté au fait de vouloir afficher le contenu d’une variable Smarty.
J’ai décrit la version courte ici.

Maintenant, il peut arriver que l’affichage ne corresponde pas à ce que vous vouliez notamment parce que le print_r() et autre var_dump() affichent des retour chariot.

J’ai donc crée ma fonction plugin, qui fait cela :


  /**
   * Affiche le contenu d'une variable.
   * Utilisation : {dump var=$variable_smarty}
   *
   * @param array $params Tableau de parametres
   * @param object $smarty objet Smarty
   * @return string Le dump
   */
  public function smarty_dump($params,$smarty)
  {
    // Récupération des paramètres
    if (!isset($params['var'])) {
      throw new Exception(
        "dump : paramètre 'var' obligatoire");
    }
    return
      '<pre>'.
      str_replace(
        "\n", "<br />",
        str_replace(
          "\r", "",
          var_export($params['var'],true)
        )
      ).
      '</pre>';
  }

Ensuite, je déclare le plugin à Smarty :

$smarty->registerPlugin('function','dump',
  array($this,'smarty_dump'));

Et dans mon template, je l’appelle ainsi :


<table>
{foreach from=$tab_devis item=a}
  <tr>
    <td>
      {dump var=$a}
    </td>
  </tr>
{/foreach}
</table>

Et l’affichage devient parfait : il est à l’intérieur d’une balise <pre></pre>, avec retour à la ligne <br /> comme il faut.

En espérant que cela serve à des utilisateurs

Php et Smarty : comment simuler print_r(), var_dump() ou var_export()

Si jamais vous utilisez le moteur de templates Smarty, il pourra vous arriver, à un moment ou à un autre, de vouloir afficher le contenu d’une variable Smarty. Rien de plus simple : prenons un exemple concret :

{foreach name=tab_g key=id_g item=item_g from=$tab_garanties}
{/foreach}

Imaginons que vous vouliez afficher ce qu’il y a dans $tab_garanties. Il suffit de faire :

{$tab_garanties|@print_r}

Et c’est tout !

Si vous avez une autre solution, je suis preneur !

Cette idée vient d’ici, mais, comme souvent, comme c’est en anglais, j’aide un peu par mes traductions, la communauté Française.