pLog 的 啟用所見即所得(WYSIWYG)文章編輯 這功能很不錯用, 但是有個小Bug, 就是若文章內寫的東西是有關 Html tag, 而且有被 <> 括住的, 若要重新編輯修改文章的時後就發現個小問題.
會發現到之前被 <> 括住的tag, 都會直接秀出原本 <html tag> 代表的樣式(ex: 被 <b> 包住的會變粗體, 不會變成 <b>), 呈現在 WYSIWYG 的編輯器內, 而點 "<>" 的按鈕, 也發現原本內容應該是 < > 的, 都被換成 < > 了. 造成要修改這類的文章相當麻煩.
今天花點時間把這個問題除掉了, 只要簡單修改兩行 code 就搞定了.
會發生上述問題最主要的原因在於.
WYSIWYG 編輯器的聰明功能, 他會自動把 < > " & 換成 < > " & .... 等等的.
可以參考 php 的 htmlentities() 和 htmlspecialchars(), 就是做這類轉換用的.
不過幸好他轉換只會轉換一次(通常一般人寫程式應該也不會轉超過一次), 所以我就想簡單點的做法就是. 要修改的文章在秀出來之前, 我在做一次簡單的轉換, 讓 WYSIWYG 編輯器轉換一次後能正好呈現我要的原始資料.
說的好像很簡單, 實際修改起來, 也確實很簡單 :p
仔細研究一下會轉換的那些 code, 都一定有一個 &, 所以我就只要在資料倒到 WYSIWYG 之前, 先將 & 都換成 & 就可以囉!
之後資料經過 WYSIWYG 就會把 & 轉成 &, 而正好能回復到 > < 等等的這些我要秀的東西.
原理大概就是如上述的這樣子, 再下來來講講實作吧!
實作真的很簡單, 就到自己的 plog/class/view/admin/ 下, 修改 admineditpostview.class.php 這個檔案, 將第 53, 54 行註解起來, 再加上將 & 換成 & 的程式就行了.
修改後的程式碼會如下:
//$this->setValue( "postText", $this->_article->getIntroText()); //$this->setValue( "postExtendedText", $this->_article->getExtendedText()); $this->setValue( "postText", preg_replace('/&/', '&', $this->_article->getIntroText())); $this->setValue( "postExtendedText", preg_replace('/&/','&',$this->_article->getExtendedText()));
這樣子就搞定了, 輕鬆又容易唷!!
以下就不是此篇的重點了, 純粹就是一些小心得.
PS: 當初在找這個檔案有個小密技. 在 admin.php 檔案中, 找到
$controller->process( HttpVars::getRequest(), "op");
這行, 在這行前面加 echo "aa";
就會列出
plog/class/view/view.class.php(172): header plog/class/view/view.class.php(308): adminnewpostview.sendcontenttype plog/class/view/admin/adminview.class.php(106): view.render plog/class/view/admin/admintemplatedview.class.php(36): adminview.render plog/class/view/admin/adminnewpostview.class.php(66): admintemplatedview.render plog/class/controller/controller.class.php(325): adminnewpostview.render plog/admin.php(37): admincontroller.process
這些錯誤訊息, 於是就知道程式流程 和 使用哪些 class, 再下來就靠自己小找一下就搞定囉 🙂