Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Hej
Jest sobie wordpress, jakieś tam mniej lub bardziej szemrane wtyczki, no i trzeba toto zmusić do działania tak jak ja chcę a nie tak jak chciał wtyczkopisacz :)
Jest sytuacja zastana:
W tabeli wp_options jest sobie rekord z name='wtyczka' i value (text) na którym wtyczka sobie operuje
Sytuacja wymagana:
Jest dodatkowa tabela, zawierająca jakiś klucz i wartość, coś w stylu:
create table wp_dupa ( klucz text unique not null, value text );
W tabeli wp_options jest sobie dodatkowy rekord zawierający aktualny klucz i name powiedzmy "pupa".
Cały pic polega na tym, aby:
a) jakakolwiek zmiana rekordu 'wtyczka' w tabeli wp_options spowodowała przepisanie value do tabeli wp_dupa do rekordu określonego przez klucz pobrany z rekordu "pupa" w wp_options;
b) zmiana wartości w rekordzie "pupa" w wp_options powodowała przepisanie odpowiedniej wartości z tabeli wp_dupa do wp_options do rekordu "wtyczka";
ale
c) przepisanie z punktu b) nie może wywoływać akcji z punktu a)
Czyli co chcę osiągnąć:
a) wtyczka sobie cały czas operuje na swoim rekordzie
b) chcę umożliwić operowanie owej wtyczki na różnych rekordach (z zastrzeżeniem, że zawsze podaję "rekord aktualny") - czyli zawsze mam w wp_dupa aktualną kopię rekordu z wp_options;
c) nie mam możliwości zmiany kodu wtyczki (z przyczyn czysto technicznych)
W postgresie to bym zrobił w ciągu paru minut (trigger w pgplsql) - ale w MySQL jakoś nie bardzo wiem od której strony to chwycić...
Jakieś pomysły?
@Jacekalex - Ty zdaje się piałeś peany na temat MySQL-a, może coś podpowiesz?
Offline
może normalny trigger zgodnie z dokumentacją? :> coś w stylu
create trigger dupa_update after update on wp_options update wp_dupa set pole_z_wp_dupa = NEW.interesujące_pole_z_tableli_wp_options
Offline
@Jacekalex - Ty zdaje się piałeś peany na temat MySQL-a, może coś podpowiesz?[/quote]
Możesz w kodzie wtyczki dać, aby inserta puszczał równocześnie na rożne tabele, albo Trigger, jak wyżej Winnetou napisał.
Zależy, gdzie to chcesz mieć robione, na poziomie bazy (automat w SQL),
czy wtyczki (kod PHP).
A poza tym, to nie napisałeś, co to za wtyczka, i czego od niej dokładnie oczekujesz.
PS:
Moje Peany na temat Mysqla dotyczyły (jak zapewne pamiętasz) łatwości konfigurowania uprawnień, i bardzo szczelnej separacji uprawnień poszczególnych użytkowników bazy, czego w Postgresie nie zauważyłem na razie, mam na myśli konkretnie dostęp pacjenta do informacji o uprawnieniach innych pacjentów, tego dotyczyła nasza ówczesna dyskusja.
Pozdro
;-)Ostatnio edytowany przez Jacekalex (2015-03-10 16:53:38)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
Tak mam i niestety działa źle - czasami myli rekordy i wpisuje do wp_dupa niewłaściwe wartości (tzn. przełączenie zmiany w wp_options(pupa) powoduje niepotrzebne przepisanie wartości)
___
[quote=Jacekalex]Zależy, gdzie to chcesz mieć robione, na poziomie bazy (automat w SQL),
czy wtyczki (kod PHP).[/quote]
Niestety na poziomie bazy - nie panuję nad tym co robi wtyczka
A poza tym, to nie napisałeś, co to za wtyczka, i czego od niej dokładnie oczekujesz.[/quote]
Konkretnie to NXS (aka SNAP) a chodzi o możliwość istnienia zamiennie kilku(set) konfiguracji na jednym wordpressie.
Nim mechaniczne larum zagrasz mi, kanalio,
głosząc nadejście Javy - śmiertelnego wroga!
[i]Zespół Adwokacki Dyskrecja[/i]
Offline
Daj fragment obu interesujących Cię tabel (1 rekord styknie) razem z konkretnymi nazwami pól i rozpisz jakie przypadki konkretnie Cię interesują :)
P.S.
Logika w bazie (zwłaszcza w mysqlu) to ZUO :)
Offline
Kilkaset konfigów na jednym WP? Jaja sobie robisz?
Łatwiej zatrudnić wp_cli, i metodą pętli zrobić kilkaset instalacji WP.
Zawsze możesz też na bazie oryginalnej wtyczki napisać własną, a potem zarabiać na dobrowolnych datkach zachwyconych pacjentów, jak niejaki [url=https://addons.mozilla.org/pl/firefox/addon/adblock-plus/developers]Wladimir Palant[/url].
Wielkiego majątku na tym nie zrobisz, ale na porządnego UPSa do RPi pewnie uzbierasz. xD
Ostatnio edytowany przez Jacekalex (2015-03-10 17:08:21)
Offline
Tabela wp_options - dwa rekordy:
(option_name='wtyczka', option_value='jakiś_serializowany_pehap') (option_name='klucz_ethanaka', option_value='jeden')
Tabela wp_dupa (n rekordów):
(klucz='jeden', value='jakiś_serializowany_pehap') (klucz='dwa', value='inny_serializowany_pehap) (klucz='trzy', value='jeszcze inny_serializowany_pehap) ...
W tabeli wp_dupa musi [b]zawsze[/b] siedzieć kopia aktualnego (pokazywanego przez klucz_ethanaka) rekordu z wp_options z option_name='wtyczka';
W tabeli wp_options w rekordzie opisywanym przez option_name='wtyczka' [b]zawsze[/b] musi siedzieć kopia rekordu z wp_dupa wskazywanego przez klucz_ethanaka.
Chyba nic nie pominąłem...
@jacekalex: nie, nie robię jaj, ja z tego mam na chleb i nawet na kiełbasę do chleba.
Owszem mógłbym - tylko że wtyczka dostaje upgrady dość często, poza tym część jest wojennotajna (wtyczka nie jest niestety open).
Kilkuset wordpressów próbowałem - niestety zarzyna to serwer.
Ostatnio edytowany przez ethanak (2015-03-10 17:09:44)
Offline
@jacekalex: nie, nie robię jaj, ja z tego mam na chleb i nawet na kiełbasę do chleba.[/quote]
Ja nie robię jaj, pytałeś konkretnie mnie, to masz odpowiedź konkretnie ode mnie.
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
Ej, to Ty mnie posądzałeś o robienie jaj ;) A ja mam po prostu taką pracę :(
Offline
Ja niestety też mam podobną robotę, ale chyba w mniejszej skali. ;)
A do robienia jaj są koguty, kaczory i indyki.
W każdym razie, wtyczka NXS jest do spamowania wpisami na społecznościówkach, chyba, że mówimy o dwóch różnych wtyczkach.
Ja znam tą:
http://www.nextscripts.com/products/
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2015-03-10 17:24:45)
Offline
[quote=Jacekalex]W każdym razie, wtyczka NXS jest do spamowania wpisami na społecznościówkach[/quote]
To następną razą się uprzejmie nie pytaj co to za wtyczka jeśli masz jakieś wątpliwości do czego może służyć.
Offline
Chwileczkę, jest sobie wtyczka NXS, i jeśli zrozumiałem, kiedy ta wtyczka dodaje wpis np do Twittera, to równocześnie ma dodać wpis do tabeli wp-dupa na temat wplsanej na Twittera wiadomości, tak? ma to być zrobione w bazie?
Triggery, we wszystkich systemach bazodanowych to robią, albo jakiś skrypt Crona, który kopiuje co trzeba między tabelami.
Wtyczka NXS jest odpalana z Crona? to dopisać kolejne polecenie do Crona chyba potrafisz, także osobny skrypt by ewentualnie miał sens.
Tu ma blogu masz kompletny przykład Triggera:
http://blog.adamzawalski.com/trigger-mysql/
Ostatnio edytowany przez Jacekalex (2015-03-10 18:24:32)
Offline
Nie, troszkę inaczej.
Po prostu rozszerzam pewne możliwości wtyczki (raczej mało komu przydatne). W tabeli trzyma swoje ustawienia (tzn. dane konta na których ma zrobic wpis). Mi chodzi o to, aby można było mieć więcej niż jeden zestaw danych (np. informacje o stronach typu "a" wrzucam na firmowego facebooka, a o stronach typu "b" na prywatnego, dodatkowo dając znać na twitterze). Teoretycznie coś takiego we wtyczce istnieje ale nie ma praktycznie żadnej możliwości sensownego zarządzania takimi "profilami", a przy ilości profili większej niż trzy jest to nie do ogarnięcia.
Zresztą chyba przyśniło mi się rozwiązanie, tylko nie wiem jak to na pisać w MySQL-u.
Wprowdzam dodatkowe pole do tabeli wp_options - np. z nazwą 'stary_klucz'. Triger after update do tabeli wp_options.
I teraz działanie triggera:
a) jeśli option_name = 'wtyczka', sprawdzam, czy zawartość option_value w polach z option_name = 'klucz_ethanaka' i 'start_klucz' są identyczne. Jeślii tak, kopiuję nową zawartość option_value do rekordu wp_dupa wskazanego przez ów klucz. Zapobiega to niepotrzebnemu kopiowaniu z następnej sytuacji;
b) jeśli option_name = 'klucz_ethanaka', kopiuję zawartość odpowiedniego rekordu z wp_dupa['klucz_ethanaka'] do pola wp_options['wtyczka'], a następnie poprawiam wartość w wp_options['stary klucz'].
Spróbuję czegoś takiego ale wydaje mi się że można jakoś prościej... bez pworowadzania dodatkowych rekordów.
Dzięki za przykład - popatrzę sobie dokładniej ale już po kawie.
Offline
Po drugiej kawie rzuć okiem na to, ładny przykład, jak w Triggerze używać IF, ELSE, WHILE i dosyć rozbudowane konstrukcje:
http://www.freemindsystems.com/blog/post/mysql-triggers-a-practical-example
Pozdro
;-)
Offline
Time (s) | Query |
---|---|
0.00028 | SET CHARSET latin2 |
0.00010 | SET NAMES latin2 |
0.00255 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.188.20.56' WHERE u.id=1 |
0.00156 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.188.20.56', 1714747626) |
0.00064 | SELECT * FROM punbb_online WHERE logged<1714747326 |
0.00080 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=27147 AND t.moved_to IS NULL |
0.00007 | SELECT search_for, replace_with FROM punbb_censoring |
0.00251 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=27147 ORDER BY p.id LIMIT 0,25 |
0.00150 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=27147 |
Total query time: 0.01001 s |