

Niestety, framework Web Systems Pro nie oferuje gotowego rozwiązania do dynamicznej zmiany ustawień wtyczek. Jednakże, ponieważ wielu właścicieli projektów internetowych ma kilka projektów na jednej instalacji, które często wymagają różnych ustawień, deweloperzy gotowych rozwiązań muszą sobie z tym radzić. Większość z nich ogranicza się do dodania w ustawieniach swojego produktu opcji select, w której można wybrać z listy witrynę i ręcznie ustawić dla niej oddzielne ustawienia, nazywając to multi witryną. My jednak poszliśmy o krok dalej i wdrożyliśmy pełną możliwość dostosowania ustawień we wszystkich naszych produktach.
Każda wtyczka ma swoje własne ustawienia, których wybrane wartości wpływają na funkcjonalność wtyczek. Najprostsze ustawienie to $settings.enabled — „Status wtyczki”. Może ono być albo WŁ., albo WYŁ. (albo „1”, albo „0”). Załóżmy, że przykładowa wtyczka o identyfikatorze „showsomething” coś implementuje na stronie produktu na części użytkownika witryny. Gdy tylko wywołana zostaje jej funkcja (przez pomocnika lub przez hak), najpierw sprawdza wartość ustawienia $settings.enabled i jeśli „widzi” wartość == „1”, to kontynuuje wykonywanie swojego kodu, a jeśli „widzi” wartość == „0”, to zatrzymuje się i nic nie implementuje na stronie produktu.
Ale przed wami stoi zadanie modyfikacji tej logiki. Załóżmy, że macie dwie witryny na jednej instalacji, pierwsza witryna ma adres: mysite.pl, a druga: mysite.com. Co zrobić, jeśli chcecie, aby wtyczka „showsomething” na witrynie mysite.pl implementowała swój kod, a na witrynie mysite.com — nie implementowała?
Odpowiedź: trzeba ustawić wartość ustawienia „Status wtyczki” --> „WŁ.” na stronie ustawień wtyczki, ale dla witryny mysite.com nadpisać to ustawienie, aby działało tak, jakby na stronie ustawień wtyczki opcja „Status wtyczki” była równa „WYŁ.”. Czyli trzeba zrobić tak, aby wtyczka przy odwoływaniu się do niej na stronie produktu otrzymywała $settings.enabled = 1 na stronie produktu na witrynie mysite.ru, ale otrzymywała $settings.enabled = 0 na stronie produktu na witrynie mysite.com.
We wtyczkach od dewelopera Chikurov-seo takie dynamiczne nadpisywanie ustawień wtyczek realizuje się przez bloki witryny.
Kolejność działań jest następująca:
{if $wa->domainUrl() == 'https://mysite.com'}
{$plugin_settings.enabled = "0"}
{/if}{$wa->globals('showsomething.settings', $plugin_settings)}{if $wa->domainUrl() == 'https://mysite.com'}
{$plugin_settings.enabled = "0"}
{/if}
{$wa->globals('showsomething.settings', $plugin_settings)}Gotowe! Przy każdym odwołaniu się do funkcji wtyczki „showsomething” wtyczka nie otrzymuje od razu standardowej tablicy z ustawieniami $settings i nie wykonuje swojego kodu, lecz najpierw sprawdza obecność bloku showsomething.settings na witrynie, a po jego znalezieniu pobiera ustawienia z globalnej zmiennej „showsomething.settings”, gdzie ustawiliście przekazywanie zmodyfikowanej tablicy $settings. Dla stron witryny mysite.pl ustawienia według kodu bloku „showsomething.settings” nie zmieniły się, natomiast dla stron witryny mysite.com — zmieniły się. Właśnie dynamicznie nadpisaliście wartość ustawienia $settings.enabled.
{if $wa->user()->isAdmin($wa->app())}
{$plugin_settings.enabled = "0"}
{/if}
{$wa->globals('showsomething.settings', $plugin_settings)}{if $wa->isMobile()}
{$plugin_settings.enabled = "0"}
{/if}
{$wa->globals('showsomething.settings', $plugin_settings)}{if strpos($wa->currentUrl(false), '/category/') !== false}
{$plugin_settings.enabled = "0"}
{/if}
{$wa->globals('showsomething.settings', $plugin_settings)}Jeśli trzeba nadpisać inne ustawienia wtyczki, wystarczy wykonać „dump” tablicy $plugin_settings na początku bloku i sprawdzić jej zawartość na dowolnej stronie witryny, gdzie wywoływana jest metoda interesującej wtyczki.
Na przykładzie rzeczywistej wtyczki. Załóżmy, że skonfigurowaliście wtyczkę „Dodatki do zamówienia w koszyku”. Macie dwie witryny z różnymi adresami URL stron informacyjnych i chcecie dynamicznie zmieniać wartość ustawienia HTML-kod linku: na jednej z witryn poprawić adres linku w tekście „Składając zamówienie, zgadzasz się na przetwarzanie danych osobowych zgodnie z <a href="/polityka/" target="_blank">warunkami</a>”.
{if $wa->get('test') == 1}
{$plugin_settings|wa_dump}
{/if}{* {if $wa->get('test') == 1}
{$plugin_settings|wa_dump}
{/if} *}
{if $wa->domainUrl() == 'https://mysite.com'}
{$plugin_settings.privacy_policy_text = "Składając zamówienie, zgadzasz się na przetwarzanie danych osobowych zgodnie z <a href="/page/terms/" target="_blank">warunkami</a>"}
{/if}
{$wa->globals('fixorder.settings', $plugin_settings)}
Pomóż innym użytkownikom w wyborze — bądź pierwszy, który podzieli się swoją opinią o tym poście.