在開發一個可以有多個前端主題的網站時,我正在尋找一種方法來允許後端用戶手動將代碼注入到頭部和主體中。兩個使用情況如下:Yii2添加到頭()和endBody()
案例1 - 樣式
- 在後端,用戶選擇一個主題。
- 用戶喜歡這個主題,但想鏈接一個不同的顏色。
- 而不是複製和修改主題,用戶可以設置自定義代碼在
<head>
標記末尾執行。
案例2 - 腳本
- 用戶要添加自定義JavaScript結束的文檔,但需要額外的JavaScript庫爲好。
- 而不是複製和修改主題,用戶可以設置自定義代碼在
<body>
標籤處執行。
據我所知,這兩種特殊情況下,可以實現(部分)配合使用的registerCss
和registerJs
但這些自動換行無論是傳遞給他們<style>
或<script>
標籤。我希望有一種方法可以直接將任何指示直接注入head()
或endBody()
方法中。這背後的原因是我不想限制用戶可以注入的東西(可能頭部需要腳本標籤)。
目前,我只是存儲在PARAMS碼到要添加的然後手動包括他們在每個主題如下:
<?php $this->endBody() ?>
<?= $this->params['theme_include_body_end'] ?>
這在創建主題時,是不可取的,因爲它可以很容易被遺忘。我想找到一種方法來自動追加我的參數值到endBody()調用,所以無論何時endBody()被調用,我的代碼都包含在內(head()調用相同)。
這是一個很好的開始,但是當我嘗試用我的模塊來實現它時,它會崩潰。由於存在後端和前端模塊,因此我無法在組件級別設置視圖,否則它將應用於這兩個模塊。我需要在模塊中設置視圖類。如果我這樣做,我不能從控制器設置injectToHeadEnd屬性。任何想法調整這與多個模塊工作? – justinvoelker
我不能解決你的問題:你爲什麼不能設置? )你的控制器不在模塊中? – IStranger
控制器位於模塊內,但配置文件適用於整個應用程序。我想我得到了這個工作。我必須在我的模塊init()中設置視圖類如下:'Yii :: $ app-> components = ['view'=> ['class'=>'\ common \ components \ View']];'然後,我可以按照您的指示設置注入的代碼,但是,因爲我正在重寫模塊中的視圖,所以我的IDE抱怨它是一個未定義的字段。雖然IDE認爲它是未定義的,但仍然有效。 – justinvoelker