THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Pour afficher de petits drapeaux correspondants aux langues respectives, j'ai tenté ceci :

{loop type="lang" name="lang_available" exclude="{lang attr="id"}"}
	<a href="{url path="{navigate to="current"}" lang={$LOCALE}}">
	<img src="{image file='/assets/images/{$CODE}'}.png" alt="{$TITLE}" /></a>
{/loop}

Ça ne fonctionne pas. Il semble qu'utiliser la varaible de sortie {$CODE} dans la déclaration {image... soit prohibé.

Comment obtenir le chemin du répertoire par défaut des assets ?
On pourrait ainsi écrire :

{loop type="lang" name="lang_available" exclude="{lang attr="id"}"}
	<a href="{url path="{navigate to="current"}" lang={$LOCALE}}">
	<img src="{$dossiers_assets}{$CODE}.png" alt="{$TITLE}" /></a>
{/loop}

Last edited by anti-conformiste (12-08-2017 10:02:39)

Offline


Le problème vient des simples quotes dans {image file='/assets/images/{$CODE}'}, qui sont traitées comme en PHP. Par exemple, si $CODE vaut abc.jpg, alors :
- avec des simples quotes '/assets/images/{$CODE}', la chaine de caractère résultantes est /assets/images/{$CODE}. Les variables ne sont pas évaluées.
- avec des doubles quotes "/assets/images/{$CODE}", la chaine de caractère résultantes est /assets/images/abcj.jpg. Les variables sont évaluées.

Plus de détails dans la doc Smarty sur l'évaluation des variables: https://www.smarty.net/docs/en/language … quotes.tpl

Donc <img src="{image file="/assets/images/{$CODE}"}.png" alt="{$TITLE}" /> devrait faire la blague smile (un exemple dans le back-office)

Par contre, <img src="{$dossiers_assets}{$CODE}.png" alt="{$TITLE}" /> n'a pas de sens (d'où sort cette variable $dossiers_assets ?) En effet, le dossier des assets d'un template n'est en général pas accessible au navigateur, parce qu'il n'est pas publié. En effet il est très fortement recommandé de faire pointer la racine de la boutique dans /web, et pas dans /, afin de publier que le strict minimum des fichiers de Thelia.

Je ne résiste pas au plaisir de redonner le lien vers les fonctions de gestion des assets wink http://doc.thelia.net/en/documentation/ … -templates


OpenStudio Toulouse

Offline


roadster31 wrote:

Le problème vient des simples quotes ...
[...]
Plus de détails dans la doc Smarty sur l'évaluation des variables: https://www.smarty.net/docs/en/language … quotes.tpl

C'est bien noté. entre " et ' , on ne m'y prendra plus désormais. En fait, comme il y avait déjà des doubles quotes pour l'attribut src, j'ai eu peur que l’interprétation s’arrête à la suivante, c-à-d  la : <img src="{image file="
Mais si j'ai bien compris, le parseur interprète d'abord le code smarty.

roadster31 wrote:

Donc <img src="{image file="/assets/images/{$CODE}"}.png" alt="{$TITLE}" /> devrait faire la blague smile (un

Oui, ça le fait. Sauf que il faut mettre le .png dans l'accolade sinon, ça marche po... wink (je comprends pas bien pourquoi là d'ailleurs.

<img src="{image file="/assets/images/{$CODE}.png"}" alt="{$TITLE}" /></a>
roadster31 wrote:

Par contre, <img src="{$dossiers_assets}{$CODE}.png" alt="{$TITLE}" /> n'a pas de sens (d'où sort cette variable $dossiers_assets ?) En effet, le dossier des assets d'un template n'est en général pas accessible au navigateur, parce qu'il n'est pas publié. En effet il est très fortement recommandé de faire pointer la racine de la boutique dans /web, et pas dans /, afin de publier que le strict minimum des fichiers de Thelia.

Oui, j'ai cherché un "truc" improbable en désespoir de cause smile

roadster31 wrote:

Je ne résiste pas au plaisir de redonner le lien vers les fonctions de gestion des assets wink http://doc.thelia.net/en/documentation/ … -templates

Nan, la franchement, la doc elle est toujours ouverte en même temps que je développe un site, c'est pas bien de se moquer tongue
Je comprends cela dit que tu remette le lien par rapport à ma tentative désespéré de trouver une solution en imaginant une variable {$dossiers_assets} wink

Merci pour ton aide !

Offline


Oui, ça le fait. Sauf que il faut mettre le .png dans l'accolade sinon, ça marche po... wink (je comprends pas bien pourquoi là d'ailleurs.

Oups.

Alors oui, ça ne marche pas, car la gestion des assets détecte que le fichier image n'existe pas. En mode dev, une exception est levée, et on arrive à se rendre compte du problème. En mode prod, la fonction {image} renvoie une chaine vide, donc tu te retrouve avec un <img src="" alt="Le titre" />.

Du coup, quand tu bosses sur ton template, tu peux le faire en mode dev, ça aide pour ce genre de problème.


OpenStudio Toulouse

Offline


En effet, je n'ai pas eu le réflexe de regarder à travers index_dev.php. C'est un conseil que je retiens.

Merci Roadster.