Collapsing columns

From Joomla! Documentation

Revision as of 04:38, 28 January 2008 by Chris Davenport (talk | contribs) (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 ...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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; ?>