Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

mauris

Użytkownik
  • Postów

    12
  • Dołączył

  • Ostatnia wizyta

Informacje o forum

  • Wersja
    IP.Board 3.2.3

Osiągnięcia mauris

Rekrut

Rekrut (2/14)

  • Pierwszy post
  • Współtwórca
  • Rozpoczęcie dyskusji
  • Pierwszy tydzień zakończony
  • Miesiąc później

Najnowsze odznaki

6

Reputacja

  1. 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...
  2. 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 ^^
  3. Dodam jeszcze, że tak to wygląda po zmianach: Oczywiście znacznik [ NOWE ] jest konfigurowalny, co opisałem w powyższym poście
  4. 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ć
  5. 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 )??
  6. <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
  7. 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?
  8. "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...
  9. 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.
  10. 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
  11. 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!
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.