رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چطور کدهای php رو بین متن نمایش بدم؟
#16
من اینطور فهمیدم که هر جای صفحه بخواهیم کدهامون بصورت هایلایت شده قرار بگیرن، باید به روش زیر عمل کنیم( در فریمورک این کد رو در view باید قرار بدیم):
php $abstract= $post->abstract; ?>

require_once 'luminous/luminous.php';
set_time_limit(3);
$use_cache = !isset($_GET['nocache']);
echo luminous::head_html();

echo luminous::highlight('php', $abstract, array('cache' => $use_cache));
پاسخ
تشکر شده توسط:
#17
حالا تگهای code و pre رو چطور از بقیه متن جدا کنم و برای تابع highligh بفرستم؟
پاسخ
تشکر شده توسط:
#18
میتونید با کمی تلاش، لومینوس رو تبدیل به کامپوننت کنید. طبق آموزش تبدیل JDF به کامپوننت عمل کنید تا نخواین هر دفعه require کنید. میشه درنهایت متدی به کامپوننت اضافه کنید که یه متن رو میگیره و تگهای موردنظر رو با RegExp پیدا و تبدیل میکنه. توی Layout هم کافیه بجای نمایش مستقیم content$، این متغیر رو به اون متد بفرستین و خروجی اون رو نمایش بدین.
پاسخ
تشکر شده توسط: abdollah110110
#19
یه RegExp بصورت زیر نوشتم که تگ pre یا code رو همراه با متن بینشون پیدا میکنه. مشکلش اینه اگه توی رشته ای بیش از یک تگ pre داشته باشیم، کل متن بین تگ شروع pre اول و پایان تگ pre دوم رو درمیاره.
چطوری دو یا چند تگ pre رو از هم جدا کنم؟
$str = '123456 <pre> echo "red"; </pre> 78945 <pre> echo "blue"; </pre> 147852';
$check = preg_match('/(<pre>|<code>)(.*)(</pre>|</code>)/sm', $str,$match);
خروجی:

array
(
   0 => '<pre> echo "red"; </pre> 78945 <pre> echo "blue"; </pre>'
   1 => '<pre>'
   2 => ' echo "red"; </pre> 78945 <pre> echo "blue"; '
   3 => '</pre>'
)
پاسخ
تشکر شده توسط:
#20
توی اینترنت درمورد Detect nested tags with RegExp in PHP تحقیق کنید.
پاسخ
تشکر شده توسط: abdollah110110
#21
برای شناسوندن زبان php به luminous، تغییرات خاصی لازمه؟
پاسخ
تشکر شده توسط:
#22
نه کار خاصی لازم نداره. فقط کافیه بهش بگین که کدتون PHP تا هایلایت کنه. مثال:
require_once 'luminuos/luminous.php';
echo luminous::highlight('php', '<?php
    date_default_timezone_set('Asia/Tehran');
    echo date('H:i:s') . '<br />' . PHP_EOL;
?>');

در اصل Luminous با خود PHP نوشته شده و اولین زبانی که پشتیبانی کرده، PHP بوده.
پاسخ
تشکر شده توسط: __undercover , abdollah110110
#23
باید متن مورد نظرو داخل تگ php قرار بدیم تا هایلایت زبان php به متن اعمال بشه:
luminous::highlight('php', '<?php '.$value.' ?>');
پاسخ
تشکر شده توسط:
#24
خوب خدا رو شکر. این Luminous با اینکه چند ساله بروزرسانی نشده ولی واقعاً خیلی خوبه. قالبهای خیلی جالبی هم داره.
پاسخ
تشکر شده توسط: abdollah110110
#25
مراحل دانلود و نصب luminous:

ابتدا از این لینک دانلودش میکنیم.

بعد لینکها و اسکریپتهاشو معرفی میکنیم. برای این کار لینکها و اسکریپتها رو در تگ head صفحمون بصورت زیر قرار میدیم:
   <script type='text/javascript' src='<?php echo Yii::app()->homeUrl; ?>luminous/client/jquery-1.6.4.min.js'></script>
   <script type='text/javascript' src='<?php echo Yii::app()->homeUrl; ?>luminous/assets/script/jquery.jknotify.min.js'></script>
   <script type='text/javascript' src='<?php echo Yii::app()->homeUrl; ?>luminous/assets/script/jquery.jknotifyui.min.js'></script>
   <script type='text/javascript' src='<?php echo Yii::app()->homeUrl; ?>luminous/assets/script/visuals.js'></script>
   <script type='text/javascript' src='<?php echo Yii::app()->homeUrl; ?>luminous/assets/script/luminous.js'></script>
   <link rel='stylesheet' type='text/css' href='<?php echo Yii::app()->homeUrl; ?>luminous/style/luminous.css' id='luminous-style'>
   <link rel='stylesheet' type='text/css' href='<?php echo Yii::app()->homeUrl; ?>luminous/style/luminous_light.css' id='luminous-theme'>
   <link rel='stylesheet' type='text/css' href='<?php echo Yii::app()->homeUrl; ?>luminous/assets/style/buttons.css'>
بعد luminous.php رو هر جای صفحه بخواهیم متنی هایلایت بشه require میکنیم:
require_once 'luminous/luminous.php';
set_time_limit(3);
$use_cache = !isset($_GET['nocache']);
echo luminous::head_html();
حالا طبق روش پست 22 این تاپیک، متن دلخواهمونو هایلایت میزنیم.
پاسخ
تشکر شده توسط:
#26
دو متد زیر تگهای 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);
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 1 مهمان