PDA

Zobacz pełną wersję : szerokość głównego okna, a prawa kolumna



Qbik
11-03-2009, 09:25
Czy możecie mi pomóc ze zmianą wyświetlania dla Blank Skeleton template, a dokładnie żeby na stronie głównej nie było prawego paska

Na tą chwilę wrzuciłem coś do prawej kolumny żeby nie było pustego miejsca
www.wikaro.pl

albo najlepiej żeby był generowany automatycznie czyli jak nic nie jest do niego dodane to się pojawia pomniejszając główną kolumnę (main), a jak nie ma to główna kolumna powiększa się do takiego jak na pozostałych stronach

Edit

na tą chwilę mogę powiększyć główną kolumnę do 100%, ale to działa ok tylko dla wyłączonych modułów w prawej kolumnie, jak włączę to już jest gorzej

efekt widać na www.wikaro.wikaro.pl

hesar
11-03-2009, 13:02
hmm -- pewnikiem da sie zrobic tyle ze glowne pytanie brzmi jak joomla ma sprawdzic czy w tej prawej kolumnie cos jest czy nie ma
zakladam ze jest to jeden modul banners ktory powinien byc zawsze opublikowany, zakladam rowniez ze do niego dodajesz bannery i albo sa opublikowane albo nie, jesli choc jeden jest opublikowany to sie wysweitla

oczywscie ponizsze powinno byc wkomponowane w plik templatki

rozwiazanie ktore powinno zadzialac w pseudokodzie
<?php

$sql = 'select * from jos_baner where showBanner = 1';
$result = mysql_query($sql);
$ilosc = @mysql_num_rows($result);
if($ilosc = 0) //mamy jakis wlaczone banery
{
//tu wylaczamy wysweitlanie modulu np za pomoca style = "display:none;"
}
else
{
//wsyweitlamy moduly standardowo
}

zwiastun
11-03-2009, 13:28
buuuuuuuuuuuuuuuuu, po co tu pseudokod i takie kombinacje! Przeca w każdym szablonie znaleźć można odpowiednie przykłady.

Zliczanie modułów w pozycji modułów

Aby ustalić, czy w jakiejś pozycji znajdują się moduły, w szablonach dla Joomla 1.5 stosujemy metodę countModules.
Metody tej używamy zwykle wówczas, gdy chcemy objąć moduły w pewnej pozycji kodem HTML, jeżeli choć jeden moduł zostanie w tej pozycji umieszczony. Zastosowanie tej metody zapobiega wyświetlaniu pustych przestrzeni, umieszczaniu w kodzie zbędnych pustych znaczników oraz w technice nazwanej czasami "ukrywaniem kolumn" lub "składaniem kolumn" [collapsing columns].
Na przykład, poniższy kod umieści w pozycji 'user1' kod HTML tworzący ramkę pozwalającą dowolnie stylizować obramowanie modułu, ale tylko wtedy, jeżeli w tej pozycji zostanie opublikowany co najmniej jeden moduł.

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

Zliczanie modułów w wielu pozycjach

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.

hesar
11-03-2009, 13:35
bo kolego zakladalem ze modul jest ZAWSZE wlaczony i tylko sprawdzamy jego zawartosc
a metoda countModules jak sama nazwa wskazuje informuje tylko o ilosci modulow w danej pozycji co jakby nie spelnia tego zalozenia co rowniez wyraznie napisalem w swoim poscie

Qbik
11-03-2009, 13:46
hmm ok dziękuje za konkretną odpowiedź

zanim jednak się za to zabiorę

metodę tą będę musiał zastosować dla prawej kolumny

ale jak ma się do tego główna mam w niej wpisać jakąś konkretną wielkość czy zostawić tak jak jest?

zwiastun
11-03-2009, 14:11
@hesar: metoda countModules wykonuje, o czym myślałeś - sprawdza, ilość modułów faktycznie opublikowanych podczas wywołania konkretnej strony!

hesar
12-03-2009, 00:00
no wlasnie
zalozmy ze masz modul banery - ktory jest opublikowany ale w nim nie ma zadnych opublikowanych banerow
wyswietli sie modul czy nie?

zwiastun
12-03-2009, 00:07
Nie wyświetli się! Działanie tej metody polega na zliczaniu ilości modułów umieszczonych we wskazanej pozycji modułów, na stronie wywoływanej z określonej pozycji menu. To dzięki takiemu działaniu możliwe jest ukrywanie całych kolumn, a nie tylko pojedynczych pozycji.

hesar
12-03-2009, 11:19
zwiastun: to ciekawe co opowiadasz :)

sprawdzilem na wlasnej stronie
mam modul Banners standardowy na standardowej templatce rhuk_milkiway ustawiony na pozycji right
pozycja right w templatce jest opakowana w warunek dla metody count_modules
kokretnie wyglada tak

<?php if($this->countModules('right') and JRequest::getCmd('layout') != 'form') : ?>
<td class="greyline">&nbsp;</td>
<td width="170">
<jdoc:include type="modules" name="right" style="xhtml"/>
</td>
<?php endif; ?>

i teraz wlaczam tytul dla tego modulu oraz ODPUBLIKOWUJE (ladne slowo ;P ) wszystkie reklamy (oczywiscie standardowe) i modul banners (do kupy ze swoim tytulem) wyswietla sie ladnie z prawej strony
natomiast po zastosowaniu mojej metody (oczywscie dopasowanej indywidulanie i niekoniecznie tak wygladajacej jak powyzej ale dzialajacej w tym guscie ;P i odrobine brutalnej) i owszem dziala

no chyba ze ja czegos niezrozumialem z twojej i zalozyciela watku wypowiedzi ;)

zwiastun
12-03-2009, 12:55
Pewnikiem dlatego, że włączyłeś tytuł modułu. To też element modułu. Wyłączenie samych banerów nie wyłącza publikacji modułu.
Ja nie napisałem, że Twoja metoda nie zadziała, napisałem jedynie, że nie jest potrzebna.
Podchodząc nieco inaczej do problemu: przejrzyj 100 dobrych szablonów (coś pewno już nieraz zrobił) i znajdź jakiś odpowiednik realizacyjny Twojego kodu. Na 100 dobrych szablonów powinien być w 90% przypadków. Jest? Dlaczego?

hesar
12-03-2009, 13:10
dlatego ze w 90% przypadkow wystarczy zarzadzanie zastosowane przez metode countmodules
natoamiast pytanie bylo takie

albo najlepiej żeby był generowany automatycznie czyli jak nic nie jest do niego dodane to się pojawia pomniejszając główną kolumnę (main), a jak nie ma to główna kolumna powiększa się do takiego jak na pozostałych stronach

Edit

na tą chwilę mogę powiększyć główną kolumnę do 100%, ale to działa ok tylko dla wyłączonych modułów w prawej kolumnie, jak włączę to już jest gorzej

czyli wlaczanie widocznosci modulu w zaleznosci od jego zawartosci a nie od roznych innych parametrow :) typu tytul, opis i inne takie
dlatego uzylem takiego rozwiazania choc nie jest ani profesjonalne ani eleganckie (tzn podpowiedzialem takie rozwiazanie) i tylko i wylacznie o tym dyskutujemy
zaleznosc zawartosc -> widzialnosc modulu nie jest do zbadania standardowa metoda zarzadzania trescia (przynajmniej ja takiego rozwiazania nie znam)

zwiastun
12-03-2009, 13:20
Ta, rozumiem :) Zgoda! Rutyna zabija myślenie!

hesar
12-03-2009, 13:53
agree :)

qrdziel
14-03-2009, 15:10
na wstepie zaznacze, ze pytanie jest lamerskie i jesli kogos one nudza to prosze przestac czytac
chce ulozyc obok siebie usr1, usr2 i usr3 - rowno rozlozone
jesli sa tylko dwa moduly - to dziela sie po polowie zawartosci strony
a jesli tylko jeden to na 100%
prosze podac fragment kodu z index.php i fragment z css'a
tworze taká templatke: http://qrdziel.byethost33.com/
i stanalem

zwiastun
14-03-2009, 15:25
Pytanie nie jest lamerskie. A sposobów rozwiązania jest co najmniej kilka. Możesz je sobie podejrzeć np. w szablonie JA Purity dołączonym do Joomla.

qrdziel
14-03-2009, 17:19
hihi
zalezy mi na rozwiazaniu jak najprostszym
mialem nadzieje, ze ktos z forumowiczow wklei jakies swoje proste rozwiazanie - a ja to tylko skopiuje - ale to chyba byloby zbyt piekne :(

zwiastun
14-03-2009, 17:26
No tak, do skomplikowanego zadania proste rozwiązanie i najlepiej takie, żeby się samo zrobiło - no, co najwyżej, żeby skopiować i wkleić. Nie przesadzasz? Zrób sobie zawsze trzy moduły, będziesz mieć w miarę prosto łatwo i przyjemnie.

qrdziel
15-03-2009, 07:49
to moze podasz jak bedzie wygladac to najprostsze rozwiazanie - trzy moduly jednakowej szerokosci obok siebie
pleeease
i bedziesz mnie mial z glowy - oraz dozgonna wdziecznosc

qrdziel
16-03-2009, 11:30
albo chociaz powiedzcie gdzie znalezc takie przyklady
wiem, ze mozna analizowac gotowe skorki, lub zglebic wiedze tajemna o css i php, ale poco, jesli ktos gdzies widzial gotowe kawalki kodu - to bardzo bym prosil

zwiastun
16-03-2009, 14:17
Przecież Ci napisałem masz je w JA Purity. Proste. Prostsze to takie, że wstawiasz w szablon trzy na sztywno moduły (zawsze są trzy).