PDA

Zobacz pełną wersję : Widocznosc modulow zaleznie od pozycji menu



Kietna Qu'Tak
04-02-2009, 12:33
Witam! Dam prosty przyklad: na swoim portalu chcialem tak ustawic widocznosc modulow, aby wszystkie moduly z prawej kolumny zniknely w momencie gdy wybiore pozycje "Forum" (gdy nie ma prawej kolumny zostaje wiecej miejsca na forum). Rozwiazalem to ustalajac dla kazdego modulu z prawej kolumny, dla ktorych pozycji menu ma byc widoczny, czyli zaznaczylem wszystkie procz pozycji "Forum". Wszystko fajnie dziala, bo moduly "znikaja" gdy wybierze sie z menu pozycje "Forum", ale gorzej gdy dodam nowa pozycje do menu, bo okazuje sie, ze jezeli chce aby moduly z prawej kolumny wyswietlaly sie dla nowej pozycji menu, to musze dla kazdego modulu ustalic na nowo widocznosc dla tej pozycji... Troszke to klopotliwe sie zrobilo bo dolozylem kilka modulow i teraz za kazdym razem mam edytowac widocznosc kazdego modulu, tylko dlatego, ze nie chce aby byly widoczne na... jednej pozycji?? Jest jakis inny sposob, aby zaznaczyc pozycje menu, dla ktorych dany modul NIE jest wyswietlany (bo z tego co testuje to wybiera sie obecnie, dla ktorych pozycji menu ma byc wyswietlony modul, jest tak zarowno w Jv1.0 jak i Jv1.5)? Pozdrawiam!

malkowitch
04-02-2009, 23:14
Chyba się nie da zrobić tego ładnie, czyli tak, żeby to działało z poziomu joomli ale możesz to zrobić inaczej z poziomu szablonu.

Dodajesz do szablonu w danym bloku sprawdzenie aktualnej pozycji menu. Jeśli jest różna od id forum do wyświetla jeśli nie to pomija dany blok:

Przykład:
<code style="white-space: nowrap;"><code></code></code>

<?php if(JRequest:GetVar("Itemid")!=4): ?>
<jdoc:include type="modules" name="user1" />
<?php endif; ?>

<jdoc:include type="modules" name="user1">Oczywiście liczba 4 to id pozycji menu. Możesz je sprawdzić w panelu administracyjnym przeglądając pozycje menu po prawej masz kolumnę: "ID pozycji". W miejsce modułu możesz dodawać dowolny kod html/php<jdoc:include ...="" możesz="" wstawić="" dowolny="" kod="" który="" nie="" może="" się="" wyświetlać="" dla="" forum.="">
Problem powstaje gdy któryś jeszcze komponent korzysta z zmiennej Itemid ale ja narazie problemów nie miałem.</jdoc:include></jdoc:include>

zwiastun
05-02-2009, 00:47
A założymy się że nie pójdzie!


<code style="white-space: nowrap;"><code>&lt;?php if(JRequest::GetVar("Itemid")!=4): ?>
</code></code><code style="white-space: nowrap;"><code>&lt;</code></code><code style="white-space: nowrap;"><code>jdoc:include type="modules" name="user1" />
</code></code><code style="white-space: nowrap;"><code>&lt;</code></code><code style="white-space: nowrap;"><code>?php endif; ?>

dwa dwukropki :)
</code></code>

Kietna Qu'Tak
05-02-2009, 08:57
Dzieki bardzo za odpowiedz! Funkcja, ktora napisaliscie na pewno przyda mi sie bo dziala tak jak chcialem, ale niestety to ukrywanie chce osiagnac na troszke starej stronie, ktora administruje przez krotki czas, wiec nie oplaca mi sie przenosic ja na nowa Joomle, a tak sie sklada, ze ten skrypt php dziala tylko w Jv1.5. W Jv1.0 wyswietla mi sie komunikat:

Fatal error: Class 'JRequest' not found in /templates/mitra_global/index.php on line 324

Czy jest odpowiednik klasy JRequest w Jv1.0 lub inny sposob na ukrywanie modulow??

malkowitch
05-02-2009, 09:13
spróbuj:


<?php $menupos = $_GET['Itemid']; ?>
<?php if($menupos!=4): ?>
<jdoc:include type="modules" name="user1" />
<?php endif; ?>
</jdoc:include>

Kietna Qu'Tak
05-02-2009, 10:25
Dzieki wielkie!! Dziala w Jv1.0. Tylko nie wiem po co linijka
$napis = $_GET['zmienna']; bo sie zwyczajnie na stronie wyswietlala nie robiac nic. A no i zamienilem
<jdoc:include type="modules" name="user1" /><jdoc:include type="modules" name="user1"> na</jdoc:include>
<?php mosLoadModules ( 'right', -3 ); ?><jdoc:include type="modules" name="user1"> (w moim przypadku chcialem ukryc prawa kolumne, a jdoc:include to chyba funkcja Jv1.5?). Dobrze postapilem (z PHP jeszcze nie jestesmy kumplami...)?

Pozdrawiam i jeszcze raz dzieki bardzo :)</jdoc:include>

malkowitch
05-02-2009, 10:30
Po prostu się zakręciłem dlatego :P, ale już usunąłem.
odnośnie jdoc:include to rzeczywiście ale to był tylko przykład bo tam możesz wepchać co chcesz

ps. twojego kodu nie widać, źle wstawiony pewnie tag php

Kietna Qu'Tak
05-02-2009, 12:52
Cosik po edytowaniu posta zostaly mi tylko puste tagi [ php ][ /php ], dlatego nie bylo widac nic. Teraz tylko musze obmyslec jak wykorzystac to ukrywanie bo mam na stronie rozne elementy roznie widoczne, lacznie z menu glownym, ktore znika ustepujac miejsca "mini-menu" podstrony (wewnatrz portalu jest "podstrona" tylko na jeden temat, z wlasnym menu i wlasnymi bannerami). Troche bedzie roboty, ale dzieki waszej pomocy przynajmniej wiem, ze cos moge zdzialac ;)

Mam tylko maly problem. Chcialem sprawic aby tylko moduly znikaly po wejsciu w jedna z kilku pozycji i niestety ponizszy zapis || nie smiga

<?php $menupos = $_GET['Itemid']; ?>
<?php if(($menupos!=237) && ($menupos!=230)): ?>
<?php if (mosCountModules('right_h')) { ?><?php mosLoadModules ( 'right_h', -3); ?><?php } ?>
<?php endif; ?>
Gdy zrobie dla jednej pozycji (albo 237 albo 230) to smiga, ale po dodaniu lub || nie chce, w zadnym z przypadkow. Niestety nie znam sie na PHP wiec ciezko mi stwierdzic, czmeu tak sie dzieje a nie inaczej? Moze ktos podpowiedziec jak dodac ukrywanie dla wielu elementow, bo u mnie bedzie ich na 100% wiecej niz 4...

PS. Juz ogarnalem hehehe zle to logicznie obmyslilem i zamiast "lub" powinno byc "i", czli zamist || w moim przypadku bedzie &&. Sprawa zamknieta :rolleyes:

malkowitch
05-02-2009, 13:03
Masz problemy z logiką, trzeba wrócić na lekcje matematyki. W takim przypadku powinieneś użyć "and" (&&) a nie "or" (||)



<?php
$menupos = $_GET['Itemid'];
if(($menupos!=237) and ($menupos!=230))
{
if (mosCountModules('right_h')) mosLoadModules( 'right_h', -3);
};
?>


i nie używaj tylu tagów php w kodzie

Kietna Qu'Tak
05-02-2009, 13:14
Dzieki za poprawke. Wiem, ze to nie miejsce na kurs PHP, ale fajnie, ze zoptymalizowales kod, bo nie bylem pewien czy mozna wszystko obiac jedna klamra "< ? php ... ? >". Dzieki wielkie, juz teraz sobie poradze mam nadzieje! :D

To jeszcze tylko ostatnie pytanie. Czy da sie odwolac nie do pozycji menu a w ogole do jakiegos menu? Bo w podstronie mam zupelnie inne menu, ktore widac tylko na podstronie (glowne menu ukrywam na podstronie). Byloby to o tyle wygodne, ze niezaleznie czy dodam nowe pozycje menu czy nie, to i tak by zadzialalo ukrywanie. Jest taka mozliwosc?

mrnikt
11-02-2009, 15:51
Przepraszam za lamerstwo ... ale w które miejsce standartowej templatki BEEZ należy wprowadzić ten kod php podany powyzej ...

zwiastun
11-02-2009, 16:14
Powyżej masz nie jeden, a kilka cytowanych fragmentów kodu, więc nie wiadomo, o który Ci chodzi. Może lepiej napisz, co chcesz osiągnąć?

malkowitch
11-02-2009, 16:41
W miejscu gdzie wstawiasz pozycje którą chcesz ukryć lub pokazać.
Jeśli nadal nie wiesz to proponuję się zapoznać z:
a) html/xhtml
b) php
c) pomoc.joomla.pl (http://www.pomoc.joomla.pl/) !!!