使用PHP将CSS类添加到Joomla文章中的所有图像

时间:2014-06-17 22:26:31

标签: php joomla

我安装了一个名为Nice Watermark的插件(在我的Joomla 3网站上),为所有具有特定类别的图像添加水印(在我的情况下为<img class="waterm" src="/images/wm/idx-homepage3cfotoby0.jpg" alt="">

在加载网站之前,是否可以使用PHP向所有图像添加CSS类?或者更好的是,只定位作为文章一部分的图像(我不想为图标和其他模板图像添加水印)?

我在想类似插件,在代码中找到<img src=.../>标签并添加一个类,但我不确定如何解决这个问题。

也许有人可以指出我正确的方向?

编辑:

我已经使用以下代码创建了一个Joomla插件,它可以工作,但它还在图像周围添加了一个完整的html结构(<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body><p><img...。我怎么能避免这种情况?

<?php
// no direct access
defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
class plgContentAddImageClass extends JPlugin
{
    public function __construct(&$subject, $params)
    {
        parent::__construct($subject, $params);
    }
    public function onContentPrepare($context, &$article, &$params, $offset = 0)
    {
        $content =& $article->text; // Article content
        $dom = new DOMDocument();
        @$dom->loadHTML($content);
        $dom->preserveWhiteSpace = false;
        $images                  = $dom->getElementsByTagName('img');
        foreach($images as $image) {
            // the existing classes already on the images
            $existing_classes   = $image->getAttribute('class');
            // the class we're adding
            $new_class          = ' watermark';
            // the existing classes plus the new class
            $class_names_to_add = $existing_classes . $new_class;
            $image->setAttribute('class', $class_names_to_add);
        }
        $content = $dom->saveHTML();
        return true;
    }
}
?>

1 个答案:

答案 0 :(得分:0)

根据PHP ManualsaveHTML()方法会自动将<html><body><!doctype>标记添加到输出中,但我找到了一个代码段删除这些代码的同一页面。这是完整的代码,对我有用:

<?php
// no direct access
defined('_JEXEC') or die;
jimport('joomla.plugin.plugin');
class plgContentAddImageClass extends JPlugin
{
    public function __construct(&$subject, $params)
    {
        parent::__construct($subject, $params);
    }
    public function onContentPrepare($context, &$article, &$params, $offset = 0)
    {
        // Article Content
        $content = &$article->text;
        $dom = new DOMDocument();
        @$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
        $dom->preserveWhiteSpace = false;
        $images                  = $dom->getElementsByTagName('img');
        foreach($images as $image) {
            $existing_classes   = $image->getAttribute('class');
            // the class we're adding
            $new_class          = ' watermark';
            // the existing classes plus the new class
            $class_names_to_add = $existing_classes . $new_class;
            $image->setAttribute('class', $class_names_to_add);
        }
        // Remove unwanted tags
        $content = preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML()));
        return true;
    }
}
?>