套用客製化模組區塊
From Joomla! Documentation
要在佈景主題中定義客製化的 模組區塊,您需要在佈景主題的html資料夾中,建立一個名為modules.php的檔案。例如,路徑可能是PATH_TO_JOOMLA/templates/TEMPLATE_NAME/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:
<?php
function modChrome_STYLE( $module, &$params, &$attribs )
{
/* chromed Module output goes here */
}
?>
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 title 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:
<?php
if ($module->showtitle)
{
echo '<h2>' .$module->title .'</h2>';
}
?>
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 class="<?php echo $params->get( 'moduleclass_sfx' ); ?>">
<!-- div contents -->
</div>
模組區塊參數
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:
<?php
function modChrome_custom( $module, &$params, &$attribs ) {
if (isset( $attribs['headerLevel'] ))
{
$headerLevel = $attribs['headerLevel'];
} else {
$headerLevel = 3;
}
if (isset( $attribs['background'] ))
{
$background = $attribs['background'];
} else {
$background = 'blue';
}
echo '<div class="' .$params->get( 'moduleclass_sfx' ) .'" >';
if ($module->showtitle)
{
echo '<h' .$headerLevel .'>' .$module->title .'</h' .$headerLevel .'>';
}
echo '<div class="' .$background .'">';
echo $module->content;
echo '</div>';
echo '</div>';
}
?>
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 |
---|---|
|
<div>
<h3><!-- Module title --></h3>
<div class="blue">
<!-- Module content -->
</div>
</div> |
|
<div>
<h3><!-- Module title --></h3>
<div class="green">
<!-- Module content -->
</div>
</div> |
|
<div>
<h1><!-- Module title --></h1>
<div class="yellow">
<!-- Module content -->
</div>
</div> |
更多關於傳遞參數到模組區塊的資訊,可以參考 jtopic:115953.