دو متد زیر تگهای pre و code رو از متن جداسازی نموده و هایلایت میزنند. این متدها را در components/Controller.php قرار دادم:
/**
*
* @param type $tagName نام تگ که باید از متن جدا شود
* @param type $str متنی که تگ از آن جدا میشود
* @return type یک آرایه که تگهای جدا شده را برمیگرداند
*/
public function parseTag($tagName, $str){
$dom = new DOMDocument();
$dom->loadHTML($str);
$tagItems= $dom->getElementsByTagName($tagName);
$tagItemNode=array();
$tagItemNodes= array();
foreach($tagItems as $tagItem) {
if($tagItem->childNodes->length) {
foreach($tagItem->childNodes as $i) {
$tagItemNode[$i->nodeName] = $i->nodeValue;
}
}
$tagItemNodes[] = $tagItemNode;
}
return $tagItemNodes;
}
/**
*
* @param type $str رشته ای که باید تگهایش جداسازی شده و هایلایت شوند
*/
public function luminous($str) {
$tag= array('pre', 'code');
$count= count($tag);
$highlightTags= array();
for($i=0;$i<$count;$i++){
$highlightTags[$i]= $this->parseTag($tag[$i], $str);
}
require_once 'luminous/luminous.php';
set_time_limit(3);
$use_cache = !isset($_GET['nocache']);
echo luminous::head_html();
if($count=count($highlightTags)>0){
$i=0;
foreach($highlightTags as $highlightTag){
foreach ($highlightTag as $tag) {
foreach ($tag as $value) {
$newval= luminous::highlight('php', '<?php '.PHP_EOL.$value.'?>', array('cache' => $use_cache));
if($newval){
$str= str_replace($value, $newval, $str);
}
}
}
}
}
echo $str;
}
بعد در view با دستوری زیر فراخوانی میشن:
$this->luminous($post->abstract);