Umožňuje používat jednu instalaci WordPressu pro více webů současně. V tomto případě dostane každý web své vlastní tabulky v databázi s jedinečným prefixem.

Tabulky s údaji registrovaných uživatelů jsou společné pro všechny stránky sítě. To je jednoznačné plus a jednou registrací získáte přístup na několik stránek. Navíc na každém webu může mít stejný účet různá práva. Uživatel může být například editor na jednom webu a správce na jiném.

V normálu instalace WordPressu na stránce registrace, autorizace a resetování hesla se zobrazí soubor wp-login.php.

  • wp-login.php - autorizace
  • wp-login.php?action=register - registrace
  • wp-login.php?action=lostpassword - reset hesla

V režimu Multisite se jádro WordPressu začne chovat trochu jinak a po kliknutí na odkaz wp-login.php?action=register se přesměruje na wp-signup.php . Toto je vaše síťová registrační stránka, která je standardně dodávána s WordPress.

Kromě registrace běžných uživatelských účtů na něm můžete také vytvořit nový web, pokud superadministrátor tuto funkci povolil v nastavení sítě (Správce sítě → Nastavení → Nastavení sítě).

Ve většině témat nevypadá registrační stránka příliš dobře. Mnoho témat používá frameworky CSS, jako je Bootstrap, a jejich vlastní specifické třídy ke stylování různých prvků na stránce, takže je těžké napsat jediné HTML, které by vyhovovalo všem.

Pokud ale stránka vypadá neupraveně, nezoufejte. Soubor wp-signup.php je skvělý zpočátku, když nemáte čas probírat každý detail webu – můžete se soustředit na jiné důležitější stránky a obsah.

Když jste připraveni vytvořit si vlastní registrační stránku, wp-signup.php je dobrou referencí a příkladem pro snadné pochopení řady funkcí, které WordPress poskytuje pro zpracování a ověřování uživatelských vstupů a vytváření nových účtů.

Hlavní stránka sítě

Ve výchozím nastavení WordPress otevře přihlašovací stránku (wp-signup.php) na hlavní doméně (webu) webu. Můžete však vytvořit registrační stránky pro každý web v síti, i když mají témata.

Zvážíme případ, kdy všechny stránky v síti používají stejné téma, ale každá z nich má registrační stránku. Stránky se liší jazykem (angličtina a ruština), takže registrační stránka bude zobrazena v „nativním“ jazyce webu. V případě, že stránky používají různá témata, bude vše záviset na tom, o která témata se jedná, zda je pro ně vhodné stejné rozvržení (skvělá situace, která vás může donutit sjednotit všechna vaše témata) nebo zda se vyplatí vyvíjet stránky jednotlivě.

funkce.php alternativa

Pořadí souborů

Pluginy MU mohou obsahovat libovolný počet souborů a struktur, které vám připadají logické. Řídím se takovou hierarchií:

| mu pluginy | | load.php | | síť selena | | | přihlásit se | | | | plugin.php | | | ... | | | jetpack | | | | plugin.php

V souboru load.php jsou připojeny překlady a všechny potřebné "pluginy":

// Načtení překladů pro pluginy MU load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Funkce pro registrační stránku vyžaduje WPMU_PLUGIN_DIR . "/selena-network/signup/plugin.php"; // Další plugin // vyžaduje WPMU_PLUGIN_DIR ...

Složky zásuvných modulů jsou uloženy v adresáři selena-network. Každý má svůj plugin.php , který zařazujeme do load.php . To poskytuje flexibilitu a možnost okamžitě deaktivovat a povolit jednotlivé komponenty na pracovním projektu v případě nouze.

Registrační stránka

Když jsme zjistili, kde a jak kód napíšeme, můžeme přejít k vytvoření registrační stránky.

Vytvořme stránku s adresou example.org/signup/ přes obvyklé rozhraní. Jako adresu můžete použít jakoukoli adresu URL, která se zdá být vhodná pro váš projekt.

Přesměrujte na požadovanou registrační stránku

Aby se WordPress dozvěděl o naší nové registrační stránce a přesměroval se na ni, po kliknutí na odkaz „Zaregistrovat se“ se použije filtr wp_signup_location. Lze jej nalézt uvnitř wp-login.php a ve výchozím nastavení je zodpovědný za přesměrování na wp-signup.php.

Případ "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); exit; // ...

Jak si pamatujete, ve výchozím nastavení se registrační stránka otevře v hlavní síťové doméně. Proto se zde používá network_site_url().

Přidejme náš handler do filtru v mu-plugins/selena-network/signup/plugin.php , který poskytne adresu registrační stránky na aktuálním webu:

Funkce selena_network_signup_page($url) ( return home_url("signup"); ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network je předpona, kterou používám v názvech všech funkcí v zásuvných modulech MU na mém webu, abych se vyhnula kolizím, měla by být nahrazena mým vlastním jedinečným předponou. Přidejte prioritu filtru 99, protože některé pluginy jako bbPress a BuddyPress mohou tuto adresu přepsat vlastní (MU pluginy se načítají před normálními pluginy, viz výše).

Všimněte si, že se používá home_url(), která na rozdíl od network_site_url() vrací adresu aktuálního webu, nikoli hlavního webu sítě.

funkce wp-signup.php

Soubor wp-signup.php obsahuje spoustu funkcí a kódu. Chcete-li vidět celkový obrázek, můžete použít skládání kódu. V angličtině se tomu zpravidla říká „code folding“.

Na samém začátku souboru od řádků 1 do 80 (ve verzi 4.1.1) různé kontroly a zobrazení "začátku" stránky pomocí get_header() .

Dále je deklarována spousta metod a než s nimi začneme pracovat, stojí za to pochopit, co která funkce dělá. Mnoho z nich často používá další funkce s předponou wpmu_ , z nichž všechny jsou deklarovány v souboru wp-includes/ms-functions.php. Tato část je těžko pochopitelná, aniž byste sami viděli kód. Níže je uveden krátký popis hlavních funkcí pro případ, že byste měli nějaké potíže.

  • wpmu_signup_stylesheet() – Výstup dalších CSS na registrační stránku.
  • show_blog_form() - pole pro registraci stránek (adresa, jméno, viditelnost pro vyhledávače).
  • validate_blog_form() – Ověřuje zadanou webovou adresu a název pomocí wpmu_validate_blog_signup() .
  • show_user_form() - pole pro registraci uživatele (login a emailová adresa).
  • validate_user_form() - ověření zadaného přihlašovacího jména a e-mailové adresy. e-mail s wpmu_validate_user_signup() .
  • signup_another_blog() – pole pro registraci nových stránek pomocí show_blog_form() pro uživatele, kteří jsou již na stránce registrováni.
  • validate_another_blog_signup() – Ověřuje adresu a název webu pomocí validate_blog_form() .
  • signup_user() je hlavní funkce pro zobrazení polí přihlašovací stránky.
  • validate_user_signup() – Ověřuje uživatelské jméno a e-mailovou adresu. mail s validate_user_form() .
  • signup_blog() - pole pro zadání adresy, názvu a viditelnosti webu (druhý krok registrace) pomocí show_blog_form() .
  • validate_blog_signup() - ověří přihlášení, e-mailovou adresu. mail, adresu a název webu.

Úplně dole v souboru wp-signup.php (od řádku 646 ve verzi 4.1.1) je hlavní logika přihlašovací stránky, která využívá všechny výše popsané metody. Tato část kódu není přesunuta do funkce. Na konci se zavolá get_footer().

Zkopírujte funkčnost wp-signup.php

Dále bude popsán postup kopírování wp-signup.php do MU pluginů a provádění změn na "forku". Možná se to nemusí zdát jako správná cesta. Místo toho můžete napsat své vlastní funkce pro ověřování a zobrazování formulářů od začátku pomocí tříd, nikoli běžných funkcí. Podle mého názoru má wp-signup.php již veškerou potřebnou logiku pro naši stránku, zbývá udělat jen malé změny.

Při aktualizaci WordPressu se čas od času mění i wp-signup.php, ale to neznamená, že budete muset svůj „fork“ synchronizovat s každým vydáním. Funkce uvnitř wp-signup.php v podstatě nedělají nic jiného než výstup HTML, ověřování dat, vytváření účtů a stránek a metody s předponou wpmu_ deklarované v ms-functions.php .

Vytvořme funkci, která na stránce zobrazí registrační formulář. Chcete-li to provést, zkopírujte wp-signup.php z kořenového adresáře WordPress do mu-plugings/selena-network/signup/ . Připojte jej do mu-plugins/selena-network/signup/plugin.php).

Vyžadovat WPMU_PLUGIN_DIR . "/selena-network/signup/wp-signup.php";

Odstraňte všechny požadované a zbytečné kontroly od samého začátku zkopírovaného souboru. Ve verzi 4.1.1 je to celý kód z řádků 1 až 80.

Nyní jsme připraveni tvořit hlavní funkce pro zobrazení registračního formuláře. Za tímto účelem přeneseme veškerou logiku z řádku 646 na úplný konec souboru do funkce nazvané selena_network_signup_main . Na úplném konci odstraníme dvě zavírání navíc

(řádky 722 a 723), stejně jako volání get_footer() .

V nově vytvořené selena_network_signup_main() hned na začátku deklarujeme globální proměnnou active_signup , kterou používají všechny ostatní metody z tohoto souboru. A přidejte volání k události before_signup_form, kterou jsme odstranili od samého začátku souboru.

Funkce selena_network_signup_main() ( globální $active_signup; do_action("before_signup_form"); // ... )

Nyní zbývá pouze změnit rozložení na všech místech, kde je to nutné a registrační stránka je připravena.

Výstup registračního formuláře

Zde jsou minimálně dvě možnosti. Pohodlnějším způsobem je vytvořit krátký kód a umístit jej na stránku pomocí běžného editoru.

// Vytvoří krátký kód network_signup add_shortcode("network_signup", "selena_network_signup_main");

Druhou možností je vytvořit šablonu stránky page-signup.php ve vaší podřízené složce motivu. Místo slova „registrace“ můžete použít jedinečné ID přiřazené stránce. Uvnitř šablony přidejte potřebné rozvržení a zavolejte selena_network_signup_main() na správném místě.

V důsledku toho moje registrační stránka vypadá mnohem lépe a čistěji.

Aktivační stránka

Podle Výchozí nastavení WordPress podmíněně rozděluje registrační proces v Multisite do dvou kroků – vyplnění formuláře na stránce a aktivace účtu kliknutím na odkaz zaslaný e-mailem. Po vyplnění formuláře vytvořeného v předchozí sekci WordPress odešle e-mail s pokyny a odkazem pro aktivaci vašeho účtu.

Za zobrazení aktivační stránky je zodpovědný soubor wp-activate.php umístěný v kořenovém adresáři WordPress. wp-activate.php lze také zcela změnit. Proces je podobný tomu, co jsme již provedli pro wp-signup.php .

Vytvořme stránku example.org/activate/ přes obvyklé rozhraní. Pro adresu použijte jakoukoli adresu URL, která se vám zdá vhodná.

Zkopírujte soubor wp-activate.php do našich zásuvných modulů MU a zahrňte jej do mu-plugins/selena-network/signup/plugin.php .

Vyžadovat WPMU_PLUGIN_DIR . "/selena-network/signup/wp-activate.php";

Uvnitř není mnoho obsahu, na rozdíl od wp-signup.php . Soubor provede jedinou operaci – v případě přijetí správného klíče aktivuje účet a zobrazí chybovou nebo úspěšnou zprávu.

Pojďme odstranit všechny zbytečné kontroly a vyžadovat - řádky 1 až 69 ve WordPress 4.1.1. Na samém konci odstraníme volání get_footer(). Zbývající obsah bude přenesen do funkce selena_network_activate_main().

Zajímavé je, že zde byla před načtením WordPressu (wp-load.php) deklarována konstanta WP_INSTALLING. Jeho přítomnost způsobuje, že WordPress nenačítá pluginy.

Stejně jako v případě registrační stránky zbývá pouze opravit rozvržení tam, kde je to nutné. Můžete také změnit text zobrazovaných zpráv (v tomto případě nezapomeňte ke všem funkcím překladače přidat textovou doménu vašich pluginů MU, standardně není nikde nastavena).

Hotovou funkci lze použít na předem vytvořené stránce prostřednictvím krátkého kódu nebo samostatné šablony v podřízeném motivu.

Aktivační e-maily se správnými odkazy

Aktivační stránka je připravena ke spuštění, ale WordPress o tom neví a přesto bude zasílat aktivační e-maily s odkazem na wp-activate.php . Na rozdíl od wp-signup.php zde není žádný filtr, který by umožňoval změnu adresy. Místo toho si musíte napsat vlastní funkci, která bude odesílat e-maily se správnými odkazy.

V okamžiku vyplnění a odeslání formuláře na stránce Registrace WordPress volání wpmu_signup_ uživatel() nebo wpmu_signup_ blog() v závislosti na typu registrace. Obě funkce vytvářejí nový rekord v tabulce wp_signups a vyplňte ji potřebným obsahem, mezi nimiž je aktivační klíč účtu.

Poté se v závislosti na funkci zavolá wpmu_signup_ uživatel _notification() nebo wpmu_signup_ blog _notification() . Obě funkce mají podobnou funkcionalitu – generují a odesílají e-mail s aktivačním odkazem, ale používají jiné argumenty. Oba mají filtry pro „zachycení“ události.

If (! apply_filters("wpmu_signup_user_notification", $user, $user_email, $key, $meta)) vrátí false;

Chcete-li aktivovat účty vytvořením blogu:

If (! apply_filters("wpmu_signup_blog_notification", $domain, $path, $title, $user, $user_email, $key, $meta)) ( return false; )

Zbývá pouze napsat své vlastní handlery, do kterých posílají dopisy přes wp_mail() , a na úplný konec nezapomeňte dát false, aby WordPress neposílal aktivační dopis dvakrát – jeden je váš, druhý je výchozí dopis s odkaz na wp-activate.php .

Funkce selena_network_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // Generování záhlaví, těla a záhlaví e-mailu // ... // Odeslání e-mailu nebo přidání úlohy Cron k odeslání e-mailu wp_mail($user_email , wp_specialchars_decode($subject), $message, $message_headers); // Projde false, takže WordPress nepošle aktivační e-mail dvakrát, vrátí false; ) add_filter("wpmu_signup_user_notification", "selena_network_wpmu_signup_user_notification", 10, 4);

Pokud odesíláte e-maily prostřednictvím serveru SMTP nebo je počet registrací velmi vysoký, měli byste zvážit neposílání e-mailů okamžitě. Místo toho můžete úlohy Cron přidat pomocí WordPress Cron .

Zavření přístupu k wp-signup.php a wp-activate.php

Po vytvoření vlastních registračních a aktivačních stránek možná budete muset zavřít „originály“. Například pokud jsou na registrační stránce další pole, která je třeba vyplnit. Mnoho webů WordPress také podléhá registracím spamu.

Chcete-li vyřešit dva problémy v jedné akci, můžete požádat Apache o vrácení 404 v případě pokusu o otevření těchto stránek. K tomu stačí zaregistrovat několik dalších RewriteRule ve vašem konfiguračním souboru nebo .htaccess.

RewriteEngine On RewriteBase / # Znalost regulárních výrazů není nikdy nadbytečná :) RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # ZAČÁTEK WordPress # Ponechte výchozí pravidla WordPressu :) # ... # KONEC WordPress

Závěr

Pro tento a mnoho dalších „problémů“ souvisejících s WordPress existuje na internetu mnoho řešení. Například za účelem vytvoření registračních a aktivačních stránek někteří navrhují přepsat původní wp-signup.php a wp-activate.php . To by se nemělo dělat, protože pokud aktualizace wordpressu ztratíte všechny změny provedené v souborech a také nebudete moci zkontrolovat integritu jádra pomocí .

Při vývoji jakéhokoli doplňku, tématu nebo řešení věnujte trochu času tomu, abyste se vypořádali s tím, co se děje uvnitř WordPress. K tomu existuje mnoho užitečných nástrojů pro ladění.

P.S.

Pomocí pluginu Multisite User Management můžete automaticky přiřadit různé role novým uživatelům.

Pokud budete mít po přečtení článku nějaké dotazy nebo potíže při vytváření registračních a aktivačních stránek, zanechte komentář a my vám určitě odpovíme.

27.03.2015 27.03.2015

WordPress vývojář. Má rád ve všem pořádek a porozumění novým nástrojům. Inspirováno architekturou komponent Symfony.

  • --- Select Warehouse --- Buffalo Grove IL 60089 USA(Buffalo Grove IL 60089 USA)) Chicago USA USA Tamara(16677 SW Blanton street ALOHA. Oregon 97078) Highland Park (USA Highland Park, IL 13R Villa Madrid 92200 Neuilly- -Seine) Republica Moldova , Falesti(s.Fagadau) South Kensington(Bute street) Adler(Quiet lane 2, Kudepsta District) Aktobe(47/2 Aktobe street) Almetievsk(Almetievsk, Lenin street 13, office 306) Anapa (88 Terskaya ul., 3. patro) Astrachaň (17 Kommunisticheskaya ul., kancelář 4) Atyrau (Atyrau, Azattyk Ave. 42, kancelář 206) Berdyansk (Záporožská oblast) Biškek (Bishkek, 32B Chui avenue, nákupní centrum "Izumrud" ) Blagoveshchensk (50 Let Oktyabrya 15. Kancelář "Amur Fair" 575) Buguruslan (Krasnoznamnaya ul. Krasnaya ul., 61 (2. patro) centrum města) Vladivostok (147 Svetlanskaya ul., kancelář 2/4) olgograd (město Volgogradská dálnice Aviators 15 sklad 23) Dyurtyuli (st. Agidel d.4 kv.2) Yeysk (st. Pervomajskaja 56, kancelář 308) Jekatěrinburg (10 Mamin-Sibiryak St., kancelář 3) Ivanovo (Sheremetevsky prospect, 85G, Premium Plaza Business Center 2. patro, kancelář 212) Iževsk (Lenina 21, kancelář 304. Business Center " Forum") Izberbash (Chapaeva 4 ind. 368501) Irkutsk (Irkutsk, Gornaya ul. 4 (vedle nákupního centra Karamel) kancelář 407) Ishimbay (Zorge, dům 18) Yoshkar-Ola (24v Lenin Ave., kancelář 318) Kazan ( la oboustranný Grivki dům 10, stanice metra "Kozya Sloboda" také ulice Dekabristov, 85 "B" Obchodní centrum "Relita" kancelář 411) Kamensk-Uralsky (Prospekt Pobeda 56) Kemerovo (Demyan Bedny ul., 1 kancelář 401) Kyjev (Olevskaya ul. ., 9/4 (příjezd po předchozí telefonické domluvě) Komsomolsk-on-Amur (Šikhanova ul., 10, kancelář 1, vchod z Komsomolské z konce budovy.) .Krasnaja 124 kancelář 302) Krasnojarsk (pr. Krasnojarský pracovník, 120 nákupní centrum "Krasnoyarye") Lvov (Sobornaya Square 12A) Machačkala (Akushkinogo 9v) Miass (ul. 30 let VLKSM 85) Minsk (Korzhenevskogo, 26) Moskva (Metro: VDNH, Yaroslavskaya ul., 10 kancelářská budova, budova 6) Moskva (Simferopolský bulvár) Moskva (Glazovský pruh 5, vchod v oblouku, dveře vlevo od stanice metra: Smolenskaya-500m, Kropotkinskaya-1km., Park Kultury-1km.) Moskva (m. Čechovská, Puškinská, Tverská. Strastnoy Boulevard, 6, budova 1, Business Center, kancelář 421) Moskva (Lobnya, Mayakovskogo ul., 4A, TR1, 3. patro, kancelář 301) Moskva (stanice metra Molodezhnaya, Yartsevskaya ulice, 27 budova 9 Centrum zlepšující zdraví „Čtyři Elements") Moskva (Krasnaja Presnya 38-45) Moskva (St. Moskva m. Taganskaya radiální výstup 3, 30 metrů od metra. Svatý. Bolshiye Kamenshchiki 1, 4. patro, kancelář 30) Moskva (stanice metra Leninsky Prospekt, Vavilova 9A, budova 6, kancelář 10 B, 3. patro) Moskva (stanice metra Novoslobodskaja, Mendělejevskaja, Majakovskaja, Bělorusskaja (radiála). 4. Tverská ulice -Jamskaja , 24. Vchod obloukem, PET SHOP) Moskva (metro Bělorusskaja (kruh), 5 metrů od výstupu z metra. Náměstí Tverskaja Zastava, 3, 3. patro, kancelář 321. Nedaleko Běloruského nádraží. ) Moskva (M. ALTUFIEVO , Pskovskaya ul., 6) Moskva (Moskva, Radio ul. , vchod 2, kancelář 2) Naberezhnye Chelny (Sh.Usmanova ul. 122 kb. 111 1. patro) Nalchik (Nalchik, Kirov ul. 292a, 2. patro, kancelář ) Nakhodka (Pogranichnaja ul. 6, pokoj 304) Nevinnomyssk (Pl. 50 Let Oktyabrya 8A) Neftejugansk (12 mikrodistrikční dům 7) Nižněvartovsk (Nižněvartovsk, Mira ul. 31B.) Obchodní kancelář Com63. Nov. OL centrum)) Nižnij Novgorod (m. Gorkovskaja, ul. Kostina, 3, př. n. l. "Nové náměstí", 2. patro, kancelář 239) Nižnij Tagil (at l. Krasnoarmejskaja d.42a, 3. patro kancelář 4) Nižnij Tagil (Nižnij Tagil, st. Papanina 5, kancelář 1, Kushva, Gornyakova ul. 4) Novosibirsk (ulice, Okťjabrskaja 42 kancelář 601, obchodní centrum přibližně Leninovo náměstí, Majakovskij kino) Novosibirsk (Gogolova ulice 33/1. 20 metrů od stanice metra Maršál Pokryškina, nákupní Gogol centrum.) Novotroitsk (Sovetskaya d st. 0,144 sq. 26) Novy Urengoy (mikročtvrť Družba, dům 4/3, apt. 183) Norilsk (Leninsky prospekt 47a of. 79) Nur-Sultan (Astana) (Beibitshilik 14 Marden, kancelář 708) Odessa (b-R Francouzské 60 multidisciplinární rehabilitační sanatorium "SARTUS") Oktyabrsky (Microdistrict 32a, dům 6, apt. 88) Omsk (5 Severnaya ul. první patro, pravá veranda.) Orsk (Lenin Ave. 93 ) Pavlodar (Satpaev St. 71 kancelář 107) Perm (Sovětská d.52 kancelář 1) Perm (Družby St. 34 office 305) Pyt-Yakh (Microdistrict 5, house 5) Pyatigorsk (st. 295 Rifle Division a 13 k.2) Rostov na Donu (Soborny pruh 21 kancelář 10 B) Salavat (Lenina ulice, dům 3 kancelář 209, 2. patro) Samara (Novo-Sadovaya ulice 106, kancelář 804, levý výtah, 8. patro) St Petersburg (metro: Vasileostrovskaja, 13. linka Vasiljevského ostrova, 78, kancelář 182) Petrohrad (stanice metra Dostojevskaja (5 metrů) a stanice metra Vladimirskaja (300 metrů) VLADIMIRSKY PASSAGE 3. patro, centrální vchod PRVNÍ GALERIE, ave. Vladimirsky 19) Petrohrad (stanice metra Admiralteyskaya (10 metrů) Spasskaya 1 min chůze Efimov Street 1, patro 2, kancelář 4, Business Center "Sennaja 4", vchod vlevo od kavárny "Sever") Saratov (Bolshaya Gornaya ul., 359V, kancelář č. 3) Sevastopol (Ochakovtsev ul. 19, centrum "Plaza", přízemí, kancelář 29/2) Snezhinsk (Zababahina ul. 19 a) Soči (Sochi ko. Donskaya dům 15.) Soči ( Sovětskaja ul. 42 kancelář 204) Stavropol (Lomonosov ul. 21 kancelář 18) Sterlitamak (85 Khudaiberdina ul., 3. patro) Surgut (30 let Pobedy ul. 64) Tobolsk (Tobolsk, mikrodistrict 6, budova 11 (vstup, kancelář od 39) Komsomolsky avenue)) Togliatti (40 let) Pobedy, 50, kancelář 212a, TD Raduga 1. patro) Tomsk (Tomsk, Sovetskaja ulice 84) Tuymazy (Michurina ulice, 15 kancelář 2) Ťumeň (Gerzen ulice, 72 kancelář Ulyanovsk) Ryabikov street, d 73) Usť-Kamenogorsk (57 Gorky Street, kancelář 213) Ufa (Verkhnetorgova náměstí, 6 (Business Center NESTEROV)) Chabarovsk (Postysheva Street, 16 office od 108) Chanty-Mansijsk (G. Chanty-Mansijsk, sv. Karl Marx 15, 2. patro.) Čeljabinsk (168 Pobeda Ave., 3. patro, kancelář 36.) Čerkessk (101 Lenina St.) Čita (104 Babushkina St., kancelář 425) Chishmy (17 Ring Road) Chishmy (Friendship Ave. , 1B) Švýcarsko (Arosio via Terra Sotto, 1 6939) Shymkent (Kolkhoznaya ul. 47) Južno-Sachalinsk (Angarsky pruh 21) Jakutsk (Dzeržinskij ul. 8 / 3b) Jakutsk (Yatakutsk, SEC,5embank) Yal Fontána, 4. patro) Yanaul (ulice Sovetskaya, 23, kancelář N 8 budova Berezka) Jaroslavl (57 Showroom) Jaroslavl (ulice Chkalova 2) Birsk Bashkortostan () ?>

    Často vyvstává otázka, jak umístit jeden formulář na všechny stránky vaší aplikace Zend. Řekněme, že chci umístit formulář předplatného do souboru layout.phtml tak, aby byl umístěn na každé stránce. Příkaz layout->content() pracuje s akcemi a ovladači... Jak tedy implementujeme to, co potřebujeme?

    Jedním z řešení tohoto problému je vytvoření akčního pomocníka.

    Začněme nastavením aplikace ZF:

    $ zf vytvořit formulář rozvržení projektu $ formulář rozvržení cd $ zf povolit rozvržení

    Vyčistěte soubor application/views/scripts/index/index.phtml a vložte něco takového:

    application/views/scripts/index/index.phtml:

    Toto je domovská stránka

    Nyní můžeme začít.

    Formulář

    Pojďme tvořit nový formulář:

    $ zf vytvořit registraci formuláře

    Stejně jako pole, která potřebujeme:

    application/forms/Signup.php:

    Třída Application_Form_Signup rozšiřuje Zend_Form ( public $processed = false; veřejná funkce init() ( $this->addElement("text", "name", array("label" => "Name", "required" => true, " validators" => array(array("StringLength", false, array("max"=>75))),)); $this->addElement("text", "email", array("label" = > "E-mail", "požadováno" => true, "validators" => array(array("StringLength", false, array("max"=>150)), "EmailAddress",),)); $this- >addElement("submit", "go", array("label" => "Zaregistrovat se",)); ) )

    Máme formulář. Zbývá to vynést.

    Pomocník akce

    K inicializaci formuláře používáme pomocníka akce.

    Přidejte řádek do application.ini:

    application/configs/application.ini:

    Resources.frontController.actionhelperpaths.Application_Controller_Helper = APPLICATION_PATH "/controllers/helpers"

    Nyní systém ví, kde hledat akční pomocníky, takže můžeme pokračovat:

    application/Bootstrap.php:

    bootstrap("frontController"); $signup = Zend_Controller_Action_HelperBroker::getStaticHelper("Signup"); Zend_Controller_Action_HelperBroker::addHelper($signup); ))

    Pomocník akce bude vypadat takto:

    application/controllers/helpers/Signup.php:

    getActionController()->view; $form = new Application_Form_Signup(); $request = $this->getActionController()->getRequest(); if($request->isPost() && $request->getPost("submitsignup")) ( if($form->isValid($request->getPost())) ( $data = $form->getValues() ; // zpracování dat $form->processed = true; ) ) $view->signupForm = $form; ))

    Není zde nic zvláštního. Jen pozor na rodičovskou třídu.

    Zobrazit pomocníka

    Pro zobrazení formuláře vytvořte pomocníka zobrazení, který vypadá takto:

    application/views/helpers/SignupForm.php:

    Přihlaste se k odběru našeho newsletteru

    "; if($form->processed) ( $html .= "

    Děkujeme, že jste se přihlásili

    "; ) else ( $html .= $form->render(); ) return $html; ) )

    Vše, co nám zbývá, je vykreslit formulář v layout.phtml:

    application/layouts/scripts/layout.phtml:

    headMeta()->prependHttpEquiv("Typ obsahu", "text/html; charset=UTF-8"); $this->headTitle("Test formuláře rozložení"); echo $this->doctype(); ?> headMeta()->setIndent(4); ?>headTitle()->setIndent(4); ?>

    layout()->obsah; ?>
    signupForm($this->signupForm); ?>

    Stalo

    To je vše. Dosáhli jsme funkčnosti, kterou jsme si představovali.

    Cm … Slovník synonym

    BAINKI, nezměněno. ch. (dětinský). Spát. chceš kozy? Lehni si bainki. Vysvětlující slovník Ushakova. D.N. Ušakov. 1935 1940 ... Vysvětlující slovník Ushakova

    Dělat / dělat bainki (sbohem). Jarg. oni říkají Kyvadlová doprava. Spát. Maksimov, 21… Velký slovník ruských rčení

    predikuji. rozvinout O stavu spánku (v dětské řeči nebo v rozhovoru dospělých s dětmi). II int. rozvinout Používá se jako součást ukolébavky. Vysvětlující slovník Efraimův. T. F. Efremová. 2000... Moderní slovník Ruský jazyk Efremova

    bainki- ainki, neměnnost... Ruský pravopisný slovník

    bainki- neměnnost... Pravopisný slovník ruského jazyka

    Intl., ve funkt. skaz. \u003d Bai Bai (znak II)... encyklopedický slovník

    bainki- int.; ve funkci skaz. = ahoj čau 2) … Slovník mnoha výrazů

    bainki- ba / inkoust / a mezi ... Morfemický pravopisný slovník

    knihy

    • Bainki, Tokmakova I.P. V této knize můžete číst nebo dokonce zpívat ukolébavky pro své dítě. Vystřihněte knihu...
    • Bainki (vyd. 2006), Irina Tokmaková. V této knize můžete svému miminku číst nebo dokonce zpívat ukolébavky. Vystřihnout knihu. ISBN:5-9524-2404-X…

    Vytvořme si vlastní registrační stránku pro více stránek namísto standardní wp-signup.php .

    V normální instalace stránka wordpress registrace (autorizace, reset hesla) vygeneruje soubor wp-login.php.

    • /wp-login.php - autorizace
    • /wp-login.php?action=register - registrace
    • /wp-login.php?action=lostpassword - reset hesla

    V wp-login.php jsou samostatné podmínky pro multisite. Takže když kliknete na /wp-login.php?action=register na multisite, WordPress se přesměruje na stránku /wp-signup.php. V mnoha tématech stránka nevypadá moc atraktivně, tak si uděláme vlastní.

    Hlavní stránka sítě

    Ve výchozím nastavení WordPress otevře přihlašovací stránku (wp-signup.php) na hlavní doméně (webu) webu. Je však možné vytvořit samostatnou registrační stránku pro každý web v síti, i když mají různá témata. Budeme uvažovat případ, kdy všechny stránky v síti mají svou vlastní registrační stránku, ale používá se stejné téma a stránky se liší pouze jazykem. Pokud jsou použita různá témata, bude vyžadováno více kódu.

    funkce.php?

    Ne. Zdá se, že název tohoto souboru je uveden v každém článku WordPress. V našem případě, vezmeme-li v úvahu skutečnost, že funkce registrace je navržena pro několik stránek, má smysl ji přesunout do zásuvných modulů MU, které se načítají při otevření libovolné stránky.

    Lyrická odbočka

    Stojí za zmínku, že pluginy MU se načítají dříve, než se načtou normální pluginy a než se plně načte jádro WordPressu, takže volání některých funkcí může vést k fatálním chybám v PHP. Toto „brzké“ načítání má své výhody. Řekněme, že uvnitř žádného motivu nemůžete lpět na některých akcích, které fungují ještě před načtením souboru functions.php z motivu. Příkladem toho jsou akce z pluginu Jetpack ve tvaru jetpack_module_loaded_related-posts (related-posts je název modulu), pomocí kterých je možné sledovat aktivitu modulů v Jetpacku. Tuto akci nelze „připojit“ ze souboru motivu, protože akce již byla spuštěna před načtením motivu – pluginy se načítají před motivy. Na obecný obrázek pořadí načítání WordPressu se můžete podívat na stránce Action Reference v kodexu.

    Pořadí souborů

    Pluginy MU mohou obsahovat libovolný počet souborů a libovolnou strukturu, která vám připadá logická. Řídím se takovou hierarchií:

    |-mu-plugins |-|-load.php |-|-|-selena-network |-|-|-|-registrace |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

    V souboru load.php jsou připojeny všechny potřebné "pluginy" pro naši síť:

    // Načtení Traslates pro všechny doplňky load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Registrace sítě vyžaduje WPMU_PLUGIN_DIR . "/selena-network/signup/plugin.php"; // Jiné pluginy // vyžadují WPMU_PLUGIN_DIR ...

    Složky pluginů jsou uloženy ve složce selena-network, každá má svůj plugin.php , který zahrneme do load.php . To poskytuje flexibilitu a schopnost rychle deaktivovat a povolit určité věci.

    Adresa URL registrační stránky

    Filtr wp_signup_location se používá k určení adresy stránky registrace. Nachází se v souboru wp-login.php a je zodpovědný za přesměrování na wp-signup.php .

    Case "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); exit;

    Přidejme naši funkci do mu-plugins/selena-network/signup/plugin.php , která poskytne adresu registrační stránky na aktuálním webu:

    Funkce selena_network_signup_page ($url) ( return home_url () . "/signup/"; ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

    selena_network je předpona, kterou používám v názvech všech funkcí v zásuvných modulech MU na mém webu, aby se předešlo kolizím, měla by být nahrazena vaší vlastní jedinečnou předponou. Přidejte prioritu filtru 99, protože některé pluginy jako bbPress a BuddyPress mohou tuto adresu přepsat vlastní (MU pluginy se načítají dříve než běžné pluginy, viz výše). Všimněte si, že home_url() se používá místo network_site_url() k udržení návštěvníka ve stejné doméně. Jako adresu lze použít jakoukoli adresu URL.

    Vytvoření stránky

    Nyní vytvoříme stránku s adresou site.com/signup/ přes obvyklé rozhraní a ve složce podřízeného motivu šablonu pro náš nová stránka- page-signup.php . Místo slova „registrace“ můžete použít jedinečné ID.

    Uvnitř nové šablony musíte zavolat funkci selena_network_signup_main(), která zobrazí přihlašovací formulář.

    Za zmínku stojí, že celý proces se šablonami je volitelný a místo toho si můžete vytvořit svůj vlastní krátký kód, který bude také volat funkci selena_network_signup_main().

    wp-signup.php a wp-activate.php

    Nyní vytvoříme funkci, která zobrazí registrační formulář. Chcete-li to provést, zkopírujte soubory wp-signup.php a wp-activate.php z kořenového adresáře WordPress do mu-plugings/selena-network/signup/ (a nezapomeňte je zahrnout do mu-plugins/selena-network /signup/plugin.php). Další manipulace se soubory jsou extrémně obtížné a dlouhé na popis, takže je budete muset udělat sami. Jen popíšu, co přesně je potřeba udělat a zveřejnit zdrojové soubory vašeho projektu:

    1. Na začátku souboru odstraňte všechny požadované , volání funkcí a další kód mimo funkce.
    2. Přejmenujte všechny funkce přidáním jedinečných předpon k názvům.
    3. Zabalte spodní část kódu wp-signup.php do funkce selena_network_signup_main a hned na začátek napište globální $active_signup; .
    4. Vyměňte rozvržení za vlastní na správných místech.

    Uvnitř wp-activate.php musíte udělat to samé:

    1. Odstraňte veškerý kód mimo funkce, zabalte rozložení do samostatné funkce.
    2. V případě potřeby změňte rozložení.

    Soubor wp-activate.php je zodpovědný za stránku aktivace účtu. Stejně jako u registrační stránky je pro ni potřeba vytvořit samostatnou šablonu, uvnitř které je potřeba funkci zavolat ze souboru wp-activate.php.

    Odesílání aktivačních emailů

    Registrační stránka odešle návštěvníkovi e-mail s odkazem na aktivaci účtu. Ve výchozím nastavení to řeší funkce wpmu_signup_user_notification() ze souboru ms-functions.php. Jeho funkčnost si lze za jeho funkci vypůjčit. Důvod, proč musíte přestat používat tuto funkci, je ten, že odesílá odkaz na aktivaci účtu z wp-activate.php . Tuto funkci můžete „vypnout“ pomocí filtru wpmu_signup_user_notification zadáním hodnoty false (pokud to neuděláte, aktivační dopis bude odeslán dvakrát, dobře, ve skutečnosti dvě různá písmena).

    Funkce armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // Kód z funkce wpmu_signup_user_notification() wp_mail($user_email, wp_specialchars_decode($, $mes), $message ; return false; ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

    V důsledku toho se registrační stránka v tématu Selena stala mnohem čistší a přehlednější.

    Závěr

    Na internetu je mnoho dalších nepříliš správných způsobů, jak totéž udělat - přesměrování Apache, AJAX formuláře, které bez Java Scriptu nebudou fungovat atd. Tohle všechno se mi moc nelíbilo, tak jsem to zkusil udělat tak správně jako možné na mých vlastních stránkách.

    Podotýkám, že byste měli soubory pečlivě upravovat a snažit se příliš neodchylovat od původních, aby v budoucnu, pokud WordPress změní soubory wp-signup.php a wp-activate.php, bylo snazší porovnat aby našli změny.

    Nezapomeňte se podívat zdroj všechny výše popsané funkce, abyste plně porozuměli tomu, co a jak se děje uvnitř kódu.

    Bonus. Ochrana proti spammerům

    I ty nejmenší WordPress stránky jsou často bombardovány registracemi spamu. Pro filtrování botů se dají psát nekonečné podmínky, často spíš pokusy o vytvoření umělé inteligence 🙂 V případě multisite mi hodně pomohlo obvyklé přesměrování v Apache, se kterým jsem při otevření /wp-signup.php požádal o vydání 404 a /wp-acitvate.php (nejsem expert na nastavení Apache, takže moje pravidla nemusí být příliš správná).

    RewriteEngine On RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # ZAČÁTEK WordPress # Výchozí pravidla WordPressu :) # ... # KONEC WordPress

    P.S. Některé věci třetích stran se snažím popsat co nejpodrobněji, protože když jsem začínal, někdy nebyl nikdo, kdo by mi spoustu věcí poradil a vysvětlil. Také věřím, že takové malé tipy na další materiály někoho popostrčí k tomu, aby se naučil něco nového a rozšířil si oblast svých znalostí. Použití položek RewriteRule regulární výrazy, nejsou nijak složité, například symbol ^ znamená začátek řádku.