Расширенные условные позиции модуля на joomla

У меня есть поле, которое содержит три позиции модуля внутри. Теперь цель состоит в том, чтобы когда позиция модуля загружалась одна, ее ширина должна составлять 100% поля; когда загружены две позиции модулей, ширина каждого из них должна быть 50%; и наконец, когда все три позиции загружены, на каждой должно быть по 33%. Как я могу установить эти условия с наименьшим кодированием? мой код теперь выглядит примерно так:

<?php if ($this->countModules( 'user1 or user2 or user3' )) : ?>
<div style="width:860px; margin:10px auto;">
<?php if ($this->countModules( 'user3' )) : ?>
   <div style="width:33%; float:left; min-height:100px;"><jdoc:include type="modules" name="user3" style="xhtml" /></div>
<?php endif; ?> 
<?php if ($this->countModules( 'user2' )) : ?>
   <div style="width:34%; float:left; min-height:100px;"><jdoc:include type="modules" name="user2" style="xhtml" /></div>
<?php endif; ?> 
<?php if ($this->countModules( 'user1' )) : ?>
   <div style="width:33%; float:left; min-height:100px;"><jdoc:include type="modules" name="user1" style="xhtml" /></div>
<?php endif; ?>
</div>
<?php endif; ?>


подробнее:

Я думаю определить каждое особое условие, но таким образом я не знаю, как сравнивать "три" (или более) позиции друг с другом. то есть я знаю, когда я хочу ِ Отобразить только одну из двух позиций (а не обе), я должен использовать это:

<?php if ($this->countModules( 'user1 xor user2' )) : ?>>

Но если я хочу сравнить одну позицию с двумя другими позициями одновременно; Какой будет код? что-то похожее на это: ?

<?php if ($this->countModules( 'user1 xor user2 or user3' )) : ?>

в приведенном выше коде я хочу показать только user1 или только одну из позиций user2 или user3. Это правда?

Спасибо


person DummyBeginner    schedule 17.07.2011    source источник


Ответы (2)


Это намного проще: на секунду забудьте о joomla-countModules-фанки. Тогда вы можете довольно быстро получить количество модулей:

$nbColumns = (bool) $this->countModules( 'user1' ) + (bool) $this->countModules( 'user2' ) + (bool) $this->countModules( 'user3' );
$widthColumn = 100.0 / $nbColumns;

Преобразование coutModules-Return в логическое значение — это ярлык для $this->countModules( 'user1' ) ? 1 : 0.

person giraff    schedule 18.07.2011

Кроме того, это должно быть возможно с помощью простого HTML/CSS. Напомню, что если сделать таблицу с размером столбца "100%" и фиксированной шириной, браузер автоматически масштабирует ее, чтобы соответствовать количеству столбцов:

<table style="width:400px;">
 <tr>
   <td width="100%">
     cell 1
   </td>
   <td width="100%">
    cell2
   </td>
  </tr>
</table>

Я сомневаюсь, что это HTML-Standard-Compliant, хотя...

person giraff    schedule 18.07.2011