J'ai du code sur PHP quelque chose comme:
$oldstring = ...;
...
$pattern = ...;
$newstring = preg_replace_callback($pattern, ... {...}, $oldstring);
echo $newstring;
Je dois appliquer ce code (peut-être en tant que classe ou d'une manière ou d'une autre) au contenu du composant et à chaque module existant de la page, quelque chose comme:
$doc = JFactory::getDocument();
$oldcomponent = $doc->getBuffer('component', '', array('class'=> ''));
// the same code for applying
echo $newcomponent;
$oldmodule1 = $doc->getBuffer('modules', 'position-1', array('style'=> ''));
// the same code for applying
echo $newmodule1;
$oldmodule2 = $doc->getBuffer('modules', 'position-2', array('style'=> ''));
// the same code for applying
echo $newmodule2;
...
$oldmoduleN = $doc->getBuffer('modules', 'position-N', array('style'=> ''));
// the same code for applying
echo $newmoduleN;
Le deuxième code est seulement quelque chose comme ce que je veux dire. C'est à dire. car les anciennes chaînes doivent être composant et chaque module et ils doivent être répercutés en tant que nouvelles chaînes sur ses positions sur la page.
Quelqu'un peut-il écrire un exemple sur la manière de créer un plugin Joomla simple à cette fin? Merci
Ok, j'ai découvert comment modifier un composant et n'importe quel module avec un plugin système:
class PlgSystemSomename extends JPlugin
{
public function onAfterDispatch()
{
$doc = JFactory::getDocument();
$oldComponent = $doc->getBuffer('component');
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select($db->quoteName('position'))
->from($db->quoteName('#__modules'))
->where($db->quoteName('published')." = 1 AND ".$db->quoteName('client_id')." = 0");
$db->setQuery($query);
$list = $db->loadObjectList();
...
$pattern = ...;
$newComponent = preg_replace_callback($pattern, ... {...}, $oldComponent);
if(count($list) > 0) {
foreach($list as $module) {
$newModule = preg_replace_callback($pattern, ... {...}, $doc->getBuffer('modules', $module->position, array('style'=> 'xhtml')));
$doc->setBuffer($newModule, 'modules', $module->position, array('style'=> 'xhtml'));
}
}
$doc->setBuffer($newComponent, 'component');
return true;
}
}
Il existe plusieurs façons de modifier le contenu de Joomla avec un plugin:
Un composant peut appeler le mécanisme du plug-in, par exemple, com_content utilise l'événement "onContentPrepare". Vous pouvez l'utiliser pour modifier le contenu de com_content. Les plugins pour cela sont dans plugins/content, mais c'est un comportement courant, le plugin fonctionnerait dans n'importe quel dossier.
Un plug-in système peut prendre la sortie de n'importe quel composant et le modifier, par exemple avec des expressions régulières.
Un plugin système peut aussi modifier tout le code HTML
Un module appelle l'événement "onRenderModule" afin que vous puissiez l'utiliser pour modifier la sortie du module.
Vous devez donc créer un plug-in pour les composants et un pour les modules et vous pouvez partager votre code, par exemple en installant une bibliothèque.
Un exemple plus détaillé:
Donc, tout mettre ensemble:
public function onRenderModule($module, $attribs)
{
$modulePosition = $attribs['name']
$moduleStyle = $attribs['style']
$module->content = str_replace('foo','bar',$module->content;
}
Ceci remplacerait toutes les occurrences de foo par bar dans n’importe quel module.