PDA

Zobacz pełną wersję : countModules - jak to zrobić



srwsio
07-11-2009, 16:25
Witam
Mam taki oto problem.
Dziś zainstalowałem komponent forum Kunena. Chciałbym aby wyświetlał się on na całej szerokości strony więc wyłączyłem wyświetlanie odpowiednich modułów w momencie bycia na forum. Jednakże nie rozwiązało to problemu. Zresztą popatrzcie na kod

index.php


<div class="contentLayout">
<div class="sidebar1">
<jdoc:include type="modules" name="left" style="artblock" />
</div>
<div class="content">
<jdoc:include type="component" />
</div>
<div class="sidebar2">
<jdoc:include type="modules" name="right" style="artblock" />
</div>
</div>
css


.contentLayout .sidebar1
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 236px;
}


.contentLayout .content
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 711px;
}


.contentLayout .sidebar2
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 236px;
}
Zanim zajrzałem do css i dopatrzyłem się w czym tkwi błąd, pomyślałem że skorzystam z tytułowej funkcji countModules. Jednakże nie może ona zadziałać ponieważ jak widzimy środek ustawiony sztywno na 711px.

Czy istnieje takie wykorzystanie countModules żeby wyświetlił mi div'a w zależności od tego czy w pozycjach right i left jest jakiś moduł włączony?

Omg: nie potrafię się nawet wysłowić :)
Dokładnie chodzi mi o coś takiego:



if(countModules)
{
echo "tutaj tylko div środkowy ";
}
else
{
echo "tutaj wszystkie 3 kolumny";
}
za wszelką pomoc dziękuję z góry

Jola
07-11-2009, 17:53
Witam,
może wystarczy wykorzystać pełne możliwości funkcji countModules().
Przykład z szablonu bez:

countModules('user1 or user2 or right or top');

srwsio
07-11-2009, 21:01
Jolass uzylem juz funkcji conutModule do pozycji left i right. Sprawdzilem i dziala. funkcja nie wyswietla kolumn, czyli spelnia swoje zadanie. ewentualnie powiedzcie jak przerobic css, w sumie to tylko 3 klasy. naprawde przeszukalem juz te forum kilka razy. Gdybym znalazl jakas podpowiedz z ktora bym sobie poradzil nie prosilbym o pomoc.

Jola
07-11-2009, 21:20
Trzeba zdefiniować nową klasę (klasy) np. content_full o większej szerokości i wykorzystać php np.:

<?php if ($this->countModules('left and right')) {?>
<div class="content">
<?php
}
else{ ?>
<div class="content_full">
<?php } ?>To tylko przykład, można zdefiniować więcej warunków.
Można podejrzeć jak wykorzystują podmianę klas inne szablony.

srwsio
07-11-2009, 22:12
Dałem coś takiego i niestety tylko rozwaliło układ


<?
if ($this->countModules('left and right'))
{$np1="content2";}
else
{$np1="content";}
?>
<div class="contentLayout">
<div class="sidebar1">
<jdoc:include type="modules" name="left" style="artblock" />
</div>
<div class="<? $np1 ?>">
<jdoc:include type="component" />
</div>
<div class="sidebar2">
<jdoc:include type="modules" name="right" style="artblock" />
</div>
</div>do css dodałem

.contentLayout .content2
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 100%;
}
jakieś pomysły dalej :) ?

ok przepraszam wyczyściłem cache i teraz ?? dziwna sprawa w momencie wejścia na forum efekt mam taki jaki chciałem działa :D ale niestety strona frontowa i inne artykuły wszystko po rozwalane
tzn
lewa i środkowa są obok siebie a prawą wrzuca mi pod lewą

Jola
07-11-2009, 23:30
Zrobiłeś tak: jeśli Joomla ma coś do wyświetlenia w pozycji left i right to wyświetl szerszy -100% - div (sprzeczność).
Zapomniałeś, że niezależnie od tego czy jest pozycja left i right w kodzie każesz je wyświetlać (zdefiniowana szerokość). Należy do klas sidebar1 i sidebar2 dodać warunki wyświetlania

srwsio
08-11-2009, 11:06
<div class="contentLayout">
<?if ($this->countModules('left and right'))?>
<div class="sidebar1">
<jdoc:include type="modules" name="left" style="artblock" />
</div>
<div class="content">
<jdoc:include type="component" />
</div>
<div class="sidebar2">
<jdoc:include type="modules" name="right" style="artblock" />
</div>
<?} else { ?>
<div class="content2">
<jdoc:include type="component" />
</div>
<?} ?>
</div>to kolejna próba. Iteraz to ja już tego nie rozumiem
powyższa instrukcja mówi :
jeśli Joomla ma coś do wyświetlenia w pozycji left i right to wyświetl wszystkie divy takie jakie powinny być w oryginale, jeśli nie wyświetl tylko jeden div z zawartością komponent ( w tym przypadku tylko forum)
http://img52.imageshack.us/i/kunena1.gif/http://img22.imageshack.us/i/kunena2.gif/
http://img22.imageshack.us/i/kunena2.gif/http://img52.imageshack.us/i/kunena1.gif/
czyli zgodnie z powyższym powinno być wszytko ok ale nie jest. jak widać wyświetla oba założenia pętli. dodatkowo w pozycji right wyświetla
countModules('left and right'))?>jakieś pomysły dalej :confused:

Jola
08-11-2009, 17:51
Zgubiłeś {

<?if ($this->countModules('left and right')){?>
Sprawdź jeszcze ustawienia css dla klasy contentLayout.

srwsio
08-11-2009, 18:25
dodałem { (ale czemu nie pokazało błędu skoro mam display_errors włączone) dalej bez zmian, ja już sił nie mam


.contentLayout
{
margin-bottom: 1px;
width: 1184px;
position: relative;
}
jeśli chcesz mogę przesłać Tobie zipa z themem i jakbyś miała chwilkę byś zobaczyła co i jak ?

ps. coś mi się zdaje że nie tak coś z tą funkcją count jest
mam tak: Joomla 1.5.14 , PHP : 5.2.8 MySQL : 5.1.30-community-log

Jola
08-11-2009, 18:28
display_errors dotyczy błędów php a nie css
Możesz dołączyć zipa do wiadomości.

srwsio
08-11-2009, 18:42
plik w załączniku - wielkie dzięki za pomoc

Jola
08-11-2009, 23:07
Właściwie to nie wiem co CI nie działa. Trzeba pamiętać że elementy wyświetlane wewnątrz komponentów mają swoje ustawienia css. Przy takich przeróbkach niezbędna jest przeglądarka Firefox + dodatek Firebug.
Dołączam zmieniony index.php.

srwsio
09-11-2009, 18:09
Właściwie to nie wiem co CI nie działa.

Ba bo trza umić. Dzięki wielkie plik podmieniony i działa. Ale czemu moje rozwiązania nie działały? no cóż ? już nie ważne.

Jeszcze raz dziękuję Tobie bardzo.


:D:DSOLVED :D:D