magento後臺靜態頁面如何擴展引用{{}}指令

在定義cms page/block 或者郵件模板時,可以使用{{…}}這樣的語句動態執行一些php代碼,返回一些內容,代替{{…}}.

指令名 指令參數 作用
media url 得到app/media下的資源。如{{media url=”banner/focus/shopping-cart.jpg”}}將返回http://yourdomain/media/banner/focus
/shopping-cart.jpg
skin url 得到您配置的theme下的資源。如{{skin url=”images/banner/focus/shopping-cart.jpg”}}將返回http://yourdomain/skin/
frontend/default/yourtheme/images/banner/focus/
shopping-cart.jpg
store url 得到url全路經。如{{store url=’about-us’}}將返回http://yourdomain/about-us
var 參數名稱 在使用cms/email模板時,可以向它傳一些參數,var用在取這些參數值。請參考下面的擴展實例
block type,id 得到我們已定義的好的block裏的html內容如:{{block type=”customer/form_login”
name=”customer_form_login” template=”customer/form/login.phtml”}}輸出此block的html內容,一般爲內容block,不是容器block.
{{block id=”global_footer_links”}}輸出靜態cms block標示符爲global_footer_links的html
layout area,handle block指令只能輸出內容block,不能輸出容器block,此指令用來輸出容器block,使用實例參考下面分析
htmlescape var,allowed_tags 您試一下:{{htmlescape var=”<b>fgfdgfdg</b>”
allowed_tags=’b'}}就知道此指令的作用了

layout 指令的使用

在page.xml中定義如下handle:

01
02
03
04
05
06
07
08
09
10
<layout_test>
<block type=”core/text_list” name=”content” output=”toHtml”>
<block type=”cms/block” name=”cms_test_1″>
<action method=”setBlockId”><block_id>global_footer_links</block_id></action>
</block>
<block type=”cms/block” name=”cms_test_2″>
<action method=”setBlockId”><block_id>global_footer_links</block_id></action>
</block>
</block>
</layout_test>

然後使用:{{layout handle=”layout_test” }}輸出block content中的html內容。注意要定義好最頂層的output方法。area默認值爲:frontend.

怎麼向cms/email模板中傳入參數,供var使用

1、向cms page/block中傳入參數
輸出cms page html內容的是:Mage_Cms_Block_Page
輸出cms page html內容的是:Mage_Cms_Block_Block
要向cms page/block中傳入參數,必段重寫出這兩個類,怎樣重寫block,
重寫新的Page Block:

01
02
03
04
05
06
07
08
09
10
11
class Youthor_Cms_Block_Page extends Mage_Cms_Block_Page
{
protected function _toHtml()
{
$processor = Mage::getModel(‘core/email_template_filter’);
$processor ->setVariables( array (‘store’ => Mage::app()->getStore(), ‘test’ => ‘test_value’));
$html = $processor ->filter( $this ->getPage()->getContent());
$html = $this ->getMessagesBlock()->getGroupedHtml() . $html ;
return $html ;
}
}

重新寫的Block 的Block代碼類似。那麼這樣就可以在cms page/block中的內容中使用{{var test}}和{{var store.getConfig(‘web/secure/base_link_url’)}} ,相當執行Mage::app()->getStore()->getConfig(‘web/secure /base_link_url’)這樣就可以調用到系統配置中的任何配置參數了。

2、向email模板中傳入參數
在Mage_Customer_Model_Customer 類中的sendNewAccountEmail方法中有如下一段代碼,用於發送email:

1
2
3
4
5
6
7
8
Mage::getModel(‘core/email_template’)
->setDesignConfig( array (‘area’=>’frontend’, ‘store’=> $storeId ))
->sendTransactional(
Mage::getStoreConfig( $types [ $type ]),
Mage::getStoreConfig(self::XML_PATH_REGISTER_EMAIL_IDENTITY),
$this ->getEmail(),
$this ->getName(),
array (‘customer’ => $this , ‘back_url’ => $backUrl ));

第4行代碼說明使用那一個郵件模板,第5行說明發送都,6行要發到那個email中,7接收者的姓名。

第8行中就是向模板中傳遞參數了。那麼在郵件模板html中就可以使用{{var customer.name}} 相當執行$customer->getName().
3、向兩者共同傳入參數
有時一些參數在郵件模板/cms page/block內容中都要使用。那麼我們可以重寫:Mage_Core_Model_Email_Template_Filter.重寫代碼如下:

1
2
3
4
5
6
7
class Youthor_Core_Model_Email_Template_Filter extends Mage_Core_Model_Email_Template_Filter
public function __construct()
{
parent::__construct();
$this ->setVariables( array (‘store’ => Mage::app()->getStore(), ‘test’ => ‘test_value’));
}
}

我們在構造方法中加入變量,那麼只要實例化的任何對象都可以使用。

擴展自己的指令:
假設需求:在cms page/block都需求這樣的指令{{pn id=’6′}} pn(product name)根據產品的id得到產品的名稱,重寫Mage_Core_Model_Email_Template_Filter

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
class Youthor_Core_Model_Email_Template_Filter extends Mage_Core_Model_Email_Template_Filter
public function __construct()
{
parent::__construct();
$this ->setVariables( array (‘store’ => Mage::app()->getStore(), ‘test’ => ‘test_value’));
}
public function pnDirective( $construction )
{
$params = $this ->_getIncludeParameters( $construction [2]);
$id = $params [ 'id' ];
$product = Mage::Model(‘catalog/product’);
$product ->load( $id );
return $product ->getName();
}
}

 

 

 

轉自亂亂的外貿

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章