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