我安装了一个名为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;
}
}
?>
答案 0 :(得分:0)
根据PHP Manual,saveHTML()
方法会自动将<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;
}
}
?>