迅睿CMS框架是一款PHP8高性能·簡單易用的CMS開源開發框架,基于MIT開源許可協議發布,免費且不限制商業使用,是免費開源的產品,以萬端互聯為設計理念,支持的微信公眾號、小程序、APP客戶端、移動端網站、PC網站等多終端式管理系統。
聯系官方銷售客服
1835022288
028-61286886
問題背景:
我現在的業務需要涉及修改,dayrui/Fcms/Core中的文件,我現在想通過繼承的方式來完成修改,我該如何操作。
有知道如何操作的或者官方能否給出個解決方案
dayrui/Fcms/Core里面的文件只phpcmf.php和model.php里面的方法可以繼承,其他文件不能繼承
回復迅睿框架創始人
我現在的業務背景是
我要啟動偽靜態的功能
但是我的數據量非常大,用咱們系統自帶的生成功能是無法實現的
我需要實現的功能是在 View模板層面通過標簽讀取數據的時候,通過規則,修改數據中的url字段,來完成列表的url
其次 在_call_show功能中也要重新變更url的值防止301重定向到原來的頁面
如果這樣的業務背景,有沒有其他的方案或者更好的方案。
我現在的做法是破壞了系統的規則
我更改了下面的代碼
public static function V() { if (!is_object(static::$view)) { static::$view = new View(); } return static::$view;}
我把原來系統VIew變成我的View
你說的這么專業,發帖子還要匿名,建議你買個授權,支持下老大的業務,不然以后咋給你維護升級。
你買個授權,你開發,然后動到核心東西了,老大會給你單獨掛鉤的。建議你買一套SVIP。支持支持技術開發者
回復@eric
回復@五金沖壓件
我對這套系統框架是很認可的,現在由于項目還沒有上線,等上線穩定運轉了,一定會支持技術開發者的
沒有看明白這個業務是什么邏輯,我感覺沒必要改view
感謝跟進回復問題,等項目上線,穩定一段時間,我一定會再支持一個SVIP
目前的情況是這樣的
現在這個項目有6個模塊
每個模塊都有百萬數據,現在要啟動偽靜態功能,首先咱們這套框架自帶的URL規則是可以實現的。
通過配置URL規則,然后修改rewrite.php文件,但是這個流程是需要在修改后,通過內容維護->指定模塊->更新內容URL才可以實現。
我這6個模塊中的前端模板中有通過 {module},{table}{mform},等咱們系統支持的模板標簽進行數據的讀取,我看了這些數據源都是通過核心Core/View.php 來進行解析和實現的,我想要實現的是修改一下代碼
/** * 查詢緩存 */public function _query($sql, $db, $cache, $all = TRUE){ // 緩存存在時讀取緩存文件 $cname = md5($db . $sql . dr_now_url()); if (SYS_CACHE && $cache && $data = \Phpcmf\Service::L('cache')->get_data($cname)) { return $data; } $mysql = \Phpcmf\Service::M()->db; if ($db) { $mysql = \Config\Database::connect($db, false); } // 執行SQL $query = $mysql->query($sql); if (!$query) { return 'SQL查詢解析不正確:' . $sql; } // 查詢結果 $data = $all ? $query->getResultArray() : $query->getRowArray(); // 開啟緩存時,重新存儲緩存數據 $cache && \Phpcmf\Service::L('cache')->set_data($cname, $data, $cache); return $data;}
在這個data讀取的根源部分,處理項目的偽靜態規則
以下是目前改動的代碼
<?php namespace Jqx\Core;use Phpcmf\Service;class View extends \Phpcmf\View{ public $_jqx_module = ""; public function rewrite_url($url) { //TODO 此處通過調用標簽所在的Module進行url的偽靜態 return $this->_jqx_module; } public function list_tag($_params) { $params = explode(' ', $_params); foreach ($params as $param) { $mapArray = explode("=", $param); if ($mapArray[0] == 'module') { $this->_jqx_module = $mapArray[1]; break; } } if ($this->_jqx_module == "MOD_DIR") { $this->_jqx_module = MOD_DIR; } elseif ($this->_jqx_module == "APP_DIR") { $this->_jqx_module = APP_DIR; } return parent::list_tag($_params); // TODO: Change the autogenerated stub } public function _query($sql, $db, $cache, $all = TRUE) { $return_data = []; // 緩存存在時讀取緩存文件 $cname = md5($db . $sql . dr_now_url()); if (SYS_CACHE && $cache && $data = \Phpcmf\Service::L('cache')->get_data($cname)) { $return_data = $data; } if (empty($return_data)) { $mysql = \Phpcmf\Service::M()->db; if ($db) { $mysql = \Config\Database::connect($db, false); } // 執行SQL $query = $mysql->query($sql); if (!$query) { return 'SQL查詢解析不正確:' . $sql; } // 查詢結果 $data = $all ? $query->getResultArray() : $query->getRowArray(); // 開啟緩存時,重新存儲緩存數據 $cache && \Phpcmf\Service::L('cache')->set_data($cname, $data, $cache); $return_data = $data; } $new_return_data = []; if (!empty($return_data)) { foreach ($return_data as $k => $v) { if (!empty($v['url'])) { $v['url'] = $this->rewrite_url($v['url']); $new_return_data[$k] = $v; } else { $new_return_data[$k] = $v; } } return $new_return_data; } return $return_data; }}
系統的:
class Service
/** * 模板視圖對象實例 * * @var object */public static function V() { if (!is_object(static::$view)) { static::$view = new View();//這個View,是上面的那個View } return static::$view;}
我覺得你走遠了,思路沒對,循環標簽中的url你完全可以使用自定義函數來完成,比如先定義一個函數
function rewrite_url($_jqx_module, $url) { //TODO 此處通過調用標簽所在的Module進行url的偽靜態 return $_jqx_module; }
然后通過module等等的循環標簽調用函數就行了
----------------------------------
還可以使用自定義模板標簽實現
參考文檔:《自定義模板解析標簽》
1
感謝再次跟進回復 {module module=MOD_DIR page=1 pagesize=20 urlrule=index.php?s=zixun&c=search&catid=1&page=[page] return=zixun} {$zixun[url]=rewrite_url(MOD_DIR,$zixun.url)} 這個做法我已經實現了 我現在想要修改的原因是,想從數據根源通過直接處理,完成url的重寫解析 其次還想在和您交流一下,面對獨立模塊千萬數據的時候,如果想要完成偽靜態的內容url,該如何更新
用自定義函數效率才是最高的
2
好,那就聽您的建議,感謝您的回復和指導。
肯定不要改不能修改的文件,影響性能
這種教材性回復 為什么都不公開查看呢。不然后續有人遇到問題了,還是要重新提問多麻煩,
看著蛋疼
好像匿名貼就是這樣,哈哈
回復@小黃人 18html.com
有知道如何操作的或者官方能否給出個解決方案
dayrui/Fcms/Core里面的文件只phpcmf.php和model.php里面的方法可以繼承,其他文件不能繼承
回復迅睿框架創始人
我現在的業務背景是
我要啟動偽靜態的功能
但是我的數據量非常大,用咱們系統自帶的生成功能是無法實現的
我需要實現的功能是在 View模板層面通過標簽讀取數據的時候,通過規則,修改數據中的url字段,來完成列表的url
其次 在_call_show功能中也要重新變更url的值防止301重定向到原來的頁面
如果這樣的業務背景,有沒有其他的方案或者更好的方案。
我現在的做法是破壞了系統的規則
我更改了下面的代碼
我把原來系統VIew變成我的View
你說的這么專業,發帖子還要匿名,建議你買個授權,支持下老大的業務,不然以后咋給你維護升級。
你買個授權,你開發,然后動到核心東西了,老大會給你單獨掛鉤的。建議你買一套SVIP。支持支持技術開發者
回復@eric
回復@五金沖壓件
我對這套系統框架是很認可的,現在由于項目還沒有上線,等上線穩定運轉了,一定會支持技術開發者的
沒有看明白這個業務是什么邏輯,我感覺沒必要改view
回復迅睿框架創始人
感謝跟進回復問題,等項目上線,穩定一段時間,我一定會再支持一個SVIP
目前的情況是這樣的
現在這個項目有6個模塊
每個模塊都有百萬數據,現在要啟動偽靜態功能,首先咱們這套框架自帶的URL規則是可以實現的。
通過配置URL規則,然后修改rewrite.php文件,但是這個流程是需要在修改后,通過內容維護->指定模塊->更新內容URL才可以實現。
我這6個模塊中的前端模板中有通過 {module},{table}{mform},等咱們系統支持的模板標簽進行數據的讀取,我看了這些數據源都是通過核心Core/View.php 來進行解析和實現的,我想要實現的是修改一下代碼
在這個data讀取的根源部分,處理項目的偽靜態規則
回復迅睿框架創始人
以下是目前改動的代碼
系統的:
我覺得你走遠了,思路沒對,循環標簽中的url你完全可以使用自定義函數來完成,比如先定義一個函數
然后通過module等等的循環標簽調用函數就行了
----------------------------------
還可以使用自定義模板標簽實現
參考文檔:《自定義模板解析標簽》
回復迅睿框架創始人
用自定義函數效率才是最高的
回復迅睿框架創始人
肯定不要改不能修改的文件,影響性能
這種教材性回復 為什么都不公開查看呢。不然后續有人遇到問題了,還是要重新提問多麻煩,
看著蛋疼
好像匿名貼就是這樣,哈哈
回復@小黃人 18html.com