Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[résolu] Conflit entre {$lang} et CGCalendar
#1

Citation :#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~
#~ Version du CMS -MLE- : 1.8.2
#~ Nom de l'hébergeur : OVH
#~ Informations Système :
#~~~~~ NE PAS SUPPRIMER CE BLOC ~~~~~

Bonjour!

Je suis en train de créer un site en MLE (1.8.2 toliara) et pour gérer certains titres que j'ai sous forme d'image, j'utilise la petite astuce suivante :pour que ces images changent lorsque le site change de langue:
ex : <img src="mon-image-{$lang}.jpg" alt="..."/>, j'ai ensuite nommé mes images de la manière suivante : "mon-image-fr_FR.jpg", "mon-image-en_US.jpg" etc... Bref ca fonctionne super bien... Du moment que le module CGCalendar n'est pas inséré dans la page!

En effet, lorsque j'ajoute la balise du module dans une page ou un gabarit, le paramètre "lang" de mes extensions d'images se transforme en "Array" soit :
"mon-image-Array.jpg"

(Version de CGCalendar :1.5.5)

J'ai remarqué que CGcalendar utilise également la balise {$lang} dans ses templates, j'imagine donc qu'il y a une (sombre) histoire de conflits... Quelqu'un connait-il une solution pour éviter ce type de conflits?

Merci!
#2

Jamais entendu de tel conflit entre ces deux parties... Tu as essayé de voir sur le forum anglais ? ça serait curieux que tu sois le premier à te prendre une telle horreur :/

Une solution sauvage mais efficasse serait de redéfinir toi même le $lang du MLE en $mleLang

dès le début de ton gabarit tu ferrais ceci

{capture name=mleLang}{$lang}{/capture}

ensuite tu fais appel à {$mleLang} dans le reste de ton gabarit
#3

Il me semble que ce $lang a la même valeur (fr_FR et autres), je ne vois donc pas le problème.
#4

Re!

Merci pour les réponses rapides!

Alors je viens de tester la solution à Bess mais malheureusement, ca ne fonctionne pas.
Quand je regarde avec firebug, je n'ai certes plus "Array" à la fin de l'extension, en fait il n'y a simplement rien (ex: monimage-.jpg). Je précise que j'ai inséré {capture name=mleLang}{$lang}{/capture} en tout début de gabarit, puis j'ai testé après {process_pagedata}, mais sans succès...

Jean le Chauve => Je n'ai certes pas les connaissances suffisantes pour affirmer noir sur blanc que le conflit a lieu entre {lang} et CGCalendar, quoi qu'il soit, ce problème ne survient que lorsque le module d'agenda est appelé.
#5

Effectivement, je viens de tester et $lang vaut une array.
Solution rapide : utiliser Attribut supplémentaire 1 de la page : {assign var='langage' value=fr_FR} dans les pages françaises.
Et appeler ton image avec {$langage}
#6

Je viens de tester cette solution. Lorsque j'ajoute {assign var='langage' value=fr_FR} en attribut supplémentaire 1 de la page, rien ne se passe : le code généré est : <img src="monimage-.jpg"/>.
Par contre, Lorsque j'ajouter le code en "Balises Smarty spécifiques pour cette page :", ca fonctionne... Mais mon image reste en français, peu importe la langue, puisque apparement on ne peut pas définir des balises Smarty spécifiques pour les différentes langues d'une même page.
J'ai posté sur le forum en anglais, j'attends des retours... Si j'ai une solution je la posterai ici...
#7

Bon réponse de calguy1000 en personne...
We do not support CMSMS MLE.

http://forum.cmsmadesimple.org/index.php...803.0.html

Comme ca c'est clair!!! Bon ben je sens que je vais utiliser du texte à la place de mes images...
#8

Alors tu écris fr_FR directement dans l'attribut supplémentaire et tu récupères ainsi :
image{$content_obj->mProperties->mPropertyValues.extra1}
#9

Merci Jean le Chauve, malheureusement cette action va ajouter "fr_FR" à toutes mes images, peu importe la langue.
Pour rappel, avec le MLE, c'est la même page qui est générée pour toutes les langues. Je veux dire, les attributs de page restent les mêmes que la page s'affiche en Français ou autre, non?

Du coup, je ne vois pas trop comment je pourrai paramétrer cela sans utiliser de condition {if}?
J'ai essayé d'insérer dans le gabarit une condition par langue (j'utilise le français, l'italien, le portugais et l'anglais) comme cela :
{if $lang=="fr_FR"}<img src="monimage-fr_FR.jpg"/>{/if} {if $lang=="it_IT"}<img src="monimage-it_IT.jpg"/>{/if} etc..
Seulement 1. ca ne fonctionne pas (surement pb de syntaxe?) et 2. j'utilise encore "$lang" donc à priori si mon code était interprété correctement il génèrerait Array?
#10

Par rapport à ma dernière proposition, la syntaxe est bonne, c'est juste que le conflit fait qu'aucun code n'est généré... Il faut donc que je trouve une alternative à {$lang}.

Dommage que la proposition de Bess ne fonctionne pas, parce-que en théorie ca aurait pu régler mon problème.
#11

nicks a écrit :Merci Jean le Chauve, malheureusement cette action va ajouter "fr_FR" à toutes mes images, peu importe la langue.
Pour rappel, avec le MLE, c'est la même page qui est générée pour toutes les langues. Je veux dire, les attributs de page restent les mêmes que la page s'affiche en Français ou autre, non?
Les contenus de chaque langue sont stockés dans des champs différents de la table content_props, que tu as dû créer lors de l'installation du MLE.
Regarde un peu si les champs extra sont uniques ou s'il y en a un pour chaque langue, n'ayant plus de mle sous la main.
Et la variable $parent_lang n'existe plus ?
#12

Fais un {get_template_vars}, cette variable doit bien exister quelque part si tu vois dans les métas lang="fr_FR" et nl_NL pour l'autre page.
#13

Malheureusement les champs extra sont uniques. Changer de langue se fait par une liste déroulante, un peu comme on change de gabarit : les autres paramètres ne changent pas.

Concernant la configuration du MLE, je n'ai trouvé que deux onglets dans "Paramètres Globaux" :
MLE Languages, ou je sélectionne les langues à installer
MLE Settings, très pauvres en options :
Cases à cocher :
Force initial calling to DEFAULT_LANG:
Show from DEFAULT_LANG if current lang is not ready:
Use root_url for Default page (there is a problem on few php-cgi installations):

Champs texte :
Opacity text replace (IE > 6 only!):
Opacity flags percent:
Il n'y a pas de lien du type "à propos".

Je pense à une autre alternative (j'ai plus rien à perdre! Wink ) mais les paramètres de l'URL Rewrite me génère un code de type :
www.mondomaine.eu/fr_FR/mapage, www.mondomaine.eu/it_IT/mapage etc...

N'y aurait-il pas un moyen de récupérer la variable de l'url et faire quelque chose du type "si l'url affiche fr_FR" : on affiche l'image avec pour extension fr_FR" ?
#14

Pas con du tout : il y a get_url().
Je regarde et je te dis quoi.
#15

Installe CGSimpleSmarty :
Available Functions:
self_url([$assign])
Return the current URL

Arguments:

[$assign] - (optional) The name of a variable to assign the results to.
#16

Et la fonction if strpos('/fr/', $assign) > 0 qui te permet de savoir si /fr/ est dedans : http://be2.php.net/manual/fr/function.strpos.php
#17

Ok j'ai installé le module, par contre je ne vois pas trop comment ca marche.. Je vais regarder des exemples d'application et puis je reviendrais poster un truc (surement foireux) Smile
Merci!
#18

Sans CGSimple, tu peux créer une udt :
Code :
$pageURL = 'http';
$lang = '';
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
if (strpos($pageURL, '/fr_FR/') > 0) $lang = 'fr_FR';
elseif (strpos($pageURL, '/it_IT/') > 0) $lang = 'it_IT';
elseif (strpos($pageURL, '/en_US/') > 0) $lang = 'en_US';
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty->assign('suffixeImage', $lang);

Dans le gabarit :
Code :
{nomUdt}<img src="tonimage_{$suffixeImage}" />
#19

BINGO!
Merci mille fois Jean le Chauve, ca marche nickel avec la balise utilisateur! Smile
J'ai juste rajouté le portugais et modifier les paramètres de l'anglais (bizarrement dans l'URL c'est "en_USA" alors que partout ailleurs c'est "en_US") mais bon rien de très méchant!

Pour info, je poste quand même le résultat de {get_template_vars}, des fois que ca puisse servir à d'autres qui ne pourraient pas fixer le problème par les paramètres de l'URL (?)


Code :
Séminaires

SCRIPT_NAME = /index.php
app_name = CMS
hl = fr_FR
lang_block = _fr
lang_parent = fr
lang_flag = <img src="http://xxxxxx.eu/uploads/lang/fr.png" style="border:0;opacity:1;" alt="Français (French)" title="Français (French)" />
lang_text = Français (French)
lang_locale = fr_FR.UTF-8
lang_default = fr_FR
lang_languages = Array (4)
lang_languages_nocurrent = Array (4)
sitename = xxxxxx
lang = fr_FR
encoding = utf-8
gCms = Object
cgsimple = Object
ccuser = Object
feu_smarty = Object
content_obj = Object
content_id = 17
page = seminaires
page_id = seminaires
page_name = seminaires
page_alias = seminaires
position = 00003
friendly_position = 3
contentpage = seminaires
feuactionid = m713a0
feuactionparams = Array (2)
mod = Object
FrontEndUsers = Object
error =
...
...
...
endform = </form>
customcontent = 1
customcontent_loggedin =
customcontent_ip = xxxxxxx
customcontent_loginname = nobody
menuparams = Array (4)
count = 6
nodelist = Array (6)
node = Object

Encore merci pour ta disponibilité et ton gros coup de pouce!
#20

Pourquoi ne m'as-tu pas donné le résultat du get_template_vars quand je l'ai demandé ?
Tu vois clairement que tu aurais pu utiliser {$lang_default} et pas besoin d'udt Wink
Enfin, ça pourra toujours servir à comprendre comment récupérer l'url, vérifier si des caractères s'y trouvent et les passer en variable au gabarit.
Sujet fermé


Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)