[PHPTAL] PHPTAL et selected="selected"
Werner
lists at mollentze.co.za
Mon May 19 14:27:20 CEST 2008
Hi Damien
I don't understand French, but I think I understand your problem by
looking at your code.
I agree that it is not a good idea to use php modifiers to set the
selected state of an option.
There are two ways that you can achieve the desired result:
1) The TAL-complaint way is to flag the selected state in your category
list, thus in your source object:
$categoryList = array(
...
array(
id => 123,
name => My Category,
selected => false
),
array(
id => 456,
name => My Other Category,
selected => true
),
...
);
Then your PHPTAL code is as simple as:
<select id="article_category" name="article_category">
<option
tal:repeat="category categoryList"
tal:attributes="selected category/selected; value category/id"
tal:content="category/name">
</option>
</select>
2) The other option (I sometimes need to use this approach) is to write
your own custom modifier, that compares the object's value to another
value. Note: This, however, is NOT TAL compliant and will make your
template code specific to PHPTAL and thus your templates will not be
portable to other TAL implementations.
Here is an example modifier:
function phptal_tales_match($src, $nothrow) {
$srcArr = explode(',', trim($src));
if (count($srcArr) == 2) {
return '(' . PHPTAL_TalesInternal::path($srcArr[0], $nothrow) .'
== '. PHPTAL_TalesInternal::path($srcArr[1], $nothrow) . ')';
} else {
return PHPTAL_TalesInternal::path($src, $nothrow);
}
}
This modifier, when included before you initiate a PHPTAL object, can be
used as follows:
<select id="article_category" name="article_category">
<option
tal:repeat="category categoryList"
tal:attributes="selected match:category/id,article/category;
value category/id"
tal:content="category/name">
</option>
</select>
So, when the value of article/category matches that of category/id, the
selected attribute will be set to "selected" for that specific option.
I hope this helps you in your quest.
Kind Regards,
Werner
Kind Regards,
Werner
Damien Louis wrote:
> Bonjour, je suis actuellement en train de monter un site avec le coupe
> Zend Framework et PHPTAL, et je bloque actuellement sur un "détail" du
> côté du moteur de template qui me bloque à plusieurs endroits.
>
> J'ai une table article et une table catégorie.
>
> Pour chaque article est sélectionnée une catégorie. Donc, dans
> l'enregistrement de l'article apparait l'ID de la catégorie.
>
> Lors de la modification de l'article, j'envoi au formulaire l'objet
> Article, qui a donc l'attribut catégorie, et l'objet Catégorie qui a
> toutes les catégories.
>
> Côté PHPTAL, j'ai donc un truc de ce style pour re-lister mes catégories.
>
> Code :
>
> <select name="categorie">
> <option tal:repeat="categorieItem categoriesList"
> tal:content="categorieItem/nom"
> tal:attributes="categorieItem/id"></option>
> </select>
>
> Seulement, j'aimerai pouvoir sélectionner par défaut la catégorie de
> l'article.
>
> J'ai déjà utilisé PHPTAL sans Zend Framework, et je pouvais faire ceci :
>
> Code :
>
> <select name="categorie">
> <option tal:repeat="categorieItem categoriesList"
> tal:content="categorieItem/nom" tal:attributes="categorieItem/id;
> selected php(categorieItem.id() == article.categorie())"></option>
> </select>
>
> Seulement, cette façon de faire est bancale puisque la méthode est
> appelée depuis la vue, ce qui ne respecte pas la logique MVC puisque
> la vue est censée afficher ce que lui envoi le contrôleur.
> Bref, j'ai tenté cette approche avec Zend Framework, et ça ne passe pas.
>
> Je suis donc à la recherche d'une solution plus propre, et surtout,
> qui marche.
>
> J'ai tenté un :
> Code :
>
> <select name="categorie">
> <option tal:repeat="categorieItem categoriesList"
> tal:content="categorieItem/nom" tal:attributes="categorieItem/id;
> selected article/categorie"></option>
> </select>
>
> pensant que PHPTAL comprendrait que je veux "selected" que si la
> catégorie de l'article correspond à la "value" de l'option de la
> catégorie.
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> PHPTAL mailing list
> PHPTAL at lists.motion-twin.com
> http://lists.motion-twin.com/mailman/listinfo/phptal
>
More information about the PHPTAL
mailing list