Collapsing columns: Difference between revisions

From Joomla! Documentation

Batch1211 (talk | contribs)
No edit summary
Cmb (talk | contribs)
Several markup changes.
 
Line 1: Line 1:
<includeonly>==Collapsing columns==</includeonly>
<includeonly>==Collapsing columns==</includeonly>


A common requirement when designing web pages in Joomla! is for a Module position to be removed when no Modules are enabled in that position so that the space is available for other page elements. The region removed is referred to as a  "collapsed column"This can be achieved using the <code>countModules</code> function.
A common requirement when designing web pages in Joomla! is for a Module position to be removed when no Modules are enabled in that position so that the space is available for other page elements. The region removed is referred to as a  "collapsed column." This can be achieved using the ''countModules'' function.


For example, if you want to include a "<code>user1</code>" module position only if there are modules enabled in that position, then you could use this code:
For example, if you want to include a ''user1'' module position only if there are modules enabled in that position, you could use this code:
<source lang="php">
<syntaxhighlight lang="php">
<?php if ($this->countModules( 'user1' )) : ?>
<?php if ($this->countModules( 'user1' )) : ?>
   <div class="user1">
   <div class="user1">
Line 10: Line 10:
   </div>
   </div>
<?php endif; ?>
<?php endif; ?>
</source>
</syntaxhighlight>


Notice that the <code><jdoc:include /></code> tag and its surrounding <code>&lt;div&gt;</code> are only included if the <code>countModules</code> call returns a non-zero value (the PHP <code>if</code> statement treats zero as being '''false''' and any non-zero value as being '''true'''.
Notice that the ''<jdoc:include />'' tag and its surrounding ''&lt;div&gt;'' are only included if the ''countModules'' call returns a non-zero value. (The PHP ''if'' statement treats zero as being ''false'' and any non-zero value as being ''true''.)


Sometimes you may want a pair of module positions to collapse either singly or together.
Sometimes you may want a pair of module positions to collapse either singly or together.
<source lang="php">
<syntaxhighlight lang="php">
<?php if ($this->countModules( 'user1 or user2' )) : ?>
<?php if ($this->countModules( 'user1 or user2' )) : ?>
   <div class="user1user2">
   <div class="user1user2">
Line 27: Line 27:
   </div>
   </div>
<?php endif; ?>
<?php endif; ?>
</source>
</syntaxhighlight>
Notice how the region (which is styled by the CSS class "<code>user1user2</code>") is only output if either '<code>user1</code>' or '<code>user2</code>', '''or both''', have at least one Module enabled.
Notice how the region (which is styled by the CSS class ''user1user2'') is only output if either ''user1'' or ''user2'', '''or both''', have at least one Module enabled.


If you want a divider to separate the two Module positions then you must be careful to only output the divider if '''both''' Module positions have Modules enabled in them.  For example,
If you want a divider to separate the two Module positions then you must be careful to only output the divider if '''both''' Module positions have Modules enabled in them.  For example,
<source lang="php">
<syntaxhighlight lang="php">
<?php if ($this->countModules( 'user1 or user2' )) : ?>
<?php if ($this->countModules( 'user1 or user2' )) : ?>
   <div class="user1user2">
   <div class="user1user2">
Line 47: Line 47:
   </div>
   </div>
<?php endif; ?>
<?php endif; ?>
</source>
</syntaxhighlight>


====See also====
====See Also====
* [[php:if|PHP ''if'' statement]]
* [[php:if|PHP ''if'' statement]]
* [[php:else|PHP ''else'' statement]]
* [[php:else|PHP ''else'' statement]]

Latest revision as of 16:47, 10 October 2022


A common requirement when designing web pages in Joomla! is for a Module position to be removed when no Modules are enabled in that position so that the space is available for other page elements. The region removed is referred to as a "collapsed column." This can be achieved using the countModules function.

For example, if you want to include a user1 module position only if there are modules enabled in that position, you could use this code:

<?php if ($this->countModules( 'user1' )) : ?>
  <div class="user1">
    <jdoc:include type="modules" name="user1" style="xhtml" />
  </div>
<?php endif; ?>

Notice that the <jdoc:include /> tag and its surrounding <div> are only included if the countModules call returns a non-zero value. (The PHP if statement treats zero as being false and any non-zero value as being true.)

Sometimes you may want a pair of module positions to collapse either singly or together.

<?php if ($this->countModules( 'user1 or user2' )) : ?>
  <div class="user1user2">
    <?php if ($this->countModules( 'user1' )) : ?>
      <jdoc:include type="modules" name="user1" style="xhtml" />
    <?php endif; ?>

    <?php if ($this->countModules( 'user2' )) : ?>
      <jdoc:include type="modules" name="user2" style="xhtml" />
    <?php endif; ?>
  </div>
<?php endif; ?>

Notice how the region (which is styled by the CSS class user1user2) is only output if either user1 or user2, or both, have at least one Module enabled.

If you want a divider to separate the two Module positions then you must be careful to only output the divider if both Module positions have Modules enabled in them. For example,

<?php if ($this->countModules( 'user1 or user2' )) : ?>
  <div class="user1user2">
    <?php if ($this->countModules( 'user1' )) : ?>
      <jdoc:include type="modules" name="user1" style="xhtml" />
    <?php endif; ?>

    <?php if ($this->countModules( 'user1 and user2' )) : ?>
      <div class="divider"></div>
    <?php endif; ?>

    <?php if ($this->countModules( 'user2' )) : ?>
      <jdoc:include type="modules" name="user2" style="xhtml" />
    <?php endif; ?>
  </div>
<?php endif; ?>

See Also