聯系官方銷售客服
1835022288
028-61286886
請教一個代碼實現:在hooks里如何實現生成首頁靜態文件。
思路:在“module_content_after”內容發布后掛鉤點中執行生成首頁靜態代碼。
問題:以下代碼從“dayrui/Core/Controllers/Home.php”代碼中復制過來的,雖然成功生成了index.html文件,但是里邊的內容不對,檢查了下發現主要是
\Phpcmf\Service::V()->display('index.html');方法并沒有渲染出index模板內容,而是渲染了“/dayrui/Core/Views/share_list.html"的內容。
請問各路大神,應該如何修改才能實現內容發布后生成首頁靜態,謝謝。
附思路實現代碼:
\Phpcmf\Hooks::on('module_content_after', function($data, $old) { // 內容發布或者修改之后 ob_start(); \Phpcmf\Service::V()->assign([ 'indexc' => 1, 'fix_html_now_url' => defined('IS_MOBILE') && IS_MOBILE ? SITE_MURL : SITE_URL, ]); \Phpcmf\Service::V()->assign(\Phpcmf\Service::L('Seo')->index()); \Phpcmf\Service::V()->display('index.html'); $html = ob_get_clean(); // 開啟過首頁靜態時 if (SITE_INDEX_HTML) { if (defined('IS_MOBILE') && IS_MOBILE) { // 移動端,當移動端獨立域名情況下才生成靜態 if (SITE_MURL != SITE_URL) { file_put_contents(\Phpcmf\Service::L('html')->get_webpath(SITE_ID, 'site', 'mobile/index.html'), $html); } } else { // pc file_put_contents(\Phpcmf\Service::L('html')->get_webpath(SITE_ID, 'site', 'index.html'), $html); } } });
樓主的代碼完全錯誤的,一樓的代碼理論上應該是對的
回復@靠懸賞(設置懸賞)賺錢買授權
并沒有成功生成首頁,生成一個0kb的index.html,請大俠明示。
哥,你代碼太多了,改成我一樓梯寫的代碼啊,你為什么加一些無用的代碼啊,你這樣肯定是0kb啊
回復@靠懸賞(設置懸賞)賺錢買授權 還是不行啊,好像明白你意思了,相當于直接用這個函數訪問一下首頁,然后就會自動生成這個文件了,但實際并沒有生成,你可以測試一下。
另外你這個思路雖然可以解決需求,但相當于多了一次網絡請求,不如官方的那種直接讀取模板文件然后生成index.html內容效率高呀。
還是非常感謝你的回復。
pc和移動都有了,兩句話就搞定,不用那么多,多了反而無用
回復@百鬼夜行 感謝回復,測試并不能成功生成。
你要在hook里面二次開發,就不能使用控制器里面的代碼,只能用一樓的代碼,是最完美的了
回復@官方研發實習技術 謝謝官方技術,但是為什么實際使用中沒有生成靜態文件呢,直接訪問首頁是可以生成的。
這樣寫
回復@易學習 成功執行!有點奇怪官方dr_catcher_data函數是file_get_contents函數的加強版,不知道那個函數為什么沒有成功生成靜態首頁
可能一樓的兄弟加了10參數吧,我習慣用php自帶的函數,原理跟一樓一樣
回復@易學習
去掉10參數也不行,找到官方dr_catcher_data的定義了,可能是官方用了curl。但是我的服務器也是支持curl的。
可能是題外話了,但是強迫癥還是想研究清楚,請大家不吝賜教。
我不太懂程序,只是我經驗比較多而已,能實現就行,我從來不去研究為什么
新版程序已支持自動生成首頁了
最新版,首頁自動生成靜態,不起作用,是怎么回事?