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
- Poprzednia
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- Dalej
-
Strona 2 z 13
-
Witam, Ostatnio z kolegą rozważam pewien pomysł dotyczący samych transakcji. W czym problem? Użytkownik wysyłając kasę do innego nie wykorzystuje systemowych transakcji i tu nie mam dużego pola do manewru, ponieważ określam typ na bieżąco w PHP, nie po stronie MySQL. W czym mimo to mam problem? Otóź są typy systemowe - kiedy my wydajemy kasę na rzecz akcji w której nie ma nadawcy, ale także kiedy system nam przysyła kasę, czyli nie ma nadawcy. I tu pojawiła się propozycja - zróbmy dynamiczne typy. Co to oznacza? Każdy typ byłby określany przez ACP - np. Sklep, Loteria. To są aplikacje wewnętrzne ( osobne moduły ), i np. nadajmy niebieski kolor Loterii, a Sklep niech dostanie kolor fioletowy. Ale Forum Gold ma działać z paroma aplikacjami - Gildie będą z niego korzystały, a także inne projekty. I np. inne akcje miałoby na celu pokazać co kupił i gdzie. W przypadku zewnętrznych aplikacji dawałoby się URL. Tabele mam gotową, pytam się raczej jak to w PHP ogarnąć? Doszliśmy do wniosku, że zrobimy to tak. Przy każdej aktualizacji Forum Gold dodawałoby się do razem z aktualizacją ( po co ingerować w to osobno? ), ale w przypadku osobnych aplikacji potrzebne byłby plik .xml lub wpisanie odpowiednich danych. I to da się w Cache zamknąć za każdą edycją. I tu pytanie - czy to ma sens? Jak się potem do tych danych dobierać poza aplikacją?
-
Dlatego wstrzymałem się z proszeniem o kod modyfikacji odpowiedzialnej za temat, ponieważ użytkownik zapewne dałby nam cały kod i 'szukajcie' :-) Dałem jedynie sposób rozwiązania tego problemu - dalej zostawiam Tobie decyzję. Pozdrawiam, Largo
-
Witaj, Sprawa nie jest trudna, ale modyfikacja jest płatna. Nie możesz wkleić tu kodu, który za to odpowiada. Poczekaj na odpowiedź DawPi, on musi zadecydować na ile można 'ujawniać' pliki. Punkt widzenia techniczny jest prosty - to jeden warunek, a on ma na 99% dostęp do obiektu, który zawiera tablicę danych o danym temacie. Tam wystarczy odnaleźć status tematu i sprawdzić na tej zasadzie: /* (LW30) Do not allow to thanks in closed topic! */ if( $this->topic['state'] == 'closed' ) { /* Zmienna, która zapewne określa widoczność */ $canView = 0; } Pozdrawiam, Largo
-
/banIllegalBoard http://www.domena.com/ ^^ Przepraszam za Off-Topic.
-
ROZWIĄZANY: Ograniczenie uprawnien RootAdmina forum
Largo odpowiedział(a) na Duke temat w Ogólny support IPB
Witaj, W sumie nie potrzebny Ci phpMyAdmin. Zrób w następujący sposób: ACP Zaawansowane SQL Toolbox Zjedź na sam dół i wykonaj powyższe zapytanie MySQL. Pozdrawiam, Largo -
Witam, Wiem, że są tu migacy ( lub magik ) od spraw CSS, czyli od spraw beznadziejnych :-) Otóź, mam problem, który wiem, że da się rozwiązać, ale jeszcze nie wiem jak. Oto kod: <form id="send_fg_form_{$member['member_id']}"> <input type='hidden' name='sender' id='sender' value="{$this->memberData['member_id']}" /> <input type='hidden' name='recipient' id='recipient' value="{$member['member_id']}" /> <input type='hidden' name='auth_key' id='auth_key' value="{$this->member->form_hash}" /> <fieldset class='row2'> <h3 class='bar'>Wysyłanie Forum Gold do {$member['members_display_name']}</h3> <div id="send_fg_error_{$member['member_id']}"> <br /> <p class='message error'></p> <script type='text/javascript'> $('send_fg_error_{$member['member_id']}').hide(); </script> </div> <ul> <li class='field'> <label for="send_fg_amount_{$member['member_id']}">Wyślij <input class='input_text' type='text' name='amount' id="send_fg_amount_{$member['member_id']}" size='5' value="{$this->memberData['member_fg']}" onFocus="if( this.value == '{$this->memberData['member_fg']}' ) { this.value = '' }" /> Forum Gold do {$member['members_display_name']} ( {$member['member_fg']} ) </label> </li> <li class='field'> <label for="send_fg_comment_{$member['member_id']}">Podaj komentarz do transakcji!</label> <input class='input_text' name="send_fg_comment_{$member['member_id']}" id="send_fg_comment_{$member['member_id']}" /> <span class='desc'>Wpisz komentarz dotyczący transakcji. Maksymalna długość to 32 znaki!</span> </li> <li class='field'> <label for="send_fg_password_{$member['member_id']}">Wpisz swoje hasło Forum Gold!</label> <input class='input_text' type='password' name='password' id="send_fg_password_{$member['member_id']}" /> <if test="empty( $this->memberData['member_fg_password'] )"> <span class='desc'>Jeżeli nie ustawiłeś hasła Forum Gold, wpisane hasło zostanie zapisane do bazy danych!</span> </if> </li> <if test="$this->memberData['g_access_cp'] || ( $this->memberData['member_group_id'] == $this->settings['admin_group'] )"> <li class='field checkbox'> <input class='input_check' type='checkbox' name='invisible' id="send_fg_invisible_{$member['member_id']}" value='1' /> <label for="send_fg_invisible_{$member['member_id']}"><strong>Ukryć transakcję?</strong></label> <span class='desc'>Opcja ta jest dostępna TYLKO dla osób z uprawnieniami administratora!</span> </li> </if> <if test="$this->memberData['g_fg_send_anymously'] = true"> <li class='field checkbox'> <input class='input_check' type='checkbox' name='anonymous' id="send_fg_anonymous_{$member['member_id']}" value='1' /> <label for="send_fg_anonymous_{$member['member_id']}"><strong>Anonimowa transakcja?</strong></label> <span class='desc'>Ustawiając tą opcję, Twój kontrahent nie będzie wiedział kto mu wysłał Forum Gold.</span> </li> </if> </ul> </fieldset> <fieldset class='submit'> <input class='input_submit' type='submit' name='submit' value='Wyślij Forum Gold' accesskey='s' tabindex='0' /> <a href='{parse url="showbuyfg" template="showbuyfg" seotitle="buyfg" base="publicWithApp"}' class='input_submit alt' title='Zakup Forum Gold!' target='_blank'>Kup Forum Gold</a> lub <a href='#' class='cancel' title='Anuluj transakcje' id="send_fg_cancel_{$member['member_id']}" tabindex='0'>Anuluj</a> </fieldset> </form> A oto screen co ten kod pokazuje: [/img] Na obrazku dodałem zamieszczone 2 kreski - poziome i pionowe. Pionowa ma za zadanie oddzielić label od input, tak jak w klasie post_form, ale z uwzględnieniem długości znaków, a nie stałą wartością. A kreska pozioma ma działać jak tag <hr />, ale sam w sobie nie pomaga. Czy magik z CSS da radę mnie wspomóc w tym? Pozdrawiam, Largo
-
ROZWIĄZANY: Ograniczenie uprawnien RootAdmina forum
Largo odpowiedział(a) na Duke temat w Ogólny support IPB
Witaj, Najprościej, wejdź do phpMyAdmin i wykonaj następujące zapytanie: UPDATE ibf_members SET member_group_id = 4 WHERE member_id = X X - Twoje ID, zazwyczaj 1. Podałem jako grupę ID = 4, ponieważ zazwyczaj grupa głównych administratorów ma dokładnie takie ID. Pozdrawiam, Largo -
Aktualizacja via Ajax w czasie rzeczywistym
Largo opublikował(a) temat w Programowanie / tworzenie styli
Witam, Od pewnego momentu spływają do mnie pewne sugestie dotyczące najnowszej wersji aplikacji, który piszę. Testerzy narzekają, że skoro tak wiele zrobiliśmy to i ułatwmy łatwy dostęp handlarzom do Forum Gold. Wpadli na pomysł, żeby informację o kwocie, która znajduje się obok profilu ( Wyloguj Pomoc ) aktualizować via Ajax. Z tym nie ma problemu, bo wykorzystam tutaj Ajax.PeriodicalUpdater i już sprawdzałem i działa tak jak chciałem. Problem się pojawia w tym, że gdzie wkleić jego kod? W miejsce, gdzie dodaję listę, to raczej chyba mało subtelne rozwiązanie, a ta informacja ma być w pełni globalna. Ma działać wszędzie na forum. Taki urok tej aplikacji, że muszę w choć jednym miejscu pokazywać taką ilość, co jest w sumie logiczne z punktu widzenia samej złożoności aplikacji. Liczę, że wspomoże mnie ktoś z tego zakresu! Pozdrawiam, Largo -
Taki urok człowieka, że szuka dziury w całym? :-) OK, lekki żart na wstęp dyskusji. Myślałem o rozwiązaniu Cache, ale problem jest o tyle nie banalny, że te dane są zależne od czynnika zewnętrznego - wyboru miesiąca. Nie ma sensu zapisywać tego w Cache bo i co to da? Standardowo skrypt ma pobierać dla danego miesiąca ( od jego początku do jego końca ) i tak aż do 12 miesięcy od jego daty rejestracji lub jeżeli użytkownik jest dłużej niż 12 miesięcy każdy kolejny od tamtej daty ( lista ma być nie za duża, jak i sprawdzania danych przez użytkownika, od tego mają Archiwum transakcji ). Czyli jeżeli miałbym zapisywać w Cache to aż 12 miesięcy, a potem także kontrolować czy dany miesiąc jest sens trzymać w Cache. Oficjalnie bym się tym nie przejmował, ale jeżeli teraz coś robię ( na najnowsze IP.Board, które wspiera naprawdę mocno OO i PHP5 ) nie chcę spartolić roboty. Co zrobię potem, kiedy zapytania będą tak mało wydajne na bazę danych? OK, istnieje opcja wyłączenia danych, ale aż tak daleko nie posuwam myśli. I nie denerwuj się :-) Znasz mnie już trochę i wiesz, że wolę się upewnić i dmuchać na zimne, w końcu to dyskusja nie podejmujemy żadnych kroków, a może w między czasie wpadnie złoty pomysł? :-) Pozdrawiam, Largo
-
OK, rozumiem to, ale nie kapuję jaki to ma sens. Obecny kod wygląda tak: /* Different Month? */ $selectedMonth = ( $inputMonth ) ? $inputMonth : $actualMonth; /* Get logs */ $this->SQL->getTransactionsData( $memberData, $sortKey, $orderType, $selectedMonth, $currentPage, $perPage ); /* Any logs available? */ if( $this->DB->getTotalRows() ) { while( ( $row = $this->DB->fetch() ) ) { /* Invisible transaction? */ if( $row['invisible'] && !$this->library->isAdministrator ) { continue; } /* Parse transaction! */ $logsData[] = $this->parseTransaction( $row, $memberData ); } } /* Create Base URL! */ $baseURL = 'app=fg'; if( $this->isModeratorSection ) { $baseURL = 'showtransactions='.$memberData['member_id']; } else { /* With month? */ if( $inputMonth ) { $baseURL .= '&selectedMonth='.$inputMonth; } } $statsData = $this->SQL->getTransactionsStats( $memberData, $selectedMonth ); W miejsce funkcji do zapytania z transakcji mamy prawie takie same, jakbym listował dla tej propozycji co Ty. Co mi to da? Nie dość, że dodatkowy kod ( tamtego nie wykorzystam ze względu na klauzulę LIMIT ), to jeszcze prawie identyczny zapytania MySQL. Widzisz w tym sens? Pozdrawiam, Largo
-
Witam, Mam na ukończeniu mój duży projekt, ale jedna rzecz nie daję mi spokoju - optymalizacja. Ogólnie jest ona na wysokim poziomie, skupiałem się na tym, aby było jak najlepiej wykonane i zachowane zasoby, które tych operacji wymagają. Mimo to, został mi pewien nie dosyć patrząc na to: SELECT COUNT(*) AS 'allTransactions' (SELECT SUM( `amount` ) FROM `ibf_fg_transactions` WHERE `sender_id` = $uid OR is_system = 1) AS 'minusBilance', (SELECT SUM( `amount` ) FROM `ibf_fg_transactions` WHERE `recipient_id` = $uid OR is_system = 1) AS 'plusBilance' FROM `ibf_fg_transactions` WHERE ( `sender_id` = $uid OR `recipient_id` = $uid ) AND MONTH( FROM_UNITIME( `date` ) ) = $selectedMonth; W czym jest rzecz? Patrząc na to zapytanie nasuwa się jedno słowo - podzapytania. O dziwo nie mam problemu z ich wykonaniem - wykorzystuję $this->DB->allow_sub_select = 1; :-) Mimo to, sam fakt, że te wyniki są danymi na głównym module jak i sekcji aplikacji, będzie on wykonywany zawsze i to na dodatek jako jeden z pierwszych operacji. Z logicznego punktu widzenia zamknięcie tego w podzapytania daję nam tylko jeden komfort - wynikiem jest 1 zapytanie do MySQL. Ale prawda jest taka, że wykonujemy aż 3 zapytania! Do sedna - skrypt ma pokazać 4 dane: Ilość transakcji - w tym podzielone na systemowe! Kwota, którą wysłaliśmy ( Nadawca ) Kwota, którą otrzymaliśmy ( Odbiorca ) O ile nie ma problemu z wydobyciem tych danych o tyle jest problem z faktem optymalizacji. Czy ma ktoś pomysł jak to rozwiązać? Moje obecne rozwiązanie opiera się na polach klasy i w czasie listowania transakcji są zliczane do tablicy dane, ale jest wada - odbywa się na dla strony! A to ma być globalne dla miesiąca. Liczę na Wasze pomysły! Pozdrawiam, Largo
-
Ustawienia użytkownik a Cache
Largo odpowiedział(a) na Largo temat w Programowanie / tworzenie styli
Witaj, Wiesz jaki projekt robię, dokładnie system transakcyjny - muszę dać użytkownikowi możliwość zmiany paru ustawień lu wyłączenie powiadamiania via PW lub zmienić na Email. Przecież nie od dziś wiadomo, że gust to rzecz odmienna dla każdego człowieka, jeden lubi jak jest i się dostosuje, a drugi znowu będzie chciał dla siebie parę zmian wprowadzić dla czytelności. OK, to skoro baza się nie ugnie po tym to dodam, ale tych ustawień lekką ręką będzie ok. 15 na obecny etap aplikacji, nowsze wersje na 100% wniosę kolejne ustawienia... Problem w tym, że robię dosyć potężną aplikację :-) A ja mam "bzika" jak widzę w bazie tyle pól. Podaj mi sposób jaki Ty byś wykorzystał lub zalecane przez IPS. -
Witam, Tworząc moją dużą aplikację do obsługi transakcji i wiele więcej natknąłem się na pewny problem. Od dawna użytkownik nie miał opcji zmienić żadnych danych w niej, a w tej wersji chcę to mocno poprawić. Zakładam sytuację, ze parę osób chcę mniej transakcji na stronę lub nie chcę dostawać powiadomień o transakcji lub nie na PW i tym podobne ustawienia. I tutaj wpadłem na pomysł, aby zapisywać je w cache użytkownika ( members_cache ) czy to dobre rozwiązanie? Oglądając samo IP.Board, oni to zapisują w tabeli ibf_members lub w innych pośrednich tabelach. Czy ja powinien zostawić to w Cache czy zapisywać tak jak oni? Pozdrawiam, Largo
-
Witaj, Sądząc po Twojej wypowiedzi, stwierdzam, że nie zbadałeś dokładnie sytuacji. Po czym to wnioskuję? Masz podany numer kodu błędu i po nim łatwo stwierdzić co się dzieje w aplikacji. A oto co się w niej dzieje: //----------------------------------------- // Check viewing permissions, etc //----------------------------------------- if ( ! $this->memberData['g_use_pm'] ) { $this->registry->getClass('output')->showError( 'messenger_disabled', 10226 ); } /* Wyłączone PW, do włączenia z poziomu ACP */ if ( $this->memberData['members_disable_pm'] ) { $this->registry->getClass('output')->showError( 'messenger_disabled', 10227 ); } if ( ! $this->memberData['member_id'] ) { $this->registry->getClass('output')->showError( 'messenger_no_guests', 10228 ); } /* Moduł prywatnych wiadomości nie jest włączony - więcej o tym napiszę poniżej */ if( ! IPSLib::moduleIsEnabled( 'messaging', 'members' ) ) { $this->registry->getClass('output')->showError( 'messenger_disabled', 10227 ); } Opis Twojego problemu dałem w kodzie. Skoro masz dostęp do ACP to upewnij się, że flaga wyłączenia PW nie jest aktywna - prosty sposób to sprawdzanie w SQL, oto zapytanie: SELECT members_disable_pm FROM ibf_members WHERE member_id = X X - wpisz swoje ID użytkownika. Następnie, jeżeli masz pewność, że PW nie zostało wyłączone, przejdźmy do modułu. Zadaniem te funkcji jest sprawdzenie czy w aplikacji members ( drugi parametr tej funkcji ) znajduje się moduł o nazwie messaging, czyli na pewno musi iść plik i klasa musi mieć poprawną nazwę. Sprawdź te rzeczy, a jeżeli wszystko się zgadza, zostaje ACP i włączenie modułu. Jak? ACP System Manage Applications & Modules Members Zarządzanie publicznymi modułami Messaging Moduł włączony Na pewno będzie włączona opcja, że moduł nie wyłączony. Zmień tą opcję i daj nam znać czy pomogło! Pozdrawiam, Largo
-
Połączenie autorskiego CMS i IPB (wspólne logowanie)
Largo odpowiedział(a) na darek temat w Programowanie / tworzenie styli
Witaj, Tak na wstępie, wytłumacz mi, skoro chcesz zintegrować IP.Board ze swoim własnym, autorskim CMS, to dlaczego nie chcesz skorzystać z narzędzia, którego docelowym założeniem jest właśnie połączyć system logowania z innych źródeł z IP.Board? Zakładam, że Twoja wiedza z zakresu PHP, MySQL i OO jest większa niż napis 'Add Above' lub 'Add Before'? Przepraszam za takie pytanie, ale musimy dojść do sensownego porozumienia. Przejdźmy do założeń i samego problemu - pamiętasz IP.Board w wersji 2.3.X? Czy od czasu przejścia na IP.Board 3.0.X, nie zauważyłeś pewnych zmian? W nich są między innymi: Inna struktura katalogów Przepisanie IP.Board z PHP4 na PHP5 Żadna modyfikacja z serii 2.3.X nie działa na IP.Board 3.0.X Jeżeli nie zauważyłeś zmian, to absolutnie w niczym Ci nie pomożemy. Dodam Ci tylko od siebie, że IP.Board w wersji 3.0.X przeszło zupełną zmianę, panowie z Invision Power Services postawili na nowy schemat programowania, przygotowali narzędzia dla programistów i dali im pełne pole do popisu bez edycji kodu źródłowego. Na początek Twojego pytanie odpowiedziałem - nazwy funkcji zostały na 100% zmienione wg. notacji, że pierwszy człon piszę się z małej litery, a drugi i kolejny z dużej ( nie pamiętam niestety nazwy... ), więc, jeżeli miałeś funkcję -> $this->ipsclass->get_method( 'main' );, to w obecnej wersji napisaliby to tak -> $this->registry->getMethod( 'name' ); Twój skrypt dlatego zapewne nie działa. Większość rzeczy się nie zmieniło, nawet komentarze zostawili te same, zmienili jedynie nazewnictwo i samo jądro IP.Board. Na początek Ci polecę to: Developer: Log a user in Developer: Creaing a login module Powinny Ci rozjaśnić trochę sytuację z IP.Board. Wypada poczytać, poszukać w informacji dla developerów, ponieważ logicznym jest, że nie podadzą informacji o swoim API ( Google.pl jeśli nie wiesz co to ), zwykłemu klientowi, ponieważ przyprawi go to o ból głowy :-) Życzę udanej zabawy z nowym, lepszym IP.Board! Pozdrawiam, Largo -
Witaj, Czytając temat dochodzę do wniosku, że albo nie jesteś administratorem tego forum, albo zupełnie nie ogarniasz co się wokół Ciebie dzieję... Wyjaśnię Ci na czym polega blokada konta. W tabli ibf_members masz takie pole: members_cache, ono zawiera zserializowaną tablicę danych. Więcej o Serializacji tutaj! Co dalej? Skoro jest to tablica danych, czyli ogólnie pojęta informacja lub informacje danych, coś od nich zależy. DawPi nazywając ją 'Kaśka', nazwał potocznie technikę zwaną Cache, na czym znów ów stwór polega? Na tym, że dane są zapisane w postaci, do której łatwo się dobrać. W IP.Board są to min. ustawienia, dostęp do języka, dostęp do rejestru i wiele innych, którzy rozumieją programiści. Ale do sedna sprawy - nie może Ci DawPi dać gotowego zapytania. Dlaczego? Ponieważ nie wiadomo jaką treścią masz wypełnione pole. W tych danych na 110% jest taka informacja: sb_banned => 1, i jeżeli ją usuniesz to ban zniknie. Masz więc parę opcji: Prosisz kogoś, aby wpisał magiczną komendę: /ban Nick Sam usuwasz pamięć podręczna ( na własne ryzyko! ) Podajesz nam treść Twojego pola members_cache i my Ci damy gotowe zapytanie Wybór jest Twój, a jeżeli coś piszemy o czymś czego nie rozumiesz, wypada sięgnąć do tajnej broni Internetu - Google.pl. Nie zawodzi, jak się jej używa, odwzajemnia się poprawnymi wynikami. Pozdrawiam, Largo
-
Witam, Stanąłem na ciężkim problemie, i w dodatku z JS. Mam tabelę, jej nagłówek wygląda tak: <thead class='header'> <th scope='col' width='20%'><a style='cursor: pointer' onClick='return ipb.FGClass.sortLogs( 1 )'>{$this->lang->words['fg_transaction_date']}</a></th> <th scope='col' width='5%'>{$this->lang->words['fg_transaction_type']}</th> <th scope='col' width='25%' colspan='2' style='text-align: center'>{$this->lang->words['fg_transaction_amount']}</th> <th scope='col' width='30%' colspan='2' style='text-align: center'><a style='cursor: pointer' onClick='return ipb.FGClass.sortLogs( 2 )'>{$this->lang->words['fg_transaction_who']}</a></th> <if test="$isModerator"> <th scope='col' width='6%' style='text-align: center'><a style='cursor: pointer' onClick='return ipb.FGClass.sortLogs( 3 )'>{$this->lang->words['fg_transaction_ip']}</a></th> <th scope='col' width='14%'>{$this->lang->words['fg_transaction_comment']}</th> <else /> <th scope='col' width='23%'>{$this->lang->words['fg_transaction_comment']}</th> </if> </thead> Jak widać, zwyczajny nagłówek tabeli, ale różni się wywołaniami Ajax. Samo wywołanie jest w porządku, działa dla odpowiednich akcji. Gdzie leży pies pogrzebany? Zapewne w kodzie JavaScript, którego prezentuję poniżej: /* * Method to sort by user type * * @param int Sort Key * @retun string New HTML */ sortLogs: function( sortType ) { /* Change indicator! */ var sortOrder = ipb.FGClass.sortOrder = ( ipb.FGClass.sortKey == sortType ) ? !ipb.FGClass.sortOrder : 0; /* Save sort key! */ ipb.FGClass.sortKey = sortType; /* No client Cache? */ if( !Object.isArray( ipb.FGClass.cacheTable[ ipb.FGClass.sortKey ] ) ) { /* Get Transacions! */ var _url = ipb.vars['base_url'] + 'app=fg&module=ajax&secure_key=' + ipb.vars['secure_hash'] + '§ion=logs&do=getTransactions'; new Ajax.Request( _url, { method: 'post', evalJSON: 'force', parameters: { 'sortType' : ipb.FGClass.sortKey, 'isModeratorSection' : ipb.FGClass.isModeratorSection, 'moderatedMember' : ipb.FGClass.moderatedMember }, onSuccess: function( returnResponse ) { /* Save to Temp */ tempArray = returnResponse.responseJSON['transactionsCache']; } } ); /* Update Cache */ ipb.FGClass.cacheTable[ ipb.FGClass.sortKey ] = tempArray; } /* Update Table */ new Ajax.Updater( 'sortable', ipb.vars['base_url'] + 'app=fg&module=ajax&secure_key=' + ipb.vars['secure_hash'] + '§ion=logs&do=getTransactionsHTML', { method: 'post', parameters: { 'transactionsData' : ipb.FGClass.cacheTable[ sortType ] } } ); }, I tu mam pewne problemy. Sortowanie ma działać tylko 3 razy, jeżeli człowiek to moderator skryptu, w innym wypadku tylko dla dwóch sytuacji. I to robi, nie da się zaprzeczyć. W czym rzecz? Cache! Jeżeli ominąłbym go, każde jednorazowe kliknięcie oznaczałoby wywołanie Ajax i dosyć ciężkiego zapytania, pomijam fakt wyliczenia paru danych dla samego zapytania. W każdym bądź razie ta sytuacja otwiera lukę DDoS. Muszę więc w składowe klasy dodawać dane, które są aktualizowane przez klucze kryteriów. Problem w tym, że te dane się dziwnie zapisują. Inny problem o ten, że nie ma sensu sortować wg. kierunków w MySQL, mając dane z kryterium, wystarczy posortować w JS, ale jak? Jakie kryteria sortowania dać? Pozdrawiam, Largo
-
Ręczę głową, dawałem 2 razy, więc pomyłka nie wchodzi w grę. Skrypt się wykonuje, zarówno konstruktor jak i metoda getOutput(). Pozdrawiam, Largo
-
Witaj, Nie mam pliku instalacyjnego, nie mam trybu DEV, pracuję na zwykłym IP.Board, miałem dosyć użerania się z trybem dla developerów, niech IPS mi to zrobi, skoro tacy mądrzy. Wyjaśnij mi tylko, dlaczego ten kod nie chcę dodać informacji? Pozdrawiam, Largo
-
Witaj, Dlaczego przykładowy kod: <?php /** * DiabloTrade.pl * Forum Gold 2.0.0 * Hook - Add to header info about account! * * @author Largo-W * @copyright (c) 2008 - 2009 DiabloTrade.pl * @package Forum Gold * @version 2.0.0prealpha1 * */ class headerFGInfo { /** * Registry objects * @access public * @var object */ public $registry; public $DB; public $settings; public $lang; public $member; public $memberData; /** * Main entry point * * @param object $registry ipsRegistry object * @return void * @access public */ public function __construct() { $this->registry = ipsRegistry::instance(); $this->DB = $this->registry->DB(); $this->settings =& $this->registry->fetchSettings(); $this->lang = $this->registry->getClass('class_localization'); $this->member = $this->registry->member(); $this->memberData =& $this->registry->member()->fetchMemberData(); } /** * Return HTML Output * * @param object $registry ipsRegistry object * @return void * @access public */ public function getOutput() { return 'Forum Gold'; } } Nie ma ochoty prezentować danych? Zwracając tą wartość powinien dodać przed "Pomoc", czyli przed warunkiem authenticating, a nie dodaję. Pozdrawiam, Largo
-
ROZWIĄZANY: Data rejestracji i brak miesiąca rejestracji.
Largo odpowiedział(a) na Largo temat w Programowanie / tworzenie styli
Witam, Uwielbiam rozmowy ze samym sobą ;-) Poradziłem sobie z tym problemem, oto rozwiązanie: /* Create list of months! */ $userJoinDate = $this->memberData['joined']; $actualDate = time(); $actualMonth = date( 'F', $actualDate ); $monthsData = ''; $countMonths = 1; /* Set to current time! */ IPSTime::setTimestamp( $userJoinDate ); /* Create language array of months */ $monthsNames = array( $this->lang->words['M_1'], $this->lang->words['M_2'], $this->lang->words['M_3'], $this->lang->words['M_4'], $this->lang->words['M_5'], $this->lang->words['M_6'], $this->lang->words['M_7'], $this->lang->words['M_8'], $this->lang->words['M_9'], $this->lang->words['M_10'], $this->lang->words['M_11'], $this->lang->words['M_12'] ); /* List months! */ while( $userJoinDate < $actualDate ) { /* More than 12 months? */ if( $countMonths >= 12 ) { break; } /* Get Month */ $dateArray = IPSTime::unixstamp_to_human( $userJoinDate ); /* Add to list of months... */ $monthsData .= "\t<option value='{$dateArray['month']}'"; $monthsData .= ">{$monthsNames[ $dateArray['month'] - 1 ]} {$dateArray['year']}</option>\n"; /* Add month! */ IPSTime::add_month(); $userJoinDate = IPSTime::getTimestamp(); /* Increment! */ $countMonths++; } /* Current month? */ if( date( 'm', $userJoinDate ) == date( 'm', $actualDate ) ) { $monthsData .= "\t<option value='".date( 'n', $userJoinDate )."' selected='selected'"; $monthsData .= ">{$monthsNames[ date( 'm', $userJoinDate ) - 1 ]} ".date( 'Y', $userJoinDate)."</option>\n"; } -
ROZWIĄZANY: Data rejestracji i brak miesiąca rejestracji.
Largo opublikował(a) temat w Programowanie / tworzenie styli
Witam, Mam taki kod: /* Create list of months! */ $userJoinDate = $this->memberData['joined']; $actualDate = time(); $actualMonth = date( 'F', $actualDate ); $monthsData = ''; $countMonths = 1; /* Set to current time! */ IPSTime::setTimestamp( $userJoinDate ); /* Create language array of months */ $monthsNames = array( $this->lang->words['M_1'], $this->lang->words['M_2'], $this->lang->words['M_3'], $this->lang->words['M_4'], $this->lang->words['M_5'], $this->lang->words['M_6'], $this->lang->words['M_7'], $this->lang->words['M_8'], $this->lang->words['M_9'], $this->lang->words['M_10'], $this->lang->words['M_11'], $this->lang->words['M_12'] ); /* List months! */ while( $userJoinDate < $actualDate ) { /* More than 12 months? */ if( $countMonths >= 12 ) { break; } /* Add month! */ IPSTime::add_month(); $userJoinDate = IPSTime::getTimestamp(); /* Get Month */ $dateArray = IPSTime::unixstamp_to_human( $userJoinDate ); /* Add to list of months... */ $monthsData .= "\t<option value='{$dateArray['month']}'"; $monthsData .= ( $actualMonth == $dateArray['month'] ) ? " selected='selected'" : ''; $monthsData .= ">{$monthsNames[ $dateArray['month'] - 1 ]} {$dateArray['year']}</option>\n"; /* Increment! */ $countMonths++; } I on ma wygenerować listę miesięcy od daty rejestracji, ale razem z nią, a pomija ten miesiąc, dlaczego? Na logikę ma pokazywać miesiące dostępne od niej do dziś i to działa, ale dlaczego nie dodaje pierwszego możliwego? Warunek pętli wydaje mi się poprawny. Pozdrawiam, Largo -
Witam, Moi użytkownicy narzekają na to, że na forum dotyczącym handlu nie da się edytować pierwszego posta w celu aktualizacji listy. Właśnie jestem w trakcie kończenia owej modyfikacji i zastanawiam się Wy może macie jakieś sugestie. Obecne ustawienia to: Czy modyfikacja włączona? Które grupy mogą z niej korzystać? Które fora są aktywne na modyfikację? Jeżeli macie jakieś sugestie, proszę o napisanie ich w temacie. Pozdrawiam, Largo
-
Witam, DawPi ma rację - dedykowany na 3.0, jak i każda inna modyfikacja, którą wykonam. Na 2.3.X mam forum, ale wszystkie modyfikacje jakie obecnie robię, tworzę dla najnowszej wersji. Proszę oczekiwać modyfikacji w ciągu ~2 tygodni, ponieważ mam pracę i zostaje mi tylko parę h po niej dla siebie :-)
-
Witam, Nie musisz DawPi tracić czasu, moi koledzy wyparli na mnie ten pomysł i już go wykonuję. Za jakiś czas podeślę na IZE.pl
- Poprzednia
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- Dalej
-
Strona 2 z 13
