[Resolu] Php "brute" ou Computed field? Brutal Drupal!

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à vous et courage tous ceux qui font vivre ce site.

Je suis un petit bleu de Drupal, j'ai a peine une dizaine de jour. Je viens de tourner la page avec Joomla(definitivement?) âpres deux ans de pratique assidue. Et ce pour une seule raison:

J'aimerais développer un petit truc simple en flash et l'api de Joomla me semblait trop brutale pour le graphiste que je suis.

Voila ce que je voudrais faire:

Inclure automatiquement un lien dans un node dès sa creation. Lien pointant vers un swf (toujours le meme) tout en lui passant des variables (GET). Ces variables en question sont les valeurs des différents champs CCK du meme node.

Donc en gros, j'aimerais articuler tout ceci comme ca:

monlien.swf?variable1=titredemonnonde&variable2=nomdufichierjoint&etc...

Deux pistes actuellement etudiées:

Piste 1

Inclure du php dans un champs ou meme dans le corps, mais quelle syntaxe utiliser? Chez moi ceci marche: <?php echo "texte en dur"; ?> Mais ceci ne marche pas: <?php echo $node->title; ?> J'imagine bien qu'il me manque quelque chose mais quoi exactement?

Piste 2

Utiliser Computed Field pour CCK. Mais alors la moi qui ne suis déjà pas trop Php... Comment formater mes champs computed code et display format pour arriver à mes fins?

Suis je sur la bonne voie ou je fais complètement fausse route? Je suis ouvert à toute autres suggestions.

Voila... j'espère que j'aurai été assez claire, n'hésitez pas à me demander des précisions. Merci d'avance a tous ceux qui me confirmeront qu'être passer a Drupal c'est... bien! ;-)

Benjamin

Version de Drupal : 

D'après ce que tu décris, cela me semble plutôt du ressort du thème.

Dans ton template de node (node.tpl.php), tu as accès à la variable $node, et à tout ce dont tu as besoin.

Pour cela, il faut commencer par créer un thème, est-ce que tu en as déjà un?

Sinon écrire un petit module; pour éviter d'inclure une fonctionnalité dans un fichier de template (qui ne servent qu'à modifier la présentation normalement.).

Il faut que tu crée dans sites/all/modules :
- un repertoire "lien_flash"
- un fichier "lien_flash.module" qui contiendra ton code php
- un fichier "lien_flash.info" qui donne à drupal le nom de ton module (indispensable)

Le contenu de "lien_flash.module" serait le suivant, en admettant que tu ait un type de contenu "flash"

<?php
/**
 * Implémentatation du hook_nodeapi
 * Permet de changer le comportement du node. Remplacer hook par le nom de notre module
 */
function lien_flash_nodeapi(&$node,$op)
{
       
//si le type de contenu est "flash" et qu'on est en train de VOIR le node (view)
 
if($node->type=='flash' && $op='view'){
               
//afficher coucou à la place du contenu
      
$node->content['body']['#value'] = 'coucou';
               
//création d'un nouveau lien dans le contenu
               
$node->content['nouveau_lien']= array (
               
'#value' => 'voici mon lien, je marque ce que je veux ici'
     
);
    }  
}
?>

Bien sur passer dans l'administration pour activer l'admin, si le fichier info a bien été renseigné !

Enfin il vaut mieux ne pas mettre de balises fermante à ton php.
C'est le code que j'utilise pour drupal 5, à tester sous drupal 6 avec réserves.

J'ai écrit un petit truc ici sur la manière d'insérer du php dans drupal:
http://drupalfr.org/node/6300

Créer un module n'est pas obligatoire dans ton cas, c'est juste que
1) ça permet une organisation plus claire du site si celui contient d'autres customisations de ce genre
2) tu pourras te servir du module pour implémenter des développements supplémentaires de ton type de contenu en profitant de la puissance des hooks si besoin est. (tu as donc le pouvoir également de modifier à 100% le formulaire de création de ton node grace au hook_form_alter ! )
3) tu prends le controle complet de ton node; le controle est bien moins important avec contemplate et les fichiers de template

Merci Damien, Merci Nyl,

Je vais explorer ces nouvelles pistes et vous tenir au courant de tout ca.
Mais... y'a vraiment personne qui ne sache se servir de Computed field? :-)(je suis sur que si)
Pour avoir un peu parcouru la doc anglaise de computed field hier, je sens qu'avec ce module il ne manque qu'un pet de mouche pour parvenir à mon but.

J'ai vu quelque part sur ce forum l'emploi du template pour insérer du Php, mais etant tout neuf sur Drupal, je n'ai pas encore abordé le templating. Et comme j'aimerais réutiliser mon système sur d'autres sites par la suite je préférai ne pas le lien à un template.

La piste du développement de module me parait tres bien, mais peut être un peu plus longue à appréhender par rapport au fonctionnement de computed field?

Je vais voir tout ca. Allez hop, au boulot! ;-)

Merci pour ces réponses rapide et précises!

Benjamin

C'est bon j'ai trouvé comment faire ma tambouille! :-)

J'ai laissé de coté computed field (mais j'y reviendrai c'est sur, alors preparez vous à ce que je sois un peu penible avec ca.. ;-))

Je me suis penché du coté de node.tpl.php et à l'aide de devel j'ai compris tres rapidement comment afficher ce que je voulais.

Subsistent encore deux questions dont je crois avoir la reponse mais que je testerai plus tard:
Comment attribuer cet affichage a un seul type de contenu et l'afficher ou non selon le type d'utilisateur? Contemplate sera t'il suffisant?

Merci de me confirmer tout ca!

Benjamin

Contemplate est un outil très pratique mais attention : il "court-circuite" tous changements qui pourraient survenir ensuite sur le node : pour le dire plus clairement : si tu installes un nouveau modules et que celui-ci ajoute quelque chose dans le contenu du node par exemple; tu ne le verras pas sauf à ajouter manuellement la nouvelle variable via contemplate (en tous cas dans drupal 5 ça fonctionne comme ça).

C'est juste un avertissement car ce comportement peut surprendre si on n'est pas au courant.

Tu as aussi la possibilité de créer un fichier de template spécifique à ton type de exemple :
node-story.tpl.php
n'affectera que les nodes qui ont pour type de contenu "story".

http://drupal.org/node/190815#page-suggestion

Ok merci du tuyau Nyl, et effectivement ca à l'air de se passer comme ca aussi dans Drupal 6. Je ne pense pas que se soit un problème car je connais a peu près le nombre de type de contenus finaux: 2 ou 3, pas plus...

J'ai conscience que ce n'est surement pas la manière la plus souple et pérenne de pratiquer mais je suis hélas dans l'urgence et j'ai déja bien commencer avec contempla te. Mais promis, après je créerai un fichier tpl.php pour chacun de mes contenus !

(d'ailleurs passer mon code de contemplate a mes fichiers tpl.php ne doit pas vraiment s'éloigner du copier/coller en fait?) Je verrai si j'ai le temps.

Merci en tout cas de tes conseils!

Benjamin