Webboard

Pełna wersja: Klasa nie wykrywa zmiany przy użyciu PHP
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
wersja skryptu MyBB: 1.6.12
adres forum: localhost
na czym polega problem (screen, opis, komunikaty, nazwa stylu/theme/szablonu):

Witajcie. Chciałbym, aby licznik nieprzeczytanych postów (plugin Nieprzeczytane posty 2.11) zmieniał wartość style przy użyciu go w danej klasie, jeżeli liczba nieprzeczytanych postów będzie większa od X.

Zastosowałem do tego plugin PHP in Templates. Znalazłem funkcję która wyświetla ilość nieprzeczytanych postów i zastosowałem ją przy użyciu PHP.

Chciałbym, aby klasa zmieniała swoją wartość style, jeżeli licznik nieprzeczytanych postów przekroczy ilość 10 postów. Tak więc użyłem takiej funkcji:

Cytat:<if $numUnreads >= 0 then><span class="pm_notification"><!-- UNREADPOSTS_LINK --></span><elseif $numUnreads >= 10 then><span class="pm_notification" style="margin-left: -8px;"><!-- UNREADPOSTS_LINK --></span><elseif $numUnreads >= 100 then><span class="pm_notification" style="margin-left: -14px;"><!-- UNREADPOSTS_LINK --></span></if>

Jednak gdy licznik przekroczy 10 nieprzeczytanych postów, do nazwy klasy nie dopisuje się style="margin-left: -8px;", lecz pozostaje tylko sama klasa.

Jest to dla mnie ważne przy customizacji stylu, ponieważ podczas użycia klasy pm_notification liczba będzie większa lub równa 10, wygląd rozszerza się i wychodzi poza ramkę.

Jest tak: [Obrazek: hEpm2J8.png]
A powinno być tak, z użyciem margin-left: -8px: [Obrazek: Fgd01IB.png]

Z góry dziękuję za pomoc,
Pozdrawiam!
Kod:
<if $numUnreads >= 0 then>
Ten warunek zawsze jest prawdziwy ;)
No to zamieniałem sobie pierwszy warunek na:

Kod:
<if $numUnreads <= 9 then>

Oraz następny na:

Kod:
<elseif $numUnreads <= 99 then>

Teraz już pierwszy warunek jest tylko prawdziwy, gdy ilość nieprzeczytanych postów jest mniejsza lub równa 9, a nie zawsze jest mniejsza lub równa :)

Jednak wciąż nie działa.
Masz dostęp do $numUnreads? Jeśli wziąłeś tę zmienną z funkcji modifyOutput w pliku tego pluginu, powinna być dodana do listy global (linia 389).
(29.04.2014, 18:33)Ecosse napisał(a): [ -> ]Zastosowałem do tego plugin PHP in Templates. Znalazłem funkcję która wyświetla ilość nieprzeczytanych postów i zastosowałem ją przy użyciu PHP.
//.......//
Cytat:<if $numUnreads >= 0 then><span class="pm_notification"><!-- UNREADPOSTS_LINK --></span><elseif $numUnreads >= 10 then><span class="pm_notification" style="margin-left: -8px;"><!-- UNREADPOSTS_LINK --></span><elseif $numUnreads >= 100 then><span class="pm_notification" style="margin-left: -14px;"><!-- UNREADPOSTS_LINK --></span></if>
Do takich warunków nie jest potrzebny plugin PHP in Templates, ale jeśli już go masz to pobaw się switch'em. Mam wrażenie że Twoja zmienna nie działa, umieść gdzieś samo {$numUnreads} i zobacz czy pokaże liczbe :)
(29.04.2014, 19:03)Supryk napisał(a): [ -> ]Mam wrażenie że Twoja zmienna nie działa, umieść gdzieś samo {$numUnreads} i zobacz czy pokaże liczbe :)

Niestety funkcja nie działa w szablonach. Wziąłem ją z szablonu unreadPosts_counter, tak więc jak widać, tylko w tym szablonie ta funkcja działa.

Jest jakiś inny sposób na zrobienie tego, aby klasa zmieniała wartość style gdy liczba nieprzeczytanych postów będzie większa od X?
(29.04.2014, 19:13)Ecosse napisał(a): [ -> ]Wziąłem ją z szablonu unreadPosts_counter, tak więc jak widać, tylko w tym szablonie ta funkcja działa.

Nie możesz zrobić tego w tym szablonie?
(29.04.2014, 19:16)Supryk napisał(a): [ -> ]Nie możesz zrobić tego w tym szablonie?

Niestety nie. Próbowałem, jednak funkcja <!-- UNREADPOSTS_LINK --> obejmuje 2 szablony, i jak zrobie go tylko w jednym z nich, to nie będzie wyświetlało się to prawidłowo. Klasą pm_notification muszę objąć dwa szablony na raz.

[Obrazek: DpKbd5z.png]
Aparacik z Ciebie, piszesz w pierwszym poscie ze localhost a teraz zakrywassz adres :)

ohooku plugin Łukasza, napisz swój na globalne wyciągniecie zmiennej $numUnreads
Tak na szybko innej opcji nie widze
A ja znalazłem rozwiązanie :) Teraz napiszę jak to zrobiłem. I to dzięki tobie Supryk :)

W szablonie w którym miałem wszystkie ify itp. usunąłem je i zostawiłem tylko <!-- UNREADPOSTS_LINK -->.

W szablonie unreadPosts_linkCounter zostawiłem tylko {$unreadPostsCounter}.

A wszystko przeniosłem do szablonu unreadPosts_counter. Zmienną <!-- UNREADPOSTS_LINK --> zastąpiłem samym {$numUnreads} oraz utworzyłem nową klasę unread_notification, którą skopiowałem z wcześniejszej pm_notification (ponieważ tej klasy używa funkcja wyświetlającą ilość nieprzeczytanych wiadomości i obie gryzły się).

W nowej klasie ustawiłem odpowiednio margin-left dla każdej liczby (jednocyfrowej, dwucyfrowej oraz trzycyfrowej). Wszystko sprawdziłem 2 razy i liczba odpowiednio ustawia się przy liczbach jedno oraz dwucyfrowych.

Dla ciekawskich tak wygląda mój szablon unreadPosts_counter:

Kod PHP:
<a href="{$mybb->settings['bburl']}/search.php?action=unreads"><if $numUnreads 9 then><span class="unread_notification" style="margin-left: 6px;">{$numUnreads}</span><elseif $numUnreads 99 then><span class="unread_notification" style="margin-left: 0px;">{$numUnreads}</span><else><span class="unread_notification">{$numUnreads}</span></if></a

Dzięki Supryk za wskazanie odpowiedniej drogi, trochę poszperałem i rozwiązałem problem :)