--=REKLAMA=--

Zliczanie modułów w wielu pozycjach modułów

Z Joomla!WikiPL

Metoda countModules może zostać użyta, by określić ilość modułów w więcej niż jednej pozycji. Możliwe jest również wykonanie bardziej zaawansowane wyliczeń.

Argumentem funkcji countModules jest zwykle nazwa pojedynczej pozycji modułów. W takim przypadku funkcja zwraca ilość modułów znajdujących się aktualnie w tej pozycji. Można jednak wykonać proste operacje logiczne, porównawcze lub arytmetyczne na dwóch lub większej ilości pozycji modułów.

Na przykład, aby określić całkowitą ilość modułów włączonych w pozycjach user1' oraz 'user2', możesz użyć następującej funkcji:

$this->countModules( 'user1 + user2' );

Chociaż zwykłe operatory arytmetyczne (+. -. *, /) działają zgodnie z oczekiwaniem, to nie są tak przydatne, jak operatory logiczne 'and' oraz 'or'.

Na przykład, aby określić czy w pozycji 'user1' oraz w pozycji 'user2', a więc czy obie pozycje razem mają przynajmniej jeden włączony moduł, możesz użyć instrukcji:

$this->countModules( 'user1 and user2' );

Ostrożnie: Bardzo łatwo jest o pomyłkę podobną jak poniżej:

$this->countModules( 'user1' and 'user2' );

Istnieje bardzo duże prawdopodobieństwo, że bez względu na ilość modułów faktycznie włączonych w obu pozycjach zostanie zwrócona wartość FALSE, więc trzeba sprawdzić, co wpisujemy jako argument funkcji countModules. Między każdym elementem napisu musi być dokładnie jedna spacja. Na przykład, napis 'user1+user2' nie zwróci poprawnej wartości, ponieważ znak '+' musi być oddzielony odstępami. Podobnie, jeśli pozostawimy dwie spacje 'user1  +  user2', PHP wyświetli komunikat błędu [Parse error: syntax error, unexpected T_LNUMBER in... : eval()'d code on line 1], ponieważ znak '+' zostanie oddzielony więcej niż jednym znakiem odstępu (co ciekawe - w pierwszym przypadku otrzymamy tylko złudną, nieprawdziwą informację, w drugim - komunikat błędu!).

Przykład: Pozycje modułów user1 i user2 można wyświetlać w tym samym obszarze, ale obszar może nie być wyświetlony w ogóle, jeśli w żadnej z pozycji nie będzie włączonego modułu.

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


Przykład: Pozycje modułów user1 i user2 zostaną umieszczone w bocznym pasku jeden pod drugim w odrębnych ramkach, z separatorem między nimi. Ale jeśli moduł będzie włączony tylko w jednej z tych pozycji, to separator i druga ramka znajdą się w kodzie wynikowym strony niepotrzebnie. Ponadto, jeśli modułu nie będzie ani w pozycji user1, ani w pozycji user2, to polecenie jdoc:include nie zostanie wykonane.

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

Zwróć uwagę, że pierwsza instrukcja countModules określa, że jeśli są jakieś moduły, to należy wykonać kolejne instrukcje. Druga instrukcja zakłada, że jeżeli są jakieś moduły w 'user1', należy je umieścić w ramce xhtml. Trzecia instrukcja z kolei ustala, że jeśli zarówno w pozycji user1, jak i w pozycji user2 są jakieś moduły włączone, należy umieścić na stronie element div (z zieloną linią rozdzielającą). Wreszcie czwarta instrukcja powoduje, że jeśli w pozycji 'user2' są włączone jakieś moduły, to zostaną wyświetlone w ramce xhtml.

Dziękujemy za wkład

» Stefan Wajda [zwiastun],