Joomla-开源天空

首页 专栏热点 Joomla! 应用 使用自定义的模块外观chrome


使用自定义的模块外观chrome

E-mail

原文地址:http://docs.joomla.org/Applying_custom_module_chrome 

 

To define custom Module chrome in your template you need to create a file called modules.php in your template html directory. For example, this might be [path-to-Joomla!]/templates/my_template/html/modules.php.

In this file you should define a function called modChrome_STYLE where 'STYLE' is the name of your custom Module chrome. This function will take three arguments, $module, &$params, and &$attribs, as shown:

  1. <span class="kw2"><?php</span>
  2. <span class="kw2">function</span> modChrome_STYLE<span class="br0">(</span> <span class="re0">$module</span>, &amp;<span class="re0">$params</span>, &amp;<span class="re0">$attribs</span> <span class="br0">)</span> <span class="br0">{</span>
  3. <span class="coMULTI">/* chromed Module output goes here */</span>
  4. <span class="br0">}</span>
  5. <span class="kw2">?></span>

Within this function you can make use of any of the available Module properties (i.e. the fields in the jos_modules table in the Joomla! database on your server) for that Module, but the main ones you are likely to need are $module->content, $module->showtitle and $module->title. $module->showtitle is a Boolean variable, so is either true (when the Module should be shown) or false (when it shouldn't be shown). $module->content and $module->title will return the main Module content and the Module title respectively.

The function is a normal PHP function and so can use any regular PHP code. One common example is to use an if statement to check the value of $module->showtitle, and then include the title or not accordingly:

  1. <span class="kw2"><?php</span>
  2. <span class="kw1">if</span> <span class="br0">(</span><span class="re0">$module</span>-><span class="me1">showtitle</span><span class="br0">)</span> <span class="br0">{</span>
  3. <span class="kw3">echo</span> <span class="st0">'<h2>'</span> .<span class="re0">$module</span>-><span class="me1">title</span> .<span class="st0">'</h2>'</span>;
  4. <span class="br0">}</span>
  5. <span class="kw2">?></span>

The Module parameters are accessed using the $params object. For example, it is possible to assign a Module class suffix to a module in the backend of your Joomla! site; this is then stored in the parameters for that Module as moduleclass_sfx. To create a <div> with a class determined by the Module class suffix, you would use:

  1. <div <span class="kw2">class</span>=<span class="st0">"<?php echo $params->get( 'moduleclass_sfx' ); ?>"</span>>
  2. <!-- div contents -->
  3. </div>

Custom chrome attributes

It is also possible to pass further attributes into the Module chrome function using the same <jdoc:include /> statement that sets the Module chrome. These additional attributes can be anything you like, and are stored in the $attribs array. Take the following example Module chrome function:

  1. <span class="kw2"><?php</span>
  2. <span class="kw2">function</span> modChrome_custom<span class="br0">(</span> <span class="re0">$module</span>, &amp;<span class="re0">$params</span>, &amp;<span class="re0">$attribs</span> <span class="br0">)</span> <span class="br0">{</span>
  3. <span class="kw1">if</span> <span class="br0">(</span><span class="kw3">isset</span><span class="br0">(</span> <span class="re0">$attribs</span><span class="br0">[</span><span class="st0">'headerLevel'</span><span class="br0">]</span> <span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
  4. <span class="re0">$headerLevel</span> = <span class="re0">$attribs</span><span class="br0">[</span><span class="st0">'headerLevel'</span><span class="br0">]</span>;
  5. <span class="br0">}</span> <span class="kw1">else</span> <span class="br0">{</span>
  6. <span class="re0">$headerLevel</span> = <span class="nu0">3</span>;
  7. <span class="br0">}</span>
  8.  
  9. <span class="kw1">if</span> <span class="br0">(</span><span class="kw3">isset</span><span class="br0">(</span> <span class="re0">$attribs</span><span class="br0">[</span><span class="st0">'background'</span><span class="br0">]</span> <span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span>
  10. <span class="re0">$background</span> = <span class="re0">$attribs</span><span class="br0">[</span><span class="st0">'background'</span><span class="br0">]</span>;
  11. <span class="br0">}</span> <span class="kw1">else</span> <span class="br0">{</span>
  12. <span class="re0">$background</span> = <span class="st0">'blue'</span>;
  13. <span class="br0">}</span>
  14.  
  15. <span class="kw3">echo</span> <span class="st0">'<div class="'</span> .<span class="re0">$params</span>-><span class="me1">get</span><span class="br0">(</span> <span class="st0">'moduleclass_sfx'</span> <span class="br0">)</span> .<span class="st0">'" >'</span>;
  16.  
  17. <span class="kw1">if</span> <span class="br0">(</span><span class="re0">$module</span>-><span class="me1">showtitle</span><span class="br0">)</span> <span class="br0">{</span>
  18. <span class="kw3">echo</span> <span class="st0">'<h'</span> .<span class="re0">$headerLevel</span> .<span class="st0">'>'</span> .<span class="re0">$module</span>-><span class="me1">title</span> .<span class="st0">'</h'</span> .<span class="re0">$headerLevel</span> .<span class="st0">'>'</span>;
  19. <span class="br0">}</span>
  20.  
  21. <span class="kw3">echo</span> <span class="st0">'<div class="'</span> .<span class="re0">$background</span> .<span class="st0">'">'</span>;
  22. <span class="kw3">echo</span> <span class="re0">$module</span>-><span class="me1">content</span>;
  23. <span class="kw3">echo</span> <span class="st0">'</div'</span>>;
  24.  
  25. <span class="kw3">echo</span> <span class="st0">'</div>'</span>;
  26. <span class="br0">}</span>
  27. <span class="kw2">?></span>

You would then set the values for background and headerLevel in the <jdoc:include /> statement as shown below. If no values are set, the attributes default to 'blue' and '3' respectively.

Passing attributes to Module chrome from <jdoc:include />
<jdoc:include /> statement Output

<jdoc:include type="modules" name="user1" />

  1. <span class="sc2"><span class="kw2"><div></span></span>
  2. <span class="sc2"><span class="kw2"><h3></span></span><span class="sc2"><span class="coMULTI"><!-- Module title --></span></span><span class="sc2"><span class="kw2"></h3></span></span>
  3.  
  4. <span class="sc2"><span class="kw2"><div</span> <span class="kw3">class</span>=<span class="st0">"blue"</span><span class="kw2">></span></span>
  5. <span class="sc2"><span class="coMULTI"><!-- Module content --></span></span>
  6. <span class="sc2"><span class="kw2"></div></span></span>
  7. <span class="sc2"><span class="kw2"></div></span></span>

<jdoc:include type="modules" name="user1" background="green" />

  1. <span class="sc2"><span class="kw2"><div></span></span>
  2. <span class="sc2"><span class="kw2"><h3></span></span><span class="sc2"><span class="coMULTI"><!-- Module title --></span></span><span class="sc2"><span class="kw2"></h3></span></span>
  3.  
  4. <span class="sc2"><span class="kw2"><div</span> <span class="kw3">class</span>=<span class="st0">"green"</span><span class="kw2">></span></span>
  5. <span class="sc2"><span class="coMULTI"><!-- Module content --></span></span>
  6. <span class="sc2"><span class="kw2"></div></span></span>
  7. <span class="sc2"><span class="kw2"></div></span></span>

<jdoc:include type="modules" name="user1" headerLevel="1" background="yellow" />

  1. <span class="sc2"><span class="kw2"><div></span></span>
  2. <span class="sc2"><span class="kw2"><h1></span></span><span class="sc2"><span class="coMULTI"><!-- Module title --></span></span><span class="sc2"><span class="kw2"></h1></span></span>
  3.  
  4. <span class="sc2"><span class="kw2"><div</span> <span class="kw3">class</span>=<span class="st0">"yellow"</span><span class="kw2">></span></span>
  5. <span class="sc2"><span class="coMULTI"><!-- Module content --></span></span>
  6. <span class="sc2"><span class="kw2"></div></span></span>
  7. <span class="sc2"><span class="kw2"></div></span></span>
 

发表您的文章评论

您的姓名 (昵称)
标题:
评分: 很差一般较好很好
评论:
验证码:
请输入验证码

» » 登录 »   -   -