PDA

Zobacz pełną wersję : Układ kolumnowy: bez logowania jedna kolumna po zalogowaniu dwie kolumny



difrost
23-11-2008, 22:44
Witam,
przeglądałem tematy związane z funkcją mosCountModules jak również sprawdzałem w pomocy jednak nie do końca odpowiedziały one na mój problem.

Sytuacja wygląda dosyć prozaicznie ale ja nie potrafię jej przeskoczyć.
Używam własnoręcznie przygotowanego templatu pod 1.0.15.
strona oparta jest na div'ach, które działają dobrze do pewnego momentu
strona bez logowania ma pokazywać układ jednokolumnowy wyświetlający zawartość podstron
po zalogowaniu układ zmienia się na dwukolumnowy z uwagi na włączenie opcji dostępnych tylko po zalogowaniu. pojawia się prawa kolumna, która zawiera menu użytkownika, link do aktualności i książki adresowej.
jedyny moment, w którym po zalogowaniu się jest jedna kolumna to sytuacja podczas dodawania artykułu (z uwagi na szerokość strony i edytora jak również bezcelowości pokazywania innych elementów menu, które w tym czasie nie sa dostępne do czasu zapisana lub anulowania wpisywania tresci)kod jaki napisałem wygląda następująco,

<div id="kontent">
<?php
if($option==com_frontpage) {
?>
<div id="lewa">TRESCI NA FRONTPAGE</div>
<div id="prawa">
<?php if (mosCountModules('right')) { ?>
<?php mosLoadModules('right');?>
<?php } ?>
</div><div class="clear"></div>
<?php
} elseif($option=="com_content" and $task=="new") {
?>
<div id="central"><?php mosMainBody(); ?></div>
<?php
} else {
?>
<div id="lewa"><?php mosMainBody(); ?></div>
<div id="prawa">
<?php if (mosCountModules('right')) { ?>
<?php mosLoadModules('right');?>
<?php } ?>
</div><div class="clear"></div>
<?php } ?>
</div>Problem polega na tym, że div "lewy" jak i div "prawy" maja zdefiniowaną szerokość co powoduje, że jest puste miejsce po prawej przed zalogowaniem.

Czy ktoś zna może rozwiązanie jak zrobić aby przed zalogowaniem na stronę treści wyświetlały się w divie "lewy" na całej szerokości diva "kontent" a po zalogowaniu pojawiały się dwie kolumny "lewa" i "prawa"?

Jak napisałem wcześniej to co znalazłem i testowałem nie bardzo mi pasuje gdyż odnosi się do sprawdzania czy są i ładowania w div "prawy" modułów. Niestety w divie "lewy" jest mosMainBody a tego jakoś nie daję ruszyć.

Będę wdzięczny za pomysły, rozwiązania czy sugestie.

moje
23-11-2008, 23:11
Jest taka możliwość, że miejsce, które jest puste było niewyświetlane :)

<?php if ( mosCountModules( 'right' ) <= 0) { ?>
<?php mosLoadModules ( 'right', -1 ); ?>
<?php } ?>A w twoim przypadku poprawnie powinna wyglądać tak:


<?php if (mosCountModules('right')) { ?>
<div id="prawa">
<?php mosLoadModules('right');?>
</div>
<?php } ?>
Oraz między tagami head powinieneś mieć coś takiego:

<?php if ( mosCountModules( 'right' ) <= 0) { ?>
<style type="text/css" media="screen">
/* styl określający szerokość mosMainBody */
</style>
<?php } ?>

EDIT:

Osobiście zrobiłbym to tak:

<html>
<head>
...
<?php if ( mosCountModules( 'left' ) <= 0) { ?>
<style type="text/css" media="screen">
/* styl dla strony bez left */
</style>
<?php else if ( mosCountModules( 'right' ) <= 0) { ?>
<style type="text/css" media="screen">
/* styl dla strony bez right */
</style>
<?php else if (mosCountModules('left') + mosCountModules('right') <= 0) { ?>
<style type="text/css" media="screen">
/* styl dla strony bez right i left */
</style>
<?php } ?>
...
</head>
<body>
...
<?php if ( mosCountModules( 'right' ) <= 0) { ?>
<div id="lewa"><?php mosLoadModules ( 'left', -1 ); ?></div>
<?php } ?>
<div id="central"><?php mosMainBody(); ?></div>
<?php if ( mosCountModules( 'right' ) <= 0) { ?>
<div id="prawa">http://www.forumweb.pl/images/nums/1.png<?php mosLoadModules ( 'right', -1 ); ?></div>
<?php } ?>
...
</body>
</html>

difrost
23-11-2008, 23:29
I o to właśnie chodziło. Kombinowałem w tym kierunku ale zawsze gdzieś brakowało wykończenia. :) Bardzo dziękuję za pomoc !!!

A co się tyczy Twojego uzupełnienia to będę musiał je przeanalizować bo w pierwszym podejściu coś nie zadziałało.
Dzięki raz jeszcze :)