代码如下
\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); }