Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][JavaScript] ukrywanie elementu zależnie od url
Forum PHP.pl > Forum > Przedszkole
phpamator
Witajcie przedszkolacy i przedszkolanki

Napotkałem na problem z którym nie bardzo wiem jak sobie poradzić, otóż chciałbym ukryć element jeśli ostatnie znaki url'a są inne niż i tu na przykład:
p=1 czyli jeśli ostatnie znaki to p=1 pokazujemy co chcemy a jeśli np p=2 to ukrywamy co chcemy
Tak więc idąc w kierunku rozwiązania problemu zrobiłem co następuje:

  1. jQuery(document).ready(function () {
  2. var winwidth = jQuery(window).width();
  3. console.log(winwidth);
  4. if((window.location.href.indexOf(".html?p=1") > -1) || (window.location.href.indexOf(".html") > -1)){
  5. jQuery('.ukryj_mnie').css('display','block');
  6. }else{
  7. jQuery('.ukryj_mnie').css('display','none');
  8. }
  9. });
  10.  

i to powiedzmy działa ale nie do końca jak bym chciał żeby działało bo kiedy url kończy się ".html" to i tak będzie pokazywał element ponieważ url w dalszym ciągu zawiera ".html" niezależnie czy to będzie ".html?p=3... czy 10000000"
dlatego muszę zmienić podejście ale nie bardzo wiem jak bo chyba najlepiej byłoby sprawdzić ostatnie znaki jakimś regexem ... którego w dalszym ciągu nie czaję.

Na koniec chciałbym dodać jeszcze sprawdzanie wielkości okna i ukrywać jeśli wielkość okna jest mniejsza niż np 450px i string !="?p=1" lub '.html'
Jak to zrobić ?
trueblue
https://jsfiddle.net/9fgr1ana/2/

Skoro masz parametr w $_GET, to dlaczego nie ukryjesz z poziomu PHP?
phpamator
Bo ja chce ukryć <div> a nie stronę (link)?
Jeśli to robi jakąkolwiek różnicę
nospor
Naprawde poziom twojej inteligencji stanal na etapie pokazywania jezyka po kazdym zdaniu? Takie szczeniackie odzwyki to ja tylko u dzieci do pewnego wieku obserwowalem....

co do problemu: a co ma piernik do wiatraka? Co z tego czy to div czy strona? Moze opisz problem dokladniej, tym razem z zachowaniem odrobiny kultury smile.gif
phpamator
Nie rozumiem po co się unosisz ale skoro tak bardzo ciebie to drażni postaram się ograniczyć używanie emotikonów.

Zawartość strony stanowią bloki statyczne i dynamiczna lista produktów
, chciałem wyłączać pewne "bloki" jeśli strona listy jest większa niż "1" oraz jeśli strona otwierana jest na urządzeniu mobilnym,
w przypadku "desktopów" nie ma znaczenia i nie chcę ich ukrywać.
Czyli jeśli url zawiera "?p=1 i min-width: 450px" pokazuje jeśli nie ... wiadomo chowamy. W sumie to podsunąłeś mi pewnien bardzo prosty pomysł.
Jeśli $('li').click(function(){ var costam = $('li').val() >1; if(costam >1){$('#mojdiv').css('display','none')}})
do tego dodam tylko sprawdzanie wielkości okna i to powinno załatwić sprawę.

Może nie "super" rozwiązanie ale powinno wystarczyć.

Jak sądzicie ?
nospor
Nie chodzilo mi o jakies emotikonki. Chodzili mi o JEZYKI (tongue.gif) ktore pokazywales w jako odpowiedz dla logicznego rozwiazania podanego tobie przez osobe, ktora chciala ci pomoc. Naprawde nie widzisz roznicy?

Chowanie blokow mozesz robic w php tudziez w widoku (zalezy czego i jak uzywasz).
Co do chowania elementow w zaleznosci od mobile czy nie to do tego uzywa sie media queries w css.

Stosowanie js do obu rozwiazan jest poprostu chybione

edit:
Cytat
, chciałem wyłączać pewne "bloki" jeśli strona listy jest większa niż "1" oraz jeśli strona otwierana jest na urządzeniu mobilnym,

Jesli strona listy jest wieksza niz 1 to nadajesz blokowi jakas klase, np more-than-1 (tak, robisz to podczas generowania widoku a nie js) a potem w css ustalasz widocznosc dla tej klasy w zaleznosci czy mobile czy nie.
Rozwiazanie to jest banalnie proste i daje sie potem latwo modyfikowac i kazdy wie o co chodzi
phpamator
Chyba się nie do końca prawidłowo opowiedziałem.
Blok ma być widoczny zawsze gdy otwarta jest pierwsza strona "paginacji" i ukryta tylko w trybie mobile jeśli strona paginacji jest różna od 1 oraz zaraz po załadowaniu strony kiedy jeszcze w url'u niema żadnych dodatkowych informacji jak "?p=numer strony" tylko "strona.html"
to tak dla całkowitego rozjaśnienia o co mi chodziło.
nospor
No to przeciez napisalem jak to zrobic
Cytat
Jesli strona listy jest wieksza niz 1 to nadajesz blokowi jakas klase, np more-than-1 (tak, robisz to podczas generowania widoku a nie js) a potem w css ustalasz widocznosc dla tej klasy w zaleznosci czy mobile czy nie.
Rozwiazanie to jest banalnie proste i daje sie potem latwo modyfikowac i kazdy wie o co chodzi

To wlasnie to.
phpamator
Myślałem o takim rozwiązaniu, dodałem do bloku klasę i zależnie od tego któa strona aktualnie była otwarta itd to nawet działało ale
kiedy w url'u nie było jak już wspominałem "?p=1" chowało mi blok czyli jak miałem "strona.html" to blok też był schowany. I tego nie wiedziałem jak ugryźć stęd moje pytanie.

Z pewnością jako osoba zaawansowana znasz Magento i jak to to działa.
Sposób w jaki generowane są strony i w jaki sposób mozna modyfikować ich zawartość jest nieco inny. To wiesz na pewno.
Nie chciałbym kopać w kodzie dlatego czepiłem się jQuery bo to najłatwiejsza chyba droga żeby na szybko coś takiego zrobić.
Czy nie ?
nospor
edit:
Cytat
Z pewnością jako osoba zaawansowana znasz Magento i jak to to działa.
Sposób w jaki generowane są strony i w jaki sposób mozna modyfikować ich zawartość jest nieco inny. To wiesz na pewno.

Ze to magento to raczyles wspomniec dopiero teraz. Czasami warto takich informacji udzielac troche wczesniej tongue.gif (tak, teraz jezor jest jak najbardziej na miejscu wink.gif )
I nie, nie mialem potrzeby wczesniej zajmowac sie magento. To tak jakby mi ktos powiedzial, ze znam wordpress tylko dlatego ze jestem osoba zaawanasowana... wrecz odrotnie, wlasnie dlatego nie znam wordpress wink.gif tak wiem, my tu o magento gadamy.
Tak wiec nie, nie znam sie na magento i nie wiem jak tam sie dobiera do szablonow. Teraz rozumiem twoj upor w sprawie js. Nastepnym razem informuj wczesniej czego uzywasz to ma istotne znaczenie podczasu udzielania odpowiedzi.
phpamator
Hahaha, no widzisz, nie sądziłem że to będzie miało aż takie znaczenie.
Tak czy owak, skoro już wiesz na czym polega problem może coś zasugerujesz.

Gdyby to było takie proste i dotyczyło jednej strony to wbił bym warunek jeśłi url = cośtam i wielkość okna = cośtam to pokaż/schowaj i byłoby po kłopocie
prawda ?
Proste, ale w tym przypadku ponieważ modyfikuję template a ten jak wiadomo używany jest przez wiele wiele stron musi to być uniwersalne.
Dlatego pytałem o regex'a który byłby chyba najprostszym rozwiązaniem gdzie sprawdzanie czy ostatnie 4 znaki to "html" albo "?p=1" jeśli nie i wielkość okna jest mniejsza niż wtedy schowaj blok.
Bang, zrobione

Aaach, dodatkowe utrudnienie to ... strona się przeładowuje za każdym razem kiedy zmienia się stronę "paginacji" czyli dodanie klasy czy usunięcie klasy .... może trochę nie zadziałać
i to kolejny powód, żeby sprawdzać url w czasie ładowania strony.
viking
Podałem ci już rozwiązanie w js. Jaki jest dalej problem?
phpamator
Hej vikingu, właśnie czytam i próbuję ale mi ciągle wyrzuca : invalid group
czyli mój regex coś nie halo


no jakoś sobie poradziłem tongue.gif
sprawdzam window.location.search potem warunek i gotowe.
może nie super eleganckie rozwiązanie ale działa.

  1. jQuery(document).ready(function () {
  2.  
  3. var myUrl = window.location.search;
  4. console.log(myUrl);
  5.  
  6. if(myUrl == '?p=1' || myUrl == '') {
  7. jQuery('.tobehidden').css('display','block');
  8. }else{
  9. jQuery('.tobehidden').css('display','none');
  10. }
  11. });
viking
Czyli wszystko wskazuje na fakt że kompletnie tego artykułu nie przeczytałeś. Jest pełno przykładów jak używać, dla ie był na mdn kod.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.