Actions

Difference between revisions of "Collapsing columns"

From Joomla! Documentation

m (Added some useful references)
m (See also)
Line 56: Line 56:
 
<?php endif; ?>
 
<?php endif; ?>
 
</source>
 
</source>
==See also==
+
====See also====
 
* [[php:if|PHP ''if'' statement]]
 
* [[php:if|PHP ''if'' statement]]
 
* [[php:else|PHP ''else'' statement]]
 
* [[php:else|PHP ''else'' statement]]

Revision as of 13:49, 22 May 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