Difference between revisions of "Collapsing columns"

From Joomla! Documentation

(New page: 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 ...)
 
m (Added some useful references)
Line 1: Line 1:
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.
+
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, 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, then you could use this code:
Line 56: Line 56:
 
<?php endif; ?>
 
<?php endif; ?>
 
</source>
 
</source>
 +
==See also==
 +
* [[php:if|PHP ''if'' statement]]
 +
* [[php:else|PHP ''else'' statement]]
 +
* [[php:elseif|PHP ''elseif'' statement]]
 +
* [[php:alternative-syntax|Alternative syntax for PHP control structures]]
 +
* [[Operators for use with the countModules function]]

Revision as of 10:27, 28 January 2008

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, then 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 divs 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 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[edit]