-
Postów
12 -
Dołączył
-
Ostatnia wizyta
Informacje o forum
-
Wersja
IP.Board 3.2.3
Osiągnięcia mauris
-
ROZWIĄZANY: problem z Group Name Indicator
mauris odpowiedział(a) na NajXs temat w Modyfikacje - pomoc
Nie chcę zaśmiecać forum nowym tematem, więc zapytam tutaj. Ja mam w tej modyfikacji taki problem, że od jakiegoś czasu za każdym razem jak zwinę sobie listę, to przy następnej wizycie ona i tak jest rozwinięta i nie wiem gdzie leży problem... -
[HSC] Recent Posts (Sidebar Block) v2.0.0.0 - oznaczanie nieprzeczytanych postów
mauris odpowiedział(a) na mauris temat w Tutoriale i porady
No niby mogę dodać to do XML, ale nie jest to moja modyfikacja i nie wiem czy mam prawo do wnoszenia zmian... Ściągnąlem to z serwisu hostujacego pliki ^^ -
[HSC] Recent Posts (Sidebar Block) v2.0.0.0 - oznaczanie nieprzeczytanych postów
mauris odpowiedział(a) na mauris temat w Tutoriale i porady
Dodam jeszcze, że tak to wygląda po zmianach: Oczywiście znacznik [ NOWE ] jest konfigurowalny, co opisałem w powyższym poście -
Witajcie, zauważyłem, że mod z tematu nie ma domyślnie opcji do zaznaczania nieprzeczytanych postów/tematów. Postanowiłem więc zmodyfikować tę modyfikację Udało się to głównie dzięki pomocy DawPi Pozwolę sobie uzywać polskiego nazewnictwa zakładając, że osoby posiadające forum po angielsku są w stanie sobie przetłumaczyć. Przedstawię wam dwie opcje: 1) Na szybko, żeby tylko było 2) Profesjonalnie, z ułatwioną edycją itp. - Instalujemy hook wg. instrukcji autora - Dla opcji (2) wymagane są tu dodatkowe kroki: Wchdzimy w System -> Ustawienia -> HeadStand (zakładka) i otwieramy ustawienia modyfikacji Klikamy w dodaj ustawienie i wypełniamy następująco (nie wymienione ustawienia pozostają bez zmian) Tytuł: ogólnie to jaki chcemy (np. Oznacz nieprzeczytane posty) Opis j. w. (np. Włączenie tej opcji spowoduje wyświetlanie znacznika nieprzeczytanych postów.) Typ: Opcja TAK/NIE Klucz: show_unread [*]Klikamy Zapisz zmiany [*]Następnie dodajemy kolejne ustawienie Tytuł: cokolwiek (np. Znacznik nieprzeczytanych postów) Opis: j. w. (np. Pole do wpisania jak wyglądać ma znacznik nieprzeczytanego tematu. Przykład: <span style="color: red; font-size: 10px"> [ NOWE ] </span> ) UWAGA należy pamiętać o użyciu < zamiast < oraz > zamiast > Typ: Duże pole tekstowe Klucz: unread_span [*]Klikamy Zapisz zmiany [*]Teraz posiadamy w ustawieniach dodatkowe dwie opcje, których wytłumaczenie podałem w przykładowych opisach - Łączymy się przez FTP z naszym forum, wchodzimy do folderu hooks/ i otwieramy do edycji plik boardIndexRecentPosts_*hash*.php - Znajdujemy w nim pętlę foreach($topics as $id => $t) { if($this->settings['hsc_rp_post']!='N') $topics[$id]['post'] = $this->_formatPost($t['post']); $topics[$id]['start_date'] = $this->_formatDate($t['start_date']); $topics[$id]['last_post'] = $this->_formatDate($t['last_post']); } Dodajemy do niej gdziekolwiek (najlepiej przed końcowym "}" ) linijkę: Opcja (1): $topics[$id]['hasUnreadPosts'] = ( $this->registry->classItemMarking->isRead( array( 'forumID' => $t['forum_id'], 'itemID' => $t['tid'], 'itemLastUpdate' => $t['last_post'] ), 'forums' ) ) ? false : true; Opcja (2): if($this->settings['show_unread']==1) $topics[$id]['hasUnreadPosts'] = ( $this->registry->classItemMarking->isRead( array( 'forumID' => $t['forum_id'], 'itemID' => $t['tid'], 'itemLastUpdate' => $t['last_post'] ), 'forums' ) ) ? false : true; - Wchodzimy do ACP -> Style -> *nasz styl* -> edycja plików szablonu i CSS - rozwijamy zakładkę "Strona główna" i wybieramy plik recentPosts - znajdujemy kod <a href='{parse url="showtopic={$post['tid']}" base="public" seotitle="{$post['title_seo']}" template="showtopic"}'><b>{$post['title']}</b></a> <a href='{parse url="showtopic={$post['tid']}&view=getlastpost" base="public" template="showtopic" seotitle="{$post['title_seo']}"}' title='{$this->lang->words['view_last_post']}'>{parse replacement="f_lastpost"}</a> jest to kod odpowiedzialny za wyświetlenie tytułu tematu Pod nim doklejamy sobie Opcja (1): <if test="$post['hasUnreadPosts']">*tu wpisujemy znacznik nieprzeczytanego posta*</if> Opcja (2): <if test="$this->settings['show_unread'] && $post['hasUnreadPosts']">{$this->settings['unread_span']}</if> Zapisujemy wszystkie pliki, gotowe! Mam nadzieję, że przyda wam się ten temat, jeśli ktoś posiada inne dodatki, którym brakuje takiej funkcjonalności niech napisze, spróbujemy to rozwiązać
-
ROZWIĄZANY: [HSC] Recent Posts (Sidebar Block) - rozwinięcie funkcjonalności
mauris odpowiedział(a) na mauris temat w Modyfikacje - pomoc
oczywiście, już się biorę do roboty. a chodzi o poradnik dot. tej modyfikacji, czy ogólnego pobierania z bazy nieprzeczytanych postów (z tym może być trudniej )?? -
ROZWIĄZANY: [HSC] Recent Posts (Sidebar Block) - rozwinięcie funkcjonalności
mauris odpowiedział(a) na mauris temat w Modyfikacje - pomoc
achhh xD tak to działa dzięki wielkie, wszystko śmiga -
ROZWIĄZANY: [HSC] Recent Posts (Sidebar Block) - rozwinięcie funkcjonalności
mauris odpowiedział(a) na mauris temat w Modyfikacje - pomoc
<div class='ipsSideBlock'> <h3>{$this->lang->words['recentposts_title']}</h3> <div class='_sbcollapsable'> <foreach loop="posts:$recentPosts as $post"> <div class='ipsBox_container ipsPad'> <a href='{parse url="showtopic={$post['tid']}" base="public" seotitle="{$post['title_seo']}" template="showtopic"}'><b>{$post['title']}</b></a> <a href='{parse url="showtopic={$post['tid']}&view=getlastpost" base="public" template="showtopic" seotitle="{$post['title_seo']}"}' title='{$this->lang->words['view_last_post']}'>{parse replacement="f_lastpost"}</a> <br/> <if test="$topics['hasUnreadPosts']==0">Aloha</if> <if test="forum:|:$this->settings['hsc_rp_showforum'] == 1"> {$this->lang->words['forum']}: <a href='{parse url="showforum={$post['forum_id']}" base="public" seotitle="{$post['forum_name_seo']}" template="showforum"}'>{$post['forum_name']}</a> <br/> </if> <if test="starterInfo:|:$this->settings['hsc_rp_start'] == 1"> {$this->lang->words['started_by']}: <a href='{parse url="showuser={$post['starter_id']}" base="public" seotitle="{$post['seo_first_name']}" template="showuser"}'>{$post['starter_name']}</a> <span class='date'>({$post['start_date']})</span> <br/> </if> <if test="firstPost:|:$this->settings['hsc_rp_post'] == 'F'"> {$post['post']} <br/> </if> <if test="views:|:$this->settings['hsc_rp_views'] == 1"> {$this->lang->words['views']}: {parse format_number="$post['views']"} {$this->lang->words['replies']}: {parse format_number="$post['posts']"} <br/> </if> <if test="lastPostInfo:|:$this->settings['hsc_rp_last'] == 1"> {$this->lang->words['last_reply']}: <a href='{parse url="showuser={$post['last_poster_id']}" base="public" seotitle="{$post['seo_last_name']}" template="showuser"}'>{$post['last_poster_name']}</a> <span class='date'>({$post['last_post']})</span> <br/> </if> <if test="lastPost:|:$this->settings['hsc_rp_post'] == 'L' and $post['post']"> {$post['post']} </if> </div> </foreach> </div> </div> <br /> <?php /* +-------------------------------------------------------------------------- | [HSC] Recent Posts (Sidebar Block) 1.0.0.0 | ============================================= | by Esther Eisner | Copyright 2011 HeadStand Consulting | [email protected] +-------------------------------------------------------------------------- */ if ( ! defined( 'IN_IPB' ) ) { print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded 'admin.php'."; exit(); } class boardIndexRecentPosts { public function __construct() { $this->registry = ipsRegistry::instance(); $this->DB = $this->registry->DB(); $this->settings =& $this->registry->fetchSettings(); $this->memberData =& $this->registry->member()->fetchMemberData(); } public function getOutput() { if($this->settings['hsc_rp_groups']!='' && !in_array($this->memberData['member_group_id'],explode(",",$this->settings['hsc_rp_groups']))) return ''; $topics = $this->_getTopics(); if(!is_array($topics) || !count($topics)) return ''; foreach($topics as $id => $t) { if($this->settings['hsc_rp_post']!='N') $topics[$id]['post'] = $this->_formatPost($t['post']); $topics[$id]['start_date'] = $this->_formatDate($t['start_date']); $topics[$id]['last_post'] = $this->_formatDate($t['last_post']); /* ------- IS READ -------- */ $topics[$id]['hasUnreadPosts'] = ( $this->registry->classItemMarking->isRead( array( 'forumID' => $t['forum_id'], 'itemID' => $t['tid'], 'itemLastUpdate' => $t['last_post'] ), 'forums' ) ) ? false : true; } return $this->registry->output->getTemplate('boards')->recentPosts($topics); } private function _getTopics() { $forumIds = $this->_loadForumIds(); if(!is_array($forumIds) || !count($forumIds)) return ''; $query = array('select' => 't.*', 'from' => array('topics' => 't'), 'where' => "t.state='open' and t.approved=1 and t.forum_id in (".implode(",",$forumIds).")", 'order' => 't.last_post desc', 'limit' => array(0,$this->settings['hsc_rp_limit'])); $query['add_join'][] = array('select' => 'f.name as forum_name, f.name_seo as forum_name_seo', 'from' => array('forums' => 'f'), 'where' => 't.forum_id=f.id', 'type' => 'left'); if ($this->settings['hsc_rp_post'] == 'F') { $query['add_join'][] = array('select' => 'p.pid, p.post', 'from' => array('posts' => 'p'), 'where' => 't.topic_firstpost=p.pid', 'type' => 'left'); } $this->DB->build($query); $tQuery = $this->DB->execute(); while($t = $this->DB->fetch($tQuery)) { if($this->settings['hsc_rp_post']=='L') { $post = $this->DB->buildAndFetch(array('select' => 'pid,post', 'from' => 'posts', 'where' => 'topic_id='.$t['tid'], 'order' => 'post_date desc', 'limit' => array(0,1))); $t = array_merge($t,$post); } $topics[] = $t; } return $topics; } private function _formatPost($post) { // Strip out line breaks or the regex does not work $post = preg_replace('/[\n\r]/i','',$post); // Strip out quotes $post = preg_replace('/\[quote(.*?)\[\/quote\]/i','',$post); // Strip out emoticon images $post = preg_replace('/<img(.*?)\/>/i','',$post); // Strip out other images $post = preg_replace('/\[img(.*?)\[\/img\]/i','',$post); $post = $this->_parseBBCode($post); if($this->settings['hsc_rp_postlimit'] > 0 && strlen($post) > $this->settings['hsc_rp_postlimit']) $post = IPSText::truncate($post, $this->settings['hsc_rp_postlimit']); $post = strip_tags($post); return $post; } private function _formatDate($date) { return $this->registry->class_localization->getDate( $date, SHORT ); } private function _parseBBCode($post) { IPSText::stripAttachTag($post); IPSText::getTextClass( 'bbcode' )->parse_smilies = 1; IPSText::getTextClass( 'bbcode' )->parse_html = 1; IPSText::getTextClass( 'bbcode' )->parse_nl2br = 1; IPSText::getTextClass( 'bbcode' )->parse_bbcode = 1; IPSText::getTextClass( 'bbcode' )->parsing_section = 'topics'; IPSText::getTextClass( 'bbcode' )->parsing_mgroup = $this->memberdata['member_group_id']; IPSText::getTextClass( 'bbcode' )->parsing_mgroup_others = $this->memberData['mgroup_others']; return IPSText::getTextClass('bbcode')->preDisplayParse( $post ); } private function _loadForumIds() { $forums = $this->registry->getClass('class_forums')->fetchSearchableForumIds(); if ($this->settings['hsc_rp_forums'] != '') { foreach(explode(",",$this->settings['hsc_rp_forums']) as $f) { if(in_array($f,$forums)) $forumIds[] = $f; } if(!is_array($forumIds) || !count($forumIds)) return; return $forumIds; } return $forums; } } ?> Proszę i dziękuję za tak szybką i miłą pomoc -
ROZWIĄZANY: [HSC] Recent Posts (Sidebar Block) - rozwinięcie funkcjonalności
mauris odpowiedział(a) na mauris temat w Modyfikacje - pomoc
No zapewne ma wartość null, nie wiem jak sprawdzić, czy to null i skrypt kompletnie nie działa, czy to false... [update] dodałem linijkę w w/w pętli foreach echo $this->registry->classItemMarking->isRead( array( 'forumID' => $t['forum_id'], 'itemID' => $t['tid'], 'itemLastUpdate' => $t['last_post'] ), 'forums' ); "wyechowanie" $topics[$id]['hasUnreadPosts'] też zwraca poprawne wyniki tak, wiem, że profesjonalnie to sprawdziłem, ale grunt, że wiem xD i działa. Mi zwraca 5 x "1", bo mam wszystko przeczytane, innemu uzytkownikowi zwróciło tylko 2x "1". Tak więc to może wina template? -
ROZWIĄZANY: [HSC] Recent Posts (Sidebar Block) - rozwinięcie funkcjonalności
mauris odpowiedział(a) na mauris temat w Modyfikacje - pomoc
"Konstruktor" wygląda tak: public function __construct() { $this->registry = ipsRegistry::instance(); $this->DB = $this->registry->DB(); $this->settings =& $this->registry->fetchSettings(); $this->memberData =& $this->registry->member()->fetchMemberData(); } Zapytanie pobierające tematy: $query = array('select' => 't.*', 'from' => array('topics' => 't'), 'where' => "t.state='open' and t.approved=1 and t.forum_id in (".implode(",",$forumIds).")", 'order' => 't.last_post desc', 'limit' => array(0,$this->settings['hsc_rp_limit'])); więc chyba ma wszystko... -
ROZWIĄZANY: [HSC] Recent Posts (Sidebar Block) - rozwinięcie funkcjonalności
mauris odpowiedział(a) na mauris temat w Modyfikacje - pomoc
W stylu używam takiego if-a: <if test="$topics['hasUnreadPosts']"> Zmieniłem w kodzie tak jak napisałeś, ale to ciągle zwraca 0. -
ROZWIĄZANY: [HSC] Recent Posts (Sidebar Block) - rozwinięcie funkcjonalności
mauris odpowiedział(a) na mauris temat w Modyfikacje - pomoc
dzięki za szybką odp jednak trochę się przeceniłem xD foreach($topics as $id => $t) { if($this->settings['hsc_rp_post']!='N') $topics[$id]['post'] = $this->_formatPost($t['post']); $topics[$id]['start_date'] = $this->_formatDate($t['start_date']); $topics[$id]['last_post'] = $this->_formatDate($t['last_post']); /* ------- IS READ -------- */ $topics[$id]['hasUnreadPosts'] = ( $this->registry->classItemMarking->isRead( array( 'forumID' => $topics[$id]['forum_id'], 'itemID' => $topics[$id]['tid'], 'itemLastUpdate' => $topics[$id]['last_post'] ), 'forums' ) ) ? false : true; } próbowałem dodawać w kilku miejscach, twój kod, ale nadal nic nie zwraca :/ próbowałem też dodać w w/w pętli trochę zmodyfikowany kod... ale też nic -
Zacznę od powitania wszystkich użytkowników, tworzycie bardzo fajne forum, wiele się z niego nauczyłem Przyszedł jednak czas, gdy admin zaczyna mieć zachciewanki na które nie ma odpowiedzi (albo admin słabo szuka ) Zainstalowałem hook z tematu i wszystko jest fajnie, tylko chciał bym, żeby miał on możliwość pokazywania które z nowych postów nie były jeszcze przeczytane. Próbowałem dodawać $topic['hasUnreadPosts'] w template dodatku, ale widocznie ta instancja nie jest załadowana, bo nic nie zwraca. Szukałem po ipsRegistry, ale nie mogłem znaleźć jak wydobyć dane o przeczytanych tematach, a wolałem nie kombinować metodą prób i błędów ^^ No i po wielu nieudanych próbach postanowiłem w końcu zapytać specjalistów Dodam, że szybko pojmuję i z pewnością ogarnę zagmatwane tłumaczenia, więc nie musicie pisać wykładu Interesuje mnie tylko co dodać w pliku klasy, żebym w template mógł użyć $topic['hasUnreadPosts']. No chyba, że jest jakieś inne obejście tego bez modyfikowania klasy hooka. Pozdrawiam!