代码如下
\Phpcmf\Hooks::app_on('appname', 'cms_view', function($data, $file) {
if (IS_ADMIN ) {
return; // 后台跳过
} elseif(IS_MEMBER) {
return; // 用户中心跳过
} elseif (IS_API) {
return; // api跳过
}else{
ob_start();
}
});
\Phpcmf\Hooks::app_on('appname', 'cms_view_end', function() {
if (IS_ADMIN ) {
return; // 后台跳过
} elseif(IS_MEMBER) {
return; // 用户中心跳过
} elseif (IS_API) {
return; // api跳过
}else{
$domain = $_SERVER['HTTP_HOST'];
list($qian,$er)=explode(".",$domain);
$html = ob_get_clean();//
echo addClassToBodyTags($html, $qian);
}
});
function addClassToBodyTags($html, $className) {
// 创建DOMDocument实例
$dom = new DOMDocument();
// 防止编码问题
@$dom->loadHTML('<?xml encoding="UTF-8">' . $html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
// 查找body元素
$body = $dom->getElementsByTagName('body')->item(0);
// 如果没有找到body元素,直接返回原HTML
if (!$body) {
return $html;
}
// 获取body内的所有子元素
$xpath = new DOMXPath($dom);
$elements = $xpath->query('//body//*');
$newclass=$className;
// 遍历所有元素
foreach ($elements as $element) {
// 获取现有class列表
$existingClasses = explode(' ', $element->getAttribute('class'));
$className=$newclass.mt_rand(1,5000);
// 检查是否已存在目标class
if (!in_array($className, $existingClasses)) {
// 添加新class(过滤空字符串)
$classes = array_filter(array_merge($existingClasses, [$className]));
$element->setAttribute('class', implode(' ', $classes));
}
}
// 保存修改后的HTML
$html = '';
foreach ($dom->childNodes as $node) {
$html .= $dom->saveHTML($node);
}
// 移除编码声明
return str_replace('<?xml encoding="UTF-8">', '', $html);
}