Largo
Użytkownik-
Postów
1 157 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
1
Typ zawartości
Profile
Forum
Pliki
Galeria
Blogi
Sklep
Wydarzenia
Treść opublikowana przez Largo
-
Witaj, Odkryłem powód... Jest szalenie niepoprawnym, aby IP.Board tak traktowało dawnych modderów IP.Board z serii 2.3.X! Powodem były winne... spacje! Tak - spacje! Zmienne deklarowane w ten sposób: $content = array() Nie równa się kodowi: $content=array() ! PORAŻKA! Zaraz odszukam kod za to odpowiedzialny i dodam to dla bfarbera, aby to dodał w następnej wersji, bo to aż prosi się o pomstę do nieba! Pozdrawiam, Largo
-
ROZWIĄZANY: Obiekt output, a funkcja z biblioteki?
Largo odpowiedział(a) na Largo temat w Programowanie / tworzenie styli
Witam, Odpowiedź to: $this->registry->output->addContent(); Należy dodać tam parametr z danymi i on sam doda je do tablicy danych. Fajna opcja :-) Pozdrawiam, Largo -
Witaj, I jak, wpadł Ci jakiś pomysł do głowy? Nie ma opcji Bump, więc tak mogę jedynie przypomnieć :-) Może więcej kodu Ci wysłać, nie wiem?
-
ROZWIĄZANY: Obiekt output, a funkcja z biblioteki?
Largo opublikował(a) temat w Programowanie / tworzenie styli
Witam, Do swojej aplikacji chcę dodać system ogłoszeń. Kod HTML mam gotowy, funkcję do weryfikacji również. W czym więc leży problem? Otóż w tym, że kod HTML nie zostaje przypisany do obiektu... /** * Return announcement * * @access public * @return string */ public function viewAnnouncement() { /* Is announcement set? */ if( $this->settings['lw30_fg_announcement'] ) { $output = ''; /* Is secondary group ID? */ $my_groups = array( $this->memberData['member_group_id'] ); if( isset( $this->memberData['mgroup_others'] ) AND $this->memberData['mgroup_others'] ) { $my_groups[] = explode( ',', IPSText::cleanPermString( $this->memberData['mgroup_others'] ) ); } /* Remove duplicates! */ $groups = array_unique( $my_groups ); /* Did we have permissions to view? */ if( $this->memberData['g_fg_can_announcement'] ) { if( in_array( $this->memberData['member_group_id'], $my_groups ) ) { $message = IPSText::getTextClass('bbcode')->preDisplayParse( IPSText::getTextClass('bbcode')->preDbParse( $this->settings['lw30_fg_announcement'] ) ); return $output = $this->registry->output->getTemplate('fg')->globalMessage( $message ); } } /* Group cannot view announcement? */ return FALSE; } /* No announcement? */ return FALSE; } I w plikach modułów wysyłam go tak: /* Load announcement! */ $this->output .= $this->library->viewAnnouncement(); Dlaczego nie dodaję kodu? Jak dam go poniżej instrukcji switch miesza się ze zwykłym kodem. Funkcja var_dump() wysyła gotowy kod przed nagłówkiem, o co więc chodzi? Pozdrawiam, Largo -
<tr class='{$row['css']}'> <td>{$row['date']}</td> <td>{$row['type']}</td> <td>{$row['amount']}</td> <td>{$row['new_amount']}</td> <td>{$row['who']}</td> <td>{$row['old_amount']}</td> <td>{$row['comment']}</td> </tr> Zmienna $row jest zadeklarowana jako tablica. Najlepszy jest fakt, że warunek sprawdzający czy zmienna jest tablicą i są w niej rekordy zwraca true... :-)
-
Po warunku dałem, żeby zrzucił tablicę i działa. Przy foreach nic nie idzie... Nie listuję wyników, a to ma za zadanie pętla w szablonach. Wyświetla Array i nic więcej, a zrzut tablicy PO warunkach jest ewidentny. W czym tkwi problem? Dziękuje za informacje. Przydadzą mi się!
-
Witam, Otóź mam dziwny problem z tą pętlą. Oto kod: <if test="is_array( $logs ) AND count( $logs )"> <foreach loop="$logs as $row"> {parse template="logsRow" group="skin_fg" params="$row"} </foreach> </if> O dziwo, warunek if działa poprawnie ( sprawdzanie var_dump daję poprawną tablicę ), ale pętla nie działa. W żaden możliwy sposób. Dlaczego? Oto tablica: array(2) { [0]=> array(26) { ["id"]=> string(1) "2" ["sender_id"]=> string(1) "2" ["sender_fg"]=> string(6) "100.00" ["sender_ip"]=> string(12) "62.74.173.27" ["recipient_id"]=> string(1) "1" ["recipient_fg"]=> string(6) "900.00" ["type"]=> NULL ["amount"]=> string(6) "100.00" ["comment"]=> string(4) "Test" ["date"]=> string(26) "01 January 1974 - 04:09 PM" ["transactions"]=> string(1) "1" ["neg_all_fg"]=> string(6) "100.00" ["pos_all_fg"]=> string(6) "100.00" ["s_id"]=> string(1) "2" ["s_name"]=> string(5) "Dawid" ["s_group"]=> string(1) "4" ["s_icon"]=> string(0) "" ["r_id"]=> string(1) "1" ["r_name"]=> string(5) "Largo" ["r_group"]=> string(1) "4" ["r_icon"]=> string(0) "" ["description"]=> NULL ["css"]=> string(8) "positive" ["new_amount"]=> string(26) "(900.00 => 900.00+100.00 )" ["who"]=> string(0) "" ["old_amount"]=> string(26) "(100.00 => 100.00-100.00 )" } [1]=> array(26) { ["id"]=> string(1) "1" ["sender_id"]=> string(1) "1" ["sender_fg"]=> string(7) "1000.00" ["sender_ip"]=> string(13) "172.67.172.49" ["recipient_id"]=> string(1) "2" ["recipient_fg"]=> string(4) "0.00" ["type"]=> NULL ["amount"]=> string(6) "100.00" ["comment"]=> string(4) "Test" ["date"]=> string(27) "29 November 1973 - 10:33 PM" ["transactions"]=> string(1) "1" ["neg_all_fg"]=> string(6) "100.00" ["pos_all_fg"]=> string(6) "100.00" ["s_id"]=> string(1) "1" ["s_name"]=> string(5) "Largo" ["s_group"]=> string(1) "4" ["s_icon"]=> string(0) "" ["r_id"]=> string(1) "2" ["r_name"]=> string(5) "Dawid" ["r_group"]=> string(1) "4" ["r_icon"]=> string(0) "" ["description"]=> NULL ["css"]=> string(8) "negative" ["new_amount"]=> string(28) "(1000.00 => 1000.00-100.00 )" ["who"]=> string(0) "" ["old_amount"]=> string(22) "(0.00 => 0.00+100.00 )" } } PS. Do czego w parsowaniu if i foreach służą hasSubforums:|: w przypadku warunku i subforumsData: w przypadku pętli? Pozdrawiam, Largo
-
Witaj, Jeżeli uda mi się dynamicznie wypełniać tabelę ^^ Tymczasem to zwykła tabela z użyciem klasy row1 i row2.
-
Witam, Jak w nowym IP.Board użyć klas CSS, aby w wierszach dzielił widoczną kreską ( pewnie 1px i czarny kolor ), aby były widoczne przerwy w komórkach i wiadomo było do jakiego nagłówka tabeli się odnosi? Tak wygląda obecna tabela: Chcę, aby w każdej komórce BYŁA pionowa, widoczna linia oddzielająca komórki. Pozdrawiam, Largo
-
Witam, Chciałbym dodać do swojej aplikacji informacje z archiwum. Do tego celu chcę wykorzystać klasę Prototype, która wchodzi w skład IP.Board. Jest ona używana w nowym temacie do sprecyzowania otwarcia tematu i jego zamknięcia. Przekazuję wygląd, dodaję klasę do kodu HTML, ale nie pokazuje mi tej ikonki, dlaczego? Czy klasa wysyła dane do IP.Board i ja muszę je dopiero do szablonu wysyłać? Mógłbym prosić o pomoc w tej kwestii, ponieważ nie widzę opcji, dlaczego ten kod nie chcę działać. Zmieniłem ID i nazwy, ale jak skrypt JS ma prawo przekazywać dane do PHP i od tak szybko manipulować nimi? Przecież tu nie występuje akcja Ajax'owa, chyba, że się mylę? Patrzyłem mimo to w kod szablonu i tam w wartości przekazuje dane. Jak? Powinno przekazywać dane, które zostanę odrobione na rzecz skryptu PHP. PS. Jestem zwolennikiem API skryptów, więc nie mam zamiaru korzystać z innych opcji, jedynym wyjątkiem są klasy CSS :-) PS2. Chyba rozumiem problem: /************************************************/ /* IPB3 Javascript */ /* -------------------------------------------- */ /* ips.board.js - Board index code */ /* (c) IPS, Inc 2008 */ /* -------------------------------------------- */ /* Author: Rikki Tissier */ /************************************************/ var _post = window.IPBoard; _post.prototype.post = { cal_open: '', cal_close: '', /*------------------------------*/ /* Constructor */ init: function() { Debug.write("Initializing ips.post.js"); document.observe("dom:loaded", function(){ ipb.post.initEvents(); }); }, initEvents: function() { // Form validation if( $('postingform') ){ $('postingform').observe('submit', ipb.post.postFormSubmit); } if( $('open_emoticons') ){ $('open_emoticons').observe('click', ipb.post.toggleEmoticons); } if( $('post_options_options') && $('toggle_post_options') ){ $('toggle_post_options').update( ipb.lang['click_to_show_opts'] ); $('toggle_post_options').observe('click', ipb.post.showOptions ); } // Add calendars if( $('mod_open_date') && $('mod_open_date_icon') ){ $('mod_open_date_icon').observe('click', function(){ new CalendarDateSelect( $('mod_open_date'), { year_range: 6, close_on_click: true } ); }); } if( $('mod_close_date') && $('mod_close_date_icon') ){ $('mod_close_date_icon').observe('click', function(){ new CalendarDateSelect( $('mod_close_date'), { year_range: 6, close_on_click: true } ); }); } if( $('post_preview' ) ){ // Resize images ipb.global.findImgs( $( 'post_preview' ) ); } // Image resizing for topic summary if( $('topic_summary') ){ ipb.global.findImgs( $('topic_summary') ); } if( $('review_topic') ){ $('review_topic').observe('click', ipb.global.openNewWindow.bindAsEventListener( this, $('review_topic'), 1 ) ); } }, Jak takie coś zamknąć w swoim kodzie? W katalogu js dla aplikacji dodać takie coś? PS3. OK, problem rozwiązany. Leżał po stronie nie inicjowanie kodu JS kliknięciem. Wykorzystałem kod z IPS i działa. Może go rozbuduję na inne potrzeby :-) Pozdrawiam, Largo
-
Witaj, Nie pomagasz mi A może ktoś inny jest co rozumie nowy CSS IP.Board? W skrócie co chcę osiągnąć: http://community.invisionpower.com/index.php?app=downloads&showfile=2679 Dokładnie chcę boki takie i treść jak on ma. Czy tego nie da się dokonać o zwykłe klasy CSS?
-
Witaj, To jak robi IPS, że im działa? Zapewne CSS, ale w nim jestem słaby i to zresztą widać. Na stałe ustawione szerokości działają, ale jak ustawię CSS: div#kod_klasy { width: 300px; } To nic to nie daję, dlaczego? Pozdrawiam, Largo
-
Witaj, Porzuciłem ten pomysł. Chcę zrobić zwykły design na zasadzie bloki danych. Oto kod: <!-- Main FG Menu! --> <div id='fg_menu' class='left ipb_table clearfix'> <h3 class='maintitle'>Forum Gold Menu</h3> <ul class='test'> <li>Menu</li> </ul> <ul> <li>Test</li> </ul> </div> <div id='logs_div' class='right ipb_table clearfix'> <table class='ipb_table'> <caption class='maintitle'>Transakcje Forum Gold</td> <tr> <td>Logi Forum Gold!</td> </tr> </table> </div> Głupi, prosty kod, a nie działa. fg_menu powinno być po lewej stronie i zawierać listę opcji. Inne bloki po tej stronie to kwestia czasu. Dlaczego efekt jest taki, że oba pola się zwijają do lewej lub prawej na długość hmm, paru px?
-
Witam, Mam pewien mętlik w głowie. Otóź robię nowy projekt do IP.Board 3.0.X i idzie mi nieźle, lubię PHP5 i sam Framework IP.Board, ale mam pewien problem. Otóż chcę zbudować menu podobne do tego z Edycji profilu. Na górze menu tworzone na sztywno, ale zakładki lewe chcę generować dynamicznie. Wszystko OK, stworzę specjalne tablice i przelistuję wszystko, gdzie problem? Teoretycznie musiałbym ładować zawartość strony do 1 szablonu, czy się mylę? Czy to jest dobry sposób na rozwiązanie tego problemu? Chodzi o to, że nie chcę w szablonach tworzyć XX warunków, czy zakładka równa się danej, a potem czy jest aktywna... To da się zrobić w pętli, łącznie z warunkiem. Czy to jest opłacalne? Problem też jest w tym, że zakładki to będą inne moduły, czy może ładować menu w klasie podczas startu każdej aplikacji? Chodzi o fakt, że robiąc to, zmuszam się do tworzenia nowych odwołań, a to ma być dynamiczne dla modułów. Może lepsze rozwiązanie wyglądu? Pozdrawiam, Largo
-
Witaj, Dawidzie, proszę Cię, stosujmy się do kodu xHTML :-) <span style='color: red'> opis </span> Pozdrawiam, Largo
-
Witaj, Poradziłem sobie samemu. Zamiast w konstruktorze biblioteki, wywołuje funkcję getClass(), a następnie odwołuje się do publicznej metody, która ładuje wszelką konfigurację, pliki, CSS, JS i sprawdza podstawową funkcjonalność. Pozdrawiam, Largo
-
Witaj, [OT] Jakbym Cię nie znał to bym nie uwierzył, że Ty to mówisz ^^ Jak można nie korzystać z podstawowej funkcjonalności w językach obiektowych czyli z wyjątków? :-)[/OT] Ucięcie try i catch nic nie dało. Dalej nie ma obiektu output :-) Oto błąd: [b]Fatal error[/b]: Uncaught exception 'Exception' with message 'output is not an object' in /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsRegistry.php:918 Stack trace: #0 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/applications_addon/other/fg/sources/classFG.php(65): ipsRegistry::getClass('output') #1 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/applications_addon/other/fg/sources/classFG.php(56): ForumGoldLibrary->loadPermissions() #2 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/applications_addon/other/fg/app_class_fg.php(57): ForumGoldLibrary->__construct(Object(ipsRegistry)) #3 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsRegistry.php(1169): app_class_fg->__construct(Object(ipsRegistry)) #4 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsRegistry.php(524): ipsRegistry::_getAppClass() #5 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsController.php(75): ips in [b]/srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsRegistry.php[/b] on line [b]918[/b] Nie to powoduje ten błąd, a coś zupełnie innego. Pozdrawiam, Largo
-
Witam, Dziwny problem z tworzeniem nowej aplikacji do IP.Board 3.0.X. Mam kod app_class_aplikacja.php i tam chcę, aby dodawał biblioteki. Oto kod: <?php /** * DiabloTrade.pl * Forum Gold 2.0.0 * Forum Gold initialization class * * @author Largo-W * @copyright (c) 2008 - 2009 DiabloTrade.pl * @package Forum Gold * @version 2.0.0prealpha1 * */ if ( !defined( 'IN_IPB' ) ) { print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files."; exit(); } class app_class_fg { /** * Registry objects * @access protected * @var object */ protected $registry; protected $DB; protected $settings; protected $request; protected $lang; protected $member; protected $memberData; protected $cache; /** * Constructor * * @access public * @param object ipsRegistry reference * @return void */ function __construct( ipsRegistry $registry ) { /* Make objects */ $this->registry = $registry; $this->DB = $this->registry->DB(); $this->settings =& $this->registry->fetchSettings(); $this->request =& $this->registry->fetchRequest(); $this->cache = $this->registry->cache(); $this->caches =& $this->registry->cache()->fetchCaches(); $this->lang = $this->registry->getClass( 'class_localization' ); $this->member = $this->registry->member(); $this->memberData =& $this->registry->member()->fetchMemberData(); /* ACP location? */ if ( IN_ACP ) { try { /* Add required class! */ require_once( IPSLib::getAppDir( 'fg' ) .'/sources/classFG.php' ); require_once( IPSLib::getAppDir( 'fg' ) .'/sources/admin_fg_functions.php' ); $this->registry->setClass( 'ForumGoldLibrary', new admin_fg_functions( $registry ) ); /* Add language! */ $this->registry->class_localization->loadLanguageFile( 'admin_fg', 'fg' ); } catch( Exception $error ) { IPS_exception_error( $error ); } } else { try { require_once( IPSLib::getAppDir( 'fg' ) .'/sources/classFG.php' ); $this->registry->setClass( 'ForumGoldLibrary', new ForumGoldLibrary( $registry ) ); /* Add language! */ $this->registry->class_localization->loadLanguageFile( 'public_fg', 'fg' ); } catch( Exception $error ) { IPS_exception_error( $error ); } } } } ?> Potem biblioteka i problem pojawia się kiedy chcę wywołać $this->registry->getClass('output')->showError() lub $this->registry->output->showError(), a nawet statyczna metoda ipsRegistry::getClass('output')->showError nie działa. Czemu? Wszystkie inne obiekty są prawidłowo tworzone. Kod klasy: <?php /** * DiabloTrade.pl * Forum Gold 2.0.0 * Forum Gold Sources Class * * @author Largo-W * @copyright (c) 2008 - 2009 DiabloTrade.pl * @package Forum Gold * @version 2.0.0prealpha1 * */ if ( ! defined( 'IN_IPB' ) ) { print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files."; exit(); } class ForumGoldLibrary { /** * Registry objects * @access private * @var object */ protected $registry; protected $DB; protected $settings; protected $request; protected $lang; protected $member; protected $cache; /** * Constructor * * @param object $registry ipsRegistry object * @return void * @access public */ public function __construct( ipsRegistry $registry ) { /* Make objects */ $this->registry = $registry; $this->DB = $this->registry->DB(); $this->settings =& $this->registry->fetchSettings(); $this->request =& $this->registry->fetchRequest(); $this->lang = $this->registry->getClass('class_localization'); $this->member = $this->registry->member(); $this->memberData =& $this->registry->member()->fetchMemberData(); $this->cache = $this->registry->cache(); $this->caches =& $this->registry->cache()->fetchCaches(); /* Forum Gold enabled? */ if( !$this->settings['lw30_fg_enable'] ) { $this->registry->getClass('output')->showError( $this->lang->words['lw30_fg_off_message'], '10F01' ); } } } ?> Błąd: exception 'Exception' with message 'output is not an object' in /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsRegistry.php:918 Stack trace: #0 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/applications_addon/other/fg/sources/classFG.php(59): ipsRegistry::getClass('output') #1 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/applications_addon/other/fg/app_class_fg.php(80): ForumGoldLibrary->__construct(Object(ipsRegistry)) #2 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsRegistry.php(1169): app_class_fg->__construct(Object(ipsRegistry)) #3 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsRegistry.php(524): ipsRegistry::_getAppClass() #4 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsController.php(75): ipsRegistry::init() #5 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/admin/sources/base/ipsController.php(62): ipsController->init() #6 /srv/www/vhosts/diablotrade.pl/subdomains/dev/httpdocs/index.php(24): ipsController::run() #7 {main}
-
libiconv
-
Witaj, Czy czasem po zbanowaniu użytkownika, który np. był osobą prowadzącą dany dział nie masz jak pomóc użytkownikom? Dzięki tej modyfikacji możesz łatwo zamknąć wszystkie tematy użytkownika, gdzie był autorem! Otwórz: admin/applications/members/warn/warn.php Znajdź: IPSMember::save( $this->warn_member['member_id'], array( 'core' => array( 'mod_posts' => $mod_queue, 'restrict_post' => $restrict_post, 'temp_ban' => $susp, 'member_banned' => $member_banned, 'warn_level' => $warn_level, 'warn_lastwarn' => time() ) ) ); Dodaj poniżej: //----------------------------------------- // (LW30) Close all member topics! //----------------------------------------- $this->DB->update( 'topics', array( 'state' => 'closed' ), 'starter_id=.'$this->warn_member['member_id'] ); Pozdrawiam, Largo Autorem tutoriala jest Largo. Zabrania się kopiowania, powielania. W szczególności na inne fora bez zgody autora. Tutorial wykonany dla www.forum.invisionize.pl
-
Witaj, Wiesz, teoretycznie jeżeli użytkownik nie ma ostrzeżeń to nie ma możliwości zmiany ustawienia. Ale jeżeli ma ktoś ostrzeżenia to zmieniam siłą woli ustawienia. Bo jako czas floodingu podaję ilość sekund pomnożą w zależności od ilości ostrzeżeń. Możliwe, że cache się mieszają kiedy jest 2 użytkowników z ostrzeżeniami i aktualizuje podczas odświeżania. Próbowałem, ale tylko chwilkę z polami klasy, aby dziedziczyły czas i jeżeli istnieje ten czas to niech najpierw w ajax.php brał pod uwagę odziedziczone pole. Mógłbyś sprawdzić mój tok myślenia? Chyba, że masz lepszą propozycję rozwiązania tej sytuacji? PS. Wiem już! Kiedy użytkownik z % wejdzie naliczy mu czas za to. Dopóki nikt inny nie zaktualizuje tego wartość dla tego użytkownika będzie poprawna. Ale jeżeli w międzyczasie wejdzie kolejna to wartość znowu się zmieni dla dwóch osób. Chyba jedynym wyjściem z tej sytuacji to odziedziczone pole i po nim w skrypcie sprawdzać poprawność? Pozdrawiam, Largo
-
function _check_warn_status() { /* Alowed to use the shoutbox? */ if ( $this->ipsclass->member['id'] == '392' AND $this->ipsclass->member['g_shoutbox_use'] ) { /* Init */ $flood = ( $this->ipsclass->vars['shoutbox_flood_limit'] ) ? $this->ipsclass->vars['shoutbox_flood_limit'] : 10; $time = 0; $max = $this->ipsclass->vars['warn_max']; $warn_level = $this->ipsclass->member['warn_level']; $percents = intval( $warn_level ) ? intval( $warn_level * 100 / $max ) : 0; if( $percents != 0 ) { /* Prepare iteration! BugFix: 10% and intvaled to 0. */ $count = ( $warn_level != 1 ) ? intval( $percents / 10 ) : 1; /* Count % points! */ for( $i = 0; $i <= $count; $i++ ) { $time += $flood; } /* Add time to our member! */ $this->ipsclass->vars['shoutbox_flood_limit'] += $time; } } } Wiele poprawiłem problem w tym, że zmienna $this->ipsclass->vars['shoutbox_flood_limit'], niekiedy aktualizuje się z innymi osobami. Da się temu zaradzić czy muszę robić Flood per użytkowników?
-
Witaj, Posłuchałem Cię i dodałem. Dziękuje za uwagę, myślałem o tym, ale poprawiłem. Pojawił się nam ze znajomym inny problem. Kiedy użytkownik nie ma %, to nic się nie dzieje, ma normalny Flooding. Ale kiedy są np. 2 osoby z % Flooding zmienia się zależnie od ich aktywności na SB. Czy da się zablokować obiekt na jednego użytkownika? Czy zostaje jedynie pole w bazie danych i sprawdzanie tam wszystkiego? Pozdrawiam, Largo
-
Witaj, OK, działa już. Znalazłem powód - warn_level. On nie jest ładowany w load_member() :-) Oto poprawny kod: function _check_warn_status() { /* Alowed to use the shoutbox? */ if ( $this->ipsclass->member['id'] AND $this->ipsclass->member['g_shoutbox_use'] ) { /* Init */ $flood = ( $this->ipsclass->vars['shoutbox_flood_limit'] ) ? $this->ipsclass->vars['shoutbox_flood_limit'] : 10; $time = 0; $max = $this->ipsclass->vars['warn_max']; $member = $this->ipsclass->DB->build_and_exec_query( array( 'select' => 'warn_level', 'from' => 'members', 'where' => 'id='.$this->ipsclass->member['id'] ) ); $percents = intval( $member['warn_level'] * 100 / $max ); $count = intval( $percents / 10 ); if( $percents != 0 ) { /* Count % points! */ for( $i = 0; $i < $count; $i++ ) { $time += $flood; } /* Add time to our member! */ $this->ipsclass->vars['shoutbox_flood_limit'] = $time; } } } PS. Zapodaj pomysł dla twórców IP.Shoutbox i z pełną możliwością wykorzystaj mój kod! Pozdrawiam, Largo
-
Witam, Chciałem dla Shoutbox dodać pewną sugestię. Chodzi o to, że jeżeli użytkownik ma jakiekolwiek % zwiększa mu o 100% czas Flood. Oto kod: function _check_warn_status() { /* Alowed to use the shoutbox? */ if ( $this->ipsclass->member['id'] AND $this->ipsclass->member['g_shoutbox_use'] ) { /* Init */ $time = 0; $max = $this->ipsclass->vars['warn_max']; $warn_level = $this->ipsclass->member['warn_level']; $percents = intval( $warn_level * 100 / $max ); $count = intval( $percents / 10 ); if( $percents != 0 ) { /* Count % points! */ for( $i = 0; $i < $count; $i++ ) { $time += $this->ipsclass->vars['shoutbox_flood_limit']; } /* Add time to our member. */ $this->ipsclass->vars['shoutbox_flood_limit'] += $time; } } } Dlaczego globalny obiekt nie działa na takich userów? Przecież ten obiekt zostaje zmieniony na czas działania skryptu dla danego użytkownika. Wiele razy widziałem jak w IP.Board np. nadpisuję się zmienną systemową dotyczącą czasu nieaktywności.
