Umožňuje používať jednu inštaláciu WordPress pre viacero stránok súčasne. V tomto prípade každá lokalita dostane svoje vlastné tabuľky v databáze s jedinečnou predponou.

Tabuľky s údajmi registrovaných užívateľov sú spoločné pre všetky stránky siete. Toto je jednoznačné plus a registráciou získate prístup na niekoľko stránok. Navyše na každej stránke môže mať rovnaký účet rôzne práva. Používateľ môže byť napríklad editorom na jednej lokalite a správcom na druhej.

V normálnom inštalácia WordPress na stránke registrácie, autorizácie a resetovania hesla sa zobrazí súbor wp-login.php.

  • wp-login.php - autorizácia
  • wp-login.php?action=register - registrácia
  • wp-login.php?action=lostpassword - obnovenie hesla

V režime Multisite sa jadro WordPressu začne správať trochu inak a po kliknutí na odkaz wp-login.php?action=register sa presmeruje na wp-signup.php . Toto je vaša sieťová registračná stránka, ktorá sa štandardne dodáva s WordPress.

Okrem registrácie bežných používateľských účtov si na nej môžete vytvoriť aj novú stránku, ak túto funkciu povolil supersprávca v nastaveniach siete (Správca siete → Nastavenia → Nastavenia siete).

Vo väčšine tém nevyzerá registračná stránka veľmi dobre. Mnoho tém používa frameworky CSS ako Bootstrap a ich vlastné špecifické triedy na štýlovanie rôznych prvkov na stránke, takže je ťažké napísať jeden HTML, ktorý by vyhovoval všetkým.

Ak však stránka vyzerá neupravene, nezúfajte. Súbor wp-signup.php je skvelý na začiatok, keď nemáte čas prepracovať sa do každého detailu stránky – môžete sa venovať iným dôležitejším stránkam a obsahu.

Keď ste pripravení vytvoriť si vlastnú registračnú stránku, wp-signup.php je dobrou referenciou a príkladom na ľahké pochopenie rozsahu funkcií, ktoré WordPress poskytuje na spracovanie a overenie používateľských vstupov a vytváranie nových účtov.

Hlavná stránka siete

V predvolenom nastavení WordPress otvára prihlasovaciu stránku (wp-signup.php) na hlavnej doméne (webovej lokalite) webu. Môžete však vytvoriť registračné stránky pre každú lokalitu v sieti, aj keď majú témy.

Zvážime prípad, keď všetky stránky v sieti používajú rovnakú tému, ale každá z nich má registračnú stránku. Stránky sa líšia jazykom (angličtina a ruština), preto sa registračná stránka zobrazí v „rodnom“ jazyku stránky. V prípade, že stránky používajú rôzne témy, všetko bude závisieť od toho, o aké témy ide, či je pre ne vhodné rovnaké rozloženie (skvelá situácia, ktorá vás môže prinútiť zjednotiť všetky vaše témy) alebo či sa oplatí vyvíjať stránky individuálne.

funkcie.php alternatíva

Poradie súborov

Zásuvné moduly MU môžu obsahovať ľubovoľný počet súborov a štruktúr, ktoré sa vám zdajú logické. Riadim sa nasledovnou hierarchiou:

| mu pluginy | | load.php | | selena sieť | | | prihlásiť sa | | | | plugin.php | | | ... | | | jetpack | | | | plugin.php

V súbore load.php sú pripojené preklady a všetky potrebné "pluginy":

// Načítanie prekladov pre doplnky MU load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Funkcionalita pre registračnú stránku vyžaduje WPMU_PLUGIN_DIR . "/selena-network/signup/plugin.php"; // Iný plugin // vyžaduje WPMU_PLUGIN_DIR ...

Priečinky doplnkov sú uložené v adresári selena-network. Každý má svoj plugin.php , ktorý zaraďujeme do load.php . To poskytuje flexibilitu a možnosť okamžite zakázať a povoliť jednotlivé zložky na pracovnom projekte v prípade núdze.

Registračná stránka

Keď sme zistili, kde a ako napíšeme kód, môžeme prejsť k vytvoreniu registračnej stránky.

Vytvorme stránku s adresou example.org/signup/ cez obvyklé rozhranie. Ako adresu môžete použiť akúkoľvek adresu URL, ktorá sa zdá byť vhodná pre váš projekt.

Presmerujte sa na požadovanú registračnú stránku

Aby sa WordPress dozvedel o našej novej registračnej stránke a presmeroval sa na ňu, po kliknutí na odkaz „Zaregistrovať sa“ sa používa filter wp_signup_location. Nachádza sa vo wp-login.php a je štandardne zodpovedný za presmerovanie na wp-signup.php.

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

Ako si pamätáte, predvolene sa registračná stránka otvorí na hlavnej sieťovej doméne. Preto sa tu používa network_site_url().

Pridajme náš obslužný program do filtra v mu-plugins/selena-network/signup/plugin.php, ktorý poskytne adresu registračnej stránky na aktuálnej lokalite:

Funkcia selena_network_signup_page($url) ( return home_url("registrácia"); ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

selena_network je predpona, ktorú používam v názvoch všetkých funkcií v zásuvných moduloch MU na mojej stránke, aby sa predišlo kolíziám, mala by byť nahradená mojou vlastnou jedinečnou predponou. Pridajte prioritu filtra 99, pretože niektoré zásuvné moduly ako bbPress a BuddyPress môžu túto adresu prepísať vlastnou (MU zásuvné moduly sa načítajú pred bežnými zásuvnými modulmi, pozri vyššie).

Všimnite si, že sa používa home_url(), ktorá na rozdiel od network_site_url() vracia adresu aktuálneho webu, nie hlavného webu siete.

funkčnosť wp-signup.php

Súbor wp-signup.php obsahuje množstvo funkcií a kódu. Ak chcete vidieť celkový obraz, môžete použiť skladanie kódu. V angličtine sa to spravidla nazýva „skladanie kódu“.

Na samom začiatku súboru od riadkov 1 až 80 (vo verzii 4.1.1) rôzne kontroly a zobrazenie „začiatku“ stránky pomocou get_header() .

Ďalej je deklarovaných veľa metód a predtým, ako s nimi začneme pracovať, stojí za to pochopiť, čo jednotlivé funkcie robia. Mnohé z nich často používajú iné funkcie s predponou wpmu_ , z ktorých všetky sú deklarované v súbore wp-includes/ms-functions.php. Túto časť je ťažké pochopiť bez toho, aby ste sami videli kód. Nižšie je uvedený krátky popis hlavných funkcií pre prípad, že by ste mali nejaké ťažkosti.

  • wpmu_signup_stylesheet() – Výstup ďalšieho CSS na registračnú stránku.
  • show_blog_form() - polia na registráciu stránky (adresa, názov, viditeľnosť pre vyhľadávače).
  • validate_blog_form() – Overí zadanú webovú adresu a názov pomocou wpmu_validate_blog_signup() .
  • show_user_form() - polia pre registráciu užívateľa (login a emailová adresa).
  • validate_user_form() - overenie zadaného prihlasovacieho mena a emailovej adresy. mail s wpmu_validate_user_signup() .
  • signup_another_blog() – polia na registráciu nových stránok pomocou show_blog_form() pre používateľov, ktorí sú už na stránke zaregistrovaní.
  • validate_another_blog_signup() – Overí adresu a názov stránky pomocou validate_blog_form() .
  • signup_user() je hlavná funkcia na zobrazenie polí prihlasovacej stránky.
  • validate_user_signup() – overí používateľské meno a e-mailovú adresu. mail s validate_user_form() .
  • signup_blog() - polia na zadanie adresy, názvu a viditeľnosti stránky (druhý krok registrácie) pomocou show_blog_form() .
  • validate_blog_signup() - overí prihlásenie, e-mailovú adresu. mail, adresa a názov stránky.

Úplne dole v súbore wp-signup.php (od riadku 646 vo verzii 4.1.1) je hlavná logika prihlasovacej stránky, ktorá využíva všetky vyššie popísané metódy. Táto časť kódu nie je presunutá do funkcie. Na konci sa zavolá get_footer().

Skopírujte funkčnosť wp-signup.php

Ďalej bude popísaný postup kopírovania wp-signup.php do zásuvných modulov MU a vykonávania zmien na „forku“. Možno sa to nezdá ako správna cesta. Namiesto toho môžete napísať svoje vlastné funkcie na overenie a zobrazenie formulárov od začiatku pomocou tried namiesto bežných funkcií. Podľa môjho názoru má wp-signup.php už všetku potrebnú logiku pre našu stránku, zostáva len urobiť malé zmeny.

Pri aktualizácii WordPressu sa z času na čas mení aj wp-signup.php, ale to neznamená, že budete musieť synchronizovať svoj “fork” s každým vydaním. Funkcie vo wp-signup.php v podstate nerobia nič iné ako výstup HTML, overenie údajov, vytvorenie účtu a stránky a metódy s predponou wpmu_ deklarované v ms-functions.php .

Vytvorme si funkciu, ktorá nám na stránke zobrazí registračný formulár. Ak to chcete urobiť, skopírujte wp-signup.php z koreňového adresára WordPress do mu-plugings/selena-network/signup/ . Pripojte ho v mu-plugins/selena-network/signup/plugin.php).

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

Odstráňte všetky požadované a nepotrebné kontroly od samého začiatku kopírovaného súboru. Vo verzii 4.1.1 je to celý kód z riadkov 1 až 80.

Teraz sme pripravení tvoriť hlavná funkcia na zobrazenie registračného formulára. Aby sme to urobili, prenesieme všetku logiku z riadku 646 na úplný koniec súboru do funkcie s názvom selena_network_signup_main . Na úplnom konci odstránime dve extra uzávery

(riadky 722 a 723), ako aj volanie funkcie get_footer() .

V novovytvorenej selena_network_signup_main() hneď na začiatku deklarujeme globálnu premennú active_signup , ktorú používajú všetky ostatné metódy z tohto súboru. A pridajte volanie k udalosti before_signup_form, ktorú sme odstránili od úplného začiatku súboru.

Funkcia selena_network_signup_main() ( globálne $active_signup; do_action("before_signup_form"); // ... )

Teraz zostáva len zmeniť rozloženie na všetkých miestach, kde je to potrebné a registračná stránka je pripravená.

Výstup z registračného formulára

Tu sú minimálne dve možnosti. Pohodlnejším spôsobom je vytvoriť krátky kód a umiestniť ho na stránku pomocou bežného editora.

// Vytvorenie krátkeho kódu network_signup add_shortcode("network_signup", "selena_network_signup_main");

Druhou možnosťou je vytvoriť šablónu stránky page-signup.php v priečinku podradenej témy. Namiesto slova „registrácia“ môžete použiť jedinečné ID priradené stránke. Do šablóny pridajte potrebné rozloženie a zavolajte na selena_network_signup_main() na správnom mieste.

V dôsledku toho moja registračná stránka vyzerá oveľa lepšie a čistejšie.

Aktivačná stránka

Autor: Predvolené nastavenie WordPress podmienečne rozdeľuje proces registrácie v Multisite na dva kroky – vyplnenie formulára na stránke a aktiváciu účtu kliknutím na odkaz zaslaný e-mailom. Po vyplnení formulára vytvoreného v predchádzajúcej časti vám WordPress pošle e-mail s pokynmi a odkazom na aktiváciu vášho účtu.

Za zobrazenie aktivačnej stránky je zodpovedný súbor wp-activate.php umiestnený v koreňovom adresári WordPress. wp-activate.php je možné aj úplne zmeniť. Proces je podobný tomu, čo sme už urobili pre wp-signup.php .

Vytvorme stránku example.org/activate/ cez obvyklé rozhranie. Pre adresu použite akúkoľvek adresu URL, ktorá sa vám zdá vhodná.

Skopírujte súbor wp-activate.php do našich doplnkov MU a zahrňte ho do mu-plugins/selena-network/signup/plugin.php .

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

Vo vnútri nie je veľa obsahu, na rozdiel od wp-signup.php . Súbor vykoná jedinú operáciu – aktivuje účet v prípade prijatia správneho kľúča a zobrazí chybovú alebo úspešnú správu.

Odstránime všetky zbytočné kontroly a požiadavky – riadky 1 až 69 vo WordPress 4.1.1. Na samom konci odstránime volanie get_footer(). Zvyšný obsah sa prenesie do funkcie selena_network_activate_main().

Je zaujímavé poznamenať, že tu bola pred načítaním WordPressu (wp-load.php) deklarovaná konštanta WP_INSTALLING. Jeho prítomnosť spôsobuje, že WordPress nenačíta pluginy.

Rovnako ako v prípade registračnej stránky zostáva v prípade potreby iba opraviť rozloženie. Môžete tiež zmeniť text zobrazovaných správ (v tomto prípade nezabudnite ku všetkým funkciám prekladača pridať textovú doménu vašich MU pluginov, štandardne nie je nikde nastavená).

Hotovú funkciu je možné použiť na vopred vytvorenej stránke prostredníctvom krátkeho kódu alebo samostatnej šablóny v podradenej téme.

Aktivačné e-maily so správnymi odkazmi

Aktivačná stránka je pripravená na spustenie, ale WordPress o nej nevie a stále bude posielať aktivačné e-maily s odkazom na wp-activate.php . Na rozdiel od wp-signup.php tu nie je žiadny filter, ktorý by umožňoval zmenu adresy. Namiesto toho si musíte napísať vlastnú funkciu, ktorá bude posielať e-maily so správnymi odkazmi.

V čase vyplnenia a odoslania formulára na stránke Registrácia WordPress volá wpmu_signup_ užívateľ() alebo wpmu_signup_ blog() v závislosti od typu registrácie. Obe funkcie vytvárajú nový záznam v tabuľke wp_signups a vyplňte ju potrebným obsahom, medzi ktorými je aktivačný kľúč účtu.

Potom sa v závislosti od funkcie zavolá wpmu_signup_ užívateľ _notification() alebo wpmu_signup_ blog _notification() . Obe funkcie majú podobnú funkcionalitu – generujú a odosielajú e-mail s aktivačným odkazom, ale používajú rôzne argumenty. Oba majú filtre na „zachytenie“ udalosti.

Ak (! apply_filters("wpmu_signup_user_notification", $user, $user_email, $key, $meta)) vráti hodnotu false;

Ak chcete aktivovať účty vytvorením blogu:

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

Zostáva len napísať svoje vlastné handlery, do ktorých posielajú listy cez wp_mail() , a na úplný koniec nezabudnite dať false, aby WordPress neposielal aktivačný list dvakrát - jeden je váš, druhý je predvolený list s odkaz na wp-activate.php .

Funkcia selena_network_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // Generovanie hlavičky, tela a hlavičiek e-mailu // ... // Odoslať e-mail alebo pridať úlohu Cron na odoslanie e-mailu wp_mail($user_email , wp_specialchars_decode($subject), $message, $message_headers); // Pass false, aby WordPress neposlal aktivačný e-mail dvakrát, return false; ) add_filter("wpmu_signup_user_notification", "selena_network_wpmu_signup_user_notification", 10, 4);

Ak posielate e-maily cez server SMTP alebo je počet registrácií veľmi vysoký, mali by ste zvážiť neposielanie e-mailov okamžite. Namiesto toho môžete úlohy Cron pridať pomocou WordPress Cron.

Zatvorenie prístupu k wp-signup.php a wp-activate.php

Po vytvorení vlastných registračných a aktivačných stránok možno budete musieť zatvoriť „originály“. Napríklad, ak sú na registračnej stránke ďalšie polia, ktoré je potrebné vyplniť. Mnohé stránky WordPress sú tiež predmetom spamových registrácií.

Ak chcete vyriešiť dva problémy v jednej akcii, môžete požiadať Apache o vrátenie 404 v prípade pokusu o otvorenie týchto stránok. Ak to chcete urobiť, stačí zaregistrovať niekoľko ďalších RewriteRule vo vašom konfiguračnom súbore alebo .htaccess.

RewriteEngine On RewriteBase / # Znalosť regulárnych výrazov nie je nikdy zbytočná :) RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # ZAČIATOK WordPress # Ponechajte predvolené pravidlá WordPress :) # ... # KONIEC WordPress

Záver

Na tento a mnoho ďalších „problémov“ súvisiacich s WordPress existuje na internete množstvo riešení. Napríklad na vytvorenie registračných a aktivačných stránok niektorí navrhujú prepísať pôvodné wp-signup.php a wp-activate.php . Toto by sa nemalo robiť, pretože ak aktualizácie wordpressu stratíte všetky zmeny vykonané v súboroch a tiež nebudete môcť skontrolovať integritu jadra pomocou .

Pri vývoji akéhokoľvek doplnku, témy alebo riešenia venujte trochu času tomu, aby ste pochopili, čo sa deje vo WordPress. Na tento účel existuje veľa užitočných nástrojov na ladenie.

P.S.

Doplnok Multisite User Management môžete použiť na automatické priraďovanie rôznych rolí novým používateľom.

Ak máte po prečítaní článku nejaké otázky alebo ťažkosti pri vytváraní registračných a aktivačných stránok, zanechajte komentár a my vám určite odpovieme.

27.03.2015 27.03.2015

WordPress vývojár. Vo všetkom má rád poriadok a rozumie novým nástrojom. Inšpirované architektúrou komponentov 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. poschodie) Astrachaň (17 Kommunisticheskaya ul., kancelária 4) Atyrau (Atyrau, Azattyk Ave. 42, kancelária 206) Berdyansk (región Záporožie) Biškek (Bishkek, 32B Chui avenue, nákupné centrum "Izumrud" ) Blagoveshchensk (50 Let Oktyabrya 15. Kancelária "Amur Fair" 575) Buguruslan (Krasnoznamnaya ul. Krasnaya ul., 61 (2. poschodie) centrum mesta) Vladivostok (147 Svetlanskaya ul., kancelária 2/4) olgograd (mesto Volgograd diaľnica Aviators 15 sklad 23) Dyurtyuli (st. Agidel d.4 kv.2) Yeysk (st. Pervomajskaja 56, kancelária 308) Jekaterinburg (10 Mamin-Sibiryak St., kancelária 3) Ivanovo (Sheremetevsky prospect, 85G, Premium Plaza Business Center 2. poschodie, kancelária 212) Iževsk (Lenina 21, kancelária 304. Business Center " Forum") Izberbash (Chapaeva 4 ind. 368501) Irkutsk (Irkutsk, Gornaya ul. 4 (vedľa nákupného centra Karamel) kancelária 407) Ishimbay (Zorge, dom 18) Yoshkar-Ola (24v Lenin Ave., kancelária 318) Kazan ( la ostranný Grivki dom 10, stanica metra "Kozya Sloboda" aj ulica Dekabristov, 85 "B" Obchodné centrum "Relita" kancelária 411) Kamensk-Uralsky (Prospekt Pobeda 56) Kemerovo (Demyan Bedny ul., 1 kancelária 401) Kyjev (Olevskaya ul. 9 kv.4 (prísť po predchádzajúcej dohode) Komsomolsk-on-Amur (Šikhanova ul. 10, kancelária 1 vchod z Komsomolskej z konca budovy.) Kostroma (Prospect Mira 51, kancelária 15) .Krasnaja 124 kancelária 302) Krasnojarsk (pr. Krasnojarsky robotník, 120 nákupné centrum "Krasnoyarye") Ľvov (Sobornaya Square 12A) Machačkala (Akushkinogo 9v) Miass (st. 30 let VLKSM 85) Minsk (Korzhenevskogo, 26) Moskva (Metro.,VDNH) 10, budova 4, kancelária 10 6) Moskva (Simferopolsky Boulevard) Moskva (Glazovský pruh 5, vchod v oblúku, dvere vľavo od stanice metra: Smolenskaya-500m, Kropotkinskaya-1km., Park Kultury-1km.) Moskva (m. Čechovská, Puškinská, Tverská. Strastnoy Boulevard, 6, budova 1, Business Center, kancelária 421) Moskva (Lobnya, Mayakovskogo ul., 4A, TR1, 3. poschodie, kancelária 301) Moskva (stanica metra Molodezhnaya, Yartsevskaya ulica, 27 budova 9 Centrum na zlepšenie zdravia "Štyri Elements") Moskva (Krasnaja Presnya 38-45) Moskva (St. Moskva m. Taganskaya radiálny výstup 3, 30 metrov od metra. sv. Bolshiye Kamenshchiki 1, 4. poschodie, kancelária 30) Moskva (stanica metra Leninsky Prospekt, Vavilova 9A, budova 6, kancelária 10 B, 3. poschodie) Moskva (stanica metra Novoslobodskaja, Mendelejevskaja, Majakovskaja, Belorusskaja (radiála). 4. ulica Tverskaja -Jamskaja , 24. Vchod cez oblúk, PET SHOP) Moskva (metro Belorusskaja (kruh), 5 metrov od východu z metra. Námestie Tverskaja Zastava, 3, 3. poschodie, kancelária 321. V blízkosti železničnej stanice Belorussky. ) Moskva (M. ALTUFIEVO , Pskovskaya ul., 6) Moskva (Moskva, Radio ul. , vchod 2, kancelária 2) Naberezhnye Chelny (Sh.Usmanova ul. 122 kb. 111 1. poschodie) Nalchik (Nalchik, Kirov ul. 292a, 2. poschodie, kancelária ) Nakhodka (Pogranichnaja ul. 6, miestnosť 304) Nevinnomyssk (Pl. 50 Let Oktyabrya 8A) Neftejugansk (12 mikroobvodový dom 7) Nižnevartovsk (Nižnevartovsk, Mira ul. 31B.) Kancelária Com633 Novgorod, OL centrum)) Nižný Novgorod (m. Gorkovskaja, ul. Kostina, 3, BC "Nové námestie", 2. poschodie, kancelária 239) Nižný Tagil (at. l. Krasnoarmejskaja d.42a, 3. poschodie kancelária 4) Nižný Tagil (Nižný Tagil, ul. Papanina 5, kancelária 1, Kushva, Gornyakova ul. 4) Novosibirsk (ulica, Okťabrskaja 42, kancelária 601, obchodné centrum približne Leninovo námestie, Majakovského kino) Novosibirsk (Gogolova ulica 33/1. 20 metrov od stanice metra Maršal Pokryshkina, nákupy Gogol centrum.) Novotroitsk (Sovetskaya d st. 0,144 m2 26) Novy Urengoy (mikrookres Družba, dom 4/3, apt. 183) Norilsk (Leninsky prospekt 47a of. 79) Nur-Sultan (Astana) (Beibitshilik 14 Marden, kancelária 708) Odessa (b-R francúzske 60 multidisciplinárne rehabilitačné sanatórium "SARTUS") Okťabrskij (Mikrodistrikt 32a, dom 6, byt. 88) Omsk (5 Severnaya ul. prvé poschodie, pravá veranda.) Orsk (Lenin Ave. 93 ) Pavlodar (kancelária ul. Satpajev 107) Perm (kancelária Sovietska d.52 1) Perm (kancelária ul. Družby 34 305) Pyt-Yakh (mikrookres 5, dom 5) Pyatigorsk (strelecká divízia st. 295 a 13 k.2) Rostov na Done (Soborny pruh 21 kancelária 10 B) Salavat (Lenina ulica, budova 3 kancelária 209, 2. poschodie) Samara (Novo-Sadovaya ulica 106, kancelária 804, ľavý výťah, 8. poschodie) St Petersburg (metro: Vasileostrovskaja, 13. linka Vasiljevského ostrova, 78, kancelária 182) Petrohrad (stanica metra Dostojevskaja (5 metrov) a stanica metra Vladimirskaja (300 metrov) VLADIMIRSKY PASÁŽ 3. poschodie, centrálny vchod PRVÁ GALÉRIA, ul. Vladimirsky 19) Petrohrad (stanica metra Admiralteyskaya (10 metrov) Spasskaya 1 min chôdze Efimov 1, poschodie 2, kancelária 4, obchodné centrum "Sennaja 4", vchod vľavo od kaviarne "Sever") Saratov (Bolshaya Gornaya ul., 359V, kancelária č. 3) Sevastopoľ (Ochakovtsev ul. 19, centrum "Plaza", prízemie, kancelária 29/2) Snezhinsk (Zababahina ul. 19 a) Soči (Sochi ko. Donskaya dom 15.) Soči ( Sovetskaja ul. 42, kancelária 204) Stavropol (Lomonosovova ul. 21 kancelária 18) Sterlitamak (85 Khudaiberdina ul., 3. poschodie) Surgut (30 let Pobedy 64) Tobolsk (Tobolsk, mikrodistrict 6, budova 11, kancelária od 39 Komsomolsky Prospekt)) Togliatti (40 rokov) Pobedy, 50, kancelária 212a, TD Raduga 1. poschodie) Tomsk (Tomsk, ulica Sovetskaja 84) Tuymazy (ul. Michurina, kancelária 15 2) Ťumen (ul. Gerzen, kancelária 72 214) Uly Ryabikov ulica, d 73) Ust-Kamenogorsk (Gorkij 57, kancelária 213) Ufa (Verkhnetorgovo námestie, 6 (Obchodné centrum NESTEROV)) Chabarovsk (Postysheva ul., kancelária 16 od 108) Chanty-Mansijsk (G. Chanty-Mansijsk, sv. Karl Marx 15, 2. poschodie.) Čeľabinsk (168 Pobedy Ave., 3. poschodie, kancelária 36.) Čerkessk (101 Lenina St.) Čita (104 Babushkina St., kancelária 425) Chishmy (17 Ring Road) Chishmy (Friendship Ave. , 1B) Švajčiarsko (Arosio via Terra Sotto, 1 6939) Shymkent (Kolkhoznaja ul. 47) Južno-Sachalinsk (Angarskij pruh 21) Jakutsk (Dzeržinskij ul. 8 / 3b) Jakutsk (Jakakutsk, SEC,5embank) Yal Fontána, 4. poschodie) Yanaul (ulica Sovetskaya, 23, kancelária N 8 budova Berezka) Jaroslavľ (57 Showroom) Jaroslavľ (ulica Chkalova 2) Birsk Bashkortostan () ?>

    Často vyvstáva otázka, ako umiestniť jeden formulár na všetky stránky vašej aplikácie Zend. Povedzme, že chcem umiestniť formulár predplatného do súboru layout.phtml tak, aby bol umiestnený na každej stránke. Príkaz layout->content() pracuje s akciami a ovládačmi... Ako teda implementujeme to, čo potrebujeme?

    Jedným z riešení tohto problému je vytvorenie akčného pomocníka.

    Začnime nastavením aplikácie ZF:

    $ zf vytvoriť formulár rozloženia projektu $ formulár rozloženia cd $ zf povoliť rozloženie

    Vyčistite súbor application/views/scripts/index/index.phtml a vložte niečo takéto:

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

    Toto je domovská stránka

    Teraz môžeme začať.

    Formulár

    Poďme tvoriť nový formulár:

    $ zf vytvoriť registráciu formulára

    Okrem polí, ktoré potrebujeme:

    application/forms/Signup.php:

    Trieda Application_Form_Signup rozširuje Zend_Form ( public $processed = false; verejná funkcia 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", "povinné" => true, "validators" => array(array("StringLength", false, array("max"=>150)), "EmailAddress",),)); $this- >addElement("submit", "go", array("label" => "Zaregistrovať sa",)); ) )

    Máme formulár. Zostáva to vyniesť.

    Akčný pomocník

    Na inicializáciu formulára používame pomocníka akcie.

    Pridajte riadok do application.ini:

    application/configs/application.ini:

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

    Teraz už systém vie, kde hľadať akčných pomocníkov, takže môžeme pokračovať:

    application/Bootstrap.php:

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

    Akčný pomocník bude vyzerať 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() ; // spracovanie údajov $form->processed = true; ) ) $view->signupForm = $form; ))

    Nie je tu nič zvláštne. Len dávajte pozor na rodičovskú triedu.

    Zobraziť pomocníka

    Ak chcete zobraziť formulár, vytvorte pomocníka zobrazenia, ktorý vyzerá takto:

    application/views/helpers/SignupForm.php:

    Prihláste sa na odber nášho newslettra

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

    Ďakujeme, že ste sa prihlásili

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

    Všetko, čo nám zostáva, je vykresliť formulár v layout.phtml:

    application/layouts/scripts/layout.phtml:

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

    rozloženie()->obsah; ?>
    signupForm($this->signupForm); ?>

    Stalo

    To je všetko. Dosiahli sme funkčnosť, ktorú sme si predstavovali.

    Cm… Slovník synonym

    BAINKI, nezmenený. ch. (detinský). Spánok. chceš kozy? Ľahnite si bainki. Vysvetľujúci slovník Ushakova. D.N. Ušakov. 1935 1940 ... Vysvetľujúci slovník Ushakova

    Robiť / robiť bainki (bye bye). Jarg. hovoria Kyvadlová doprava. Spánok. Maksimov, 21… Veľký slovník ruských prísloví

    predikujem. rozvinúť O stave spánku (v reči detí alebo v rozhovore dospelých s deťmi). II int. rozvinúť Používa sa ako súčasť uspávanky. Výkladový slovník Efremovej. T. F. Efremová. 2000... Moderné slovník ruský jazyk Efremova

    bainki- ainki, nemennosť... ruský pravopisný slovník

    bainki- nemennosť... Pravopisný slovník ruského jazyka

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

    bainki- int.; vo funkcii skaz. = čau čau 2) … Slovník mnohých výrazov

    bainki- ba / atrament / a medzi ... Morfemický pravopisný slovník

    knihy

    • Bainki, Tokmakova I.P. V tejto knihe môžete čítať alebo dokonca spievať uspávanky pre svoje dieťa. Vystrihnúť knihu...
    • Bainki (vyd. 2006), Irina Tokmaková. V tejto knižke môžete svojmu dieťatku čítať alebo dokonca spievať uspávanky. Vystrihnúť knihu. ISBN:5-9524-2404-X…

    Namiesto štandardnej wp-signup.php si vytvorte vlastnú registračnú stránku pre viacero lokalít.

    AT normálna inštalácia wordpress stránku registrácia (autorizácia, reset hesla) vypíše súbor wp-login.php.

    • /wp-login.php - autorizácia
    • /wp-login.php?action=register - registrácia
    • /wp-login.php?action=lostpassword - obnovenie hesla

    V súbore wp-login.php sú samostatné podmienky pre multisite. Takže, keď kliknete na /wp-login.php?action=register na multisite, WordPress sa presmeruje na stránku /wp-signup.php. V mnohých témach stránka nevyzerá veľmi atraktívne, preto si spravíme vlastnú.

    Hlavná stránka siete

    V predvolenom nastavení WordPress otvára prihlasovaciu stránku (wp-signup.php) na hlavnej doméne (webovej lokalite) webu. Je však možné vytvoriť samostatnú registračnú stránku pre každú stránku v sieti, aj keď majú rôzne témy. Budeme brať do úvahy prípad, keď všetky stránky v sieti majú svoju vlastnú registračnú stránku, ale používa sa rovnaká téma a stránky sa líšia iba jazykom. Ak sa použijú rôzne témy, bude potrebný ďalší kód.

    function.php?

    Nie Zdá sa, že názov tohto súboru je uvedený v každom článku WordPress. V našom prípade, berúc do úvahy skutočnosť, že funkcia registrácie je navrhnutá pre niekoľko stránok, má zmysel presunúť ju do doplnkov MU, ktoré sa načítajú pri otvorení ľubovoľnej stránky.

    Lyrická odbočka

    Stojí za zmienku, že MU pluginy sa načítajú pred normálnymi pluginmi a pred úplným načítaním jadra WordPress, takže volanie niektorých funkcií môže viesť k fatálnym chybám v PHP. Toto "skoré" nakladanie má svoje výhody. Povedzme, že v žiadnej téme sa nemôžete držať niektorých akcií, ktoré fungujú ešte pred načítaním súboru functions.php z témy. Príkladom toho sú akcie z pluginu Jetpack v tvare jetpack_module_loaded_related-posts (related-posts je názov modulu), pomocou ktorých je možné sledovať aktivitu modulov v Jetpacku. Túto akciu nie je možné „pripojiť“ zo súboru témy, pretože akcia sa už spustila pred načítaním témy – pluginy sa načítajú pred témami. Všeobecný obrázok poradia načítania WordPress si môžete pozrieť na stránke Action Reference v kódexe.

    Poradie súborov

    Zásuvné moduly MU môžu obsahovať ľubovoľný počet súborov a akúkoľvek štruktúru, ktorá sa vám zdá logická. Riadim sa nasledovnou hierarchiou:

    |-mu-plugins |-|-load.php |-|-|-selena-network |-|-|-|-registrácia |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

    V súbore load.php sú pripojené všetky potrebné "pluginy" pre našu sieť:

    // Načítajte Traslates pre všetky doplnky load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Registrácia siete vyžaduje WPMU_PLUGIN_DIR . "/selena-network/signup/plugin.php"; // Iné doplnky // vyžadujú WPMU_PLUGIN_DIR ...

    Priečinky pluginov sú uložené vo vnútri priečinka selena-network, každý má svoj plugin.php , ktorý zahrnieme do load.php . To poskytuje flexibilitu a schopnosť rýchlo deaktivovať a povoliť určité veci.

    Adresa URL registračnej stránky

    Filter wp_signup_location sa používa na zadanie adresy stránky registrácie. Nachádza sa v súbore wp-login.php a je zodpovedný za presmerovanie na wp-signup.php .

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

    Pridajme našu funkciu do mu-plugins/selena-network/signup/plugin.php , ktorá poskytne adresu registračnej stránky na aktuálnej stránke:

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

    selena_network je predpona, ktorú používam v názvoch všetkých funkcií v zásuvných moduloch MU na mojej stránke, aby sa predišlo kolíziám, mala by sa nahradiť vašou vlastnou jedinečnou predponou. Pridajte prioritu filtra 99, pretože niektoré zásuvné moduly ako bbPress a BuddyPress môžu túto adresu prepísať vlastnou (MU zásuvné moduly sa načítajú pred bežnými zásuvnými modulmi, pozri vyššie). Všimnite si, že home_url() sa používa namiesto network_site_url() na udržanie návštevníka v rovnakej doméne. Ako adresu možno použiť ľubovoľnú adresu URL.

    Vytvorenie stránky

    Teraz vytvoríme stránku s adresou site.com/signup/ cez obvyklé rozhranie a v zložke podradenej témy šablónu pre náš nová stránka- page-signup.php . Namiesto slova „registrácia“ môžete použiť jedinečné ID.

    Vo vnútri novej šablóny musíte zavolať funkciu selena_network_signup_main(), ktorá zobrazí registračný formulár.

    Stojí za zmienku, že celý proces so šablónami je voliteľný a namiesto toho si môžete vytvoriť svoj vlastný krátky kód, ktorý bude volať aj funkciu selena_network_signup_main().

    wp-signup.php a wp-activate.php

    Teraz vytvoríme funkciu, ktorá zobrazí registračný formulár. Ak to chcete urobiť, skopírujte súbory wp-signup.php a wp-activate.php z koreňového adresára WordPress do mu-plugings/selena-network/signup/ (a nezabudnite ich zahrnúť do mu-plugins/selena-network /signup/plugin.php) . Ďalšie manipulácie so súbormi sú mimoriadne ťažké a dlhé na opísanie, takže ich budete musieť urobiť sami. Len popíšem, čo presne treba urobiť a zverejniť zdrojové súbory vášho projektu:

    1. Na začiatku súboru odstráňte všetky požadované , volania funkcií a ďalší kód mimo funkcií.
    2. Premenujte všetky funkcie pridaním jedinečných predpôn k menám.
    3. Zabaľte spodnú časť kódu wp-signup.php do funkcie selena_network_signup_main a na úplný začiatok napíšte globálne $active_signup; .
    4. Vymeňte rozloženie za svoje na správnych miestach.

    Vo vnútri wp-activate.php musíte urobiť to isté:

    1. Odstráňte všetok kód mimo funkcií, zabaľte rozloženie do samostatnej funkcie.
    2. V prípade potreby zmeňte rozloženie.

    Súbor wp-activate.php je zodpovedný za stránku aktivácie účtu. Rovnako ako pri registračnej stránke je potrebné pre ňu vytvoriť samostatnú šablónu, v ktorej je potrebné zavolať funkciu zo súboru wp-activate.php.

    Odosielanie aktivačných emailov

    Registračná stránka odošle návštevníkovi e-mail s odkazom na aktiváciu účtu. Štandardne to rieši funkcia wpmu_signup_user_notification() zo súboru ms-functions.php. Jeho funkčnosť si možno za jeho funkciu požičať. Dôvod, prečo musíte prestať používať túto funkciu, je, že odošle odkaz na aktiváciu účtu z wp-activate.php . Túto funkciu môžete „vypnúť“ pomocou filtra wpmu_signup_user_notification zadaním hodnoty false (ak sa tak nestane, aktivačný list bude odoslaný dvakrát, dobre, v skutočnosti sú to dve rôzne písmená).

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

    V dôsledku toho sa registračná stránka v téme Selena stala oveľa čistejšou a prehľadnejšou.

    Záver

    Na internete je veľa iných nie veľmi správnych spôsobov, ako to isté urobiť - Apache presmerovania, AJAX formuláre, ktoré bez Java Scriptu nebudú fungovať, atď. Toto všetko sa mi veľmi nepáčilo, tak som to skúsil urobiť tak správne ako možné na mojej vlastnej stránke.

    Podotýkam, že by ste mali súbory upravovať opatrne a snažiť sa príliš neodchýliť od pôvodných, aby v budúcnosti, ak WordPress zmení súbory wp-signup.php a wp-activate.php, bolo jednoduchšie porovnávať aby našli zmeny.

    Nezabudnite sa pozrieť zdroj všetky funkcie opísané vyššie, aby ste plne pochopili, čo a ako sa deje vo vnútri kódu.

    Bonus. Ochrana proti spammerom

    Dokonca aj tie najmenšie stránky WordPress sú často bombardované registráciami spamu. Môžete písať nekonečné podmienky na filtrovanie botov, často skôr pokusy o vytvorenie umelej inteligencie 🙂 V prípade multisite mi veľmi pomohlo bežné presmerovanie v Apache, s ktorým som pri otvorení /wp-signup.php požiadal o vydanie 404 a /wp-acitvate.php (nie som expert na nastavenie Apache, takže moje pravidlá nemusia byť veľmi správne).

    RewriteEngine On RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # ZAČIATOK WordPress # Predvolené pravidlá WordPress :) # ... # KONIEC WordPress

    P.S. Niektoré veci tretích strán sa snažím opísať čo najpodrobnejšie, pretože keď som začínal, veľa vecí mi niekedy nemal kto nabádať a vysvetliť. Tiež verím, že takéto malé tipy na iné materiály niekoho donútia naučiť sa niečo nové a rozšíria si oblasť vedomostí. Používajú sa položky RewriteRule regulárne výrazy, nie sú vôbec zložité, napríklad symbol ^ znamená začiatok riadku.