Submitted by pellet.alexandre on
Bonjour
Mon intérêt pour Drupal est assez nouveau, mais je me pose déjà des questions un peu pointue...
Ce que je souhaiterais faire c'est d'avoir un module/plugin qui soit capable de
- parser le contenu d'une page
- remplacer certaines occurrences par autre chose
Ca parait somme toute assez simple mais je coince.
Après avoir lu la doc, je pensais utiliser "hook_init", mais sans conviction.
Quelqu'un aurait-il une idée?
Merci
Alexandre
Hello Peux tu préciser ce que
Permalien Soumis par nyl auster le 8 Octobre, 2010 - 00:20
Hello
Peux tu préciser ce que tu veux faire ? c'est un peu vague.
Veux tu changer seulement les occurences dans l'article ou sur toute la page ?
Sinon avec un preprocess : tu peux déjà tester ça directement dans template.php :
Ca devrait suffire à transformer tous les "le" de ton article en "pouet" ;-)
Sinon a priori c'est un bon boulot pour un filtre custom (les format d'entrée de drupal) mais je n'ai jamais fait ça et c'est sans doute beaucoup plus compliqué.
L’utilisation d’un filtre,
Permalien Soumis par Guillaume Bec le 8 Octobre, 2010 - 09:24
L'utilisation d'un filtre, peut être un peu plus compliqué a mettre en place, me semble plus pertinente pour ce genre de tache.
Mais heureusement le module existe :) http://drupal.org/project/wordfilter
Merci pour ta réponse. Je
Permalien Soumis par pellet.alexandre le 8 Octobre, 2010 - 09:33
Merci pour ta réponse.
Je viens de regarder mais ça m'a l'air bien complexe à mettre en place pour ce que je veux faire.
Alexandre
Bonjour Merci pour ta
Permalien Soumis par pellet.alexandre le 8 Octobre, 2010 - 08:25
Bonjour
Merci pour ta réponse.
En fait, j'ai développer un plugin Joomla! qui permet d'afficher une Google Maps perso.
J'aimerais donc pouvoir l'intégrer à Drupal, au sein d'un article. On y copierait un code particulier {map param=map} que le plugin détecterait et remplacerait par du code approprié pour faire afficher la gmap.
Je sais qu'il existe le module GMap, mais je préfère le faire à ma sauce.
Voilà, si vous avez des idées?
Merci
Alexandre
Le module Gmap fait cela il
Permalien Soumis par Guillaume Bec le 8 Octobre, 2010 - 09:30
Le module Gmap fait cela il me semble, je te conseillerai donc de ne pas ré-inveter la roue et de te servir de ce module.
Si toutefois tu souhaites quand même faire ton propre module je t'invite à te pencher sur la création de filtre, j'ai donné un exemple de module un peu plus haut.
Dans ton module il faudra implémenter le hook_filter
http://api.drupal.org/api/function/hook_filter/6
Voici un sujet qui en parle sur drupalfr.org : http://drupalfr.org/forum/support/developpement/22147-comment-creer-un-f...
Tu peux aussi jeter un oeil au code du module Gmap qui implémente ce hook dans le gmap.module
Guillaume, merci pour tes
Permalien Soumis par pellet.alexandre le 8 Octobre, 2010 - 09:42
Guillaume, merci pour tes réponses.
Je connais le module GMap, mais je souhaite créer le mien, car j'ai mis en place une page web qui permet de créer sa carte de toute pièce.
Cet outil génère un code à coller dans le corps d'un article, code qui devrait être interprété pour afficher la carte.
Pour l'instant tout est ok avec Joomla!, maintenant je m'attaque à Drupal et aux autres ensuite.
La parie JS qui gère la carte est commune à tous les CMS, il n'y a que les parties "hook" qui sont spécifiques.
Voilà pourquoi je tiens à coder mon propre filtre ou module.
Je te remercie pour tes liens et je vais les consulter.
Je vous tiens au courant.
Alexandre
Hello Je comprends pourquoi
Permalien Soumis par nyl auster le 9 Octobre, 2010 - 08:12
Hello
Je comprends pourquoi Guillaume Bec évoque un filtre custom, toutefois je pense qu'un simple hook_nodeapi qui parse à la volée la balise au moment de la vue du node ($op == 'view" dans le nodeapi) ou même un simple preprocess que tu peux aussi implémenter dans un module peut largement faire le job.
De plus un filtre devra être manuellement mis par l'utilisateur pour pouvoir parser la balise, alors qu'un hook_nodeapi ou un preprocess effectuera le remplacement directement.
Ca me parait plus simple à développer et plus simple pour celui qui installera le module.
précisions : un preprocess est juste une étape intermédiaire qui te permet de manipuler toutes les variables d'un template juste avant qu'elle n'arrive au template. par exemple, pour manipuler les variables d'un node, du peux implémenter un "monmodule_preprocess_node(&vars)"
Bonjour J’ai tester
Permalien Soumis par pellet.alexandre le 9 Octobre, 2010 - 08:34
Bonjour
J'ai tester plusieurs choses mais mes tests ne sont pas super...
Après avoir créer un module dans site/all/module et activé, rien ne se passe.
J'ai récupérer un module cité plus haut que j'ai un peu modifier pour tester, ainsi que le preprocess.
A part activer le module, il faut faire autre chose?
Voici le code php de mon module :
<?php function filter_exemple_preprocess_node($vars)
// First we define the simple string substitution filter.
// We don't need the "prepare" operation for this filter, but it's required
// The actual filtering is performed here. The supplied text should be
// Since we allow the administrator to define the string that gets
// Next is our "time tag" filter.
// Since this filter will return a different result on each page load, we
// This filter is a little trickier to implement than the previous one.
// Now, in the "process" step, we'll search for our escaped time tags and
{
print_r($vars);
}
function
filter_exemple_filter($op, $delta = 0, $format = -1, $text = '') {switch (
$delta) {case 0:
switch (
$op) {// This description is shown in the administrative interface, unlike the
// filter tips which are shown in the content editing interface.
case 'description':
return t('Substitutes a custom string for the string "foo" in the text.');
// to at least return the input text as-is.
case 'prepare':
//return $text;
return "prepare";
// returned, once any necessary substitutions have taken place.
case 'process':
return str_replace('a', 'e', $text);
// substituted when "foo" is encountered, we need to provide an
// interface for this customization. Note that the value of $format
// needs to be provided as part of the form name, so that different
// customization can be done for this filter in each of the different
// input formats that may use it.
case 'settings':
$form['filter_example'] = array(
'#type' => 'fieldset',
'#title' => t('Foo filter'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['filter_example']["filter_example_foo_$format"] = array(
'#type' => 'textfield',
'#title' => t('Substitution string'),
'#default_value' => variable_get("filter_example_foo_$format", 'bar'),
'#description' => t('The string to substitute for "foo" everywhere in the text.')
);
return $form;
}
break;
case 1:
switch (
$op) {// This description is shown in the administrative interface, unlike the
// filter tips which are shown in the content editing interface.
case 'description':
return t('Inserts the current time in the place of a <time /> tags.');
// need to return TRUE for "no cache" to ensure that the filter is run
// every time the text is requested. Setting this to TRUE will force
// every filter in associated input formats to be run on every access,
// so only disable caching if absolutely required.
case 'no cache':
return TRUE;
// Since the input involves special HTML characters (< and >) we have to
// run the filter before HTML is escaped/stripped by other filters. But
// we want to use HTML in our result as well, and so if we run this filter
// first our replacement string could be escaped or stripped. The solution
// is to use the "prepare" operation to escape the special characters, and
// to later replace our escaped version in the "process" step.
//
// We'll use [filter-example-time] as a replacement for the time tag.
// Note that in a more complicated filter a closing tag may also be
// required. For more information, see "Temporary placeholders and
// delimiters" at http://drupal.org/node/209715.
case 'prepare':
///return preg_replace('!<time ?/>!', '[filter-example-time]', $text);
return "prepare";
// to the real filtering.
case 'process':
//return str_replace('[filter-example-time]', '<em>' . format_date(time()) . '</em>', $text);
return "process";
}
break;
}
}
?>