原文地址: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:
<span class="kw2"><?php</span> <span class="kw2">function</span> modChrome_STYLE<span class="br0">(</span> <span class="re0">$module</span>, &<span class="re0">$params</span>, &<span class="re0">$attribs</span> <span class="br0">)</span> <span class="br0">{</span> <span class="coMULTI">/* chromed Module output goes here */</span> <span class="br0">}</span> <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:
<span class="kw2"><?php</span> <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> <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>; <span class="br0">}</span> <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:
<div <span class="kw2">class</span>=<span class="st0">"<?php echo $params->get( 'moduleclass_sfx' ); ?>"</span>> <!-- div contents --> </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:
<span class="kw2"><?php</span> <span class="kw2">function</span> modChrome_custom<span class="br0">(</span> <span class="re0">$module</span>, &<span class="re0">$params</span>, &<span class="re0">$attribs</span> <span class="br0">)</span> <span class="br0">{</span> <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> <span class="re0">$headerLevel</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="kw1">else</span> <span class="br0">{</span> <span class="re0">$headerLevel</span> = <span class="nu0">3</span>; <span class="br0">}</span> <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> <span class="re0">$background</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="kw1">else</span> <span class="br0">{</span> <span class="re0">$background</span> = <span class="st0">'blue'</span>; <span class="br0">}</span> <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>; <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> <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>; <span class="br0">}</span> <span class="kw3">echo</span> <span class="st0">'<div class="'</span> .<span class="re0">$background</span> .<span class="st0">'">'</span>; <span class="kw3">echo</span> <span class="re0">$module</span>-><span class="me1">content</span>; <span class="kw3">echo</span> <span class="st0">'</div'</span>>; <span class="kw3">echo</span> <span class="st0">'</div>'</span>; <span class="br0">}</span> <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.
| <jdoc:include /> statement | Output |
|---|---|
|
<jdoc:include type="modules" name="user1" /> |
|
|
<jdoc:include type="modules" name="user1" background="green" /> |
|
|
<jdoc:include type="modules" name="user1" headerLevel="1" background="yellow" /> |
|



