Lehetővé teszi egy WordPress-telepítés használatát több webhelyhez egyidejűleg. Ebben az esetben minden webhely saját táblákat kap az adatbázisban egyedi előtaggal.

A regisztrált felhasználók adatait tartalmazó táblázatok minden hálózati oldalon közösek. Ez határozott plusz, és egyszeri regisztrációval több oldalhoz is hozzáférhet. Ezenkívül minden webhelyen ugyanaz a fiók különböző jogosultságokkal rendelkezhet. Előfordulhat például, hogy egy felhasználó az egyik webhelyen szerkesztő, a másikon pedig rendszergazda.

Normálban WordPress telepítése a regisztrációs, engedélyezési és jelszó-visszaállítási oldalon megjelenik a wp-login.php fájl.

  • wp-login.php - engedélyezés
  • wp-login.php?action=register - regisztráció
  • wp-login.php?action=lostpassword - jelszó visszaállítása

Többoldalas módban a WordPress magja kicsit másképp kezd viselkedni, és ha rákattint a wp-login.php?action=register linkre, átirányít a wp-signup.php oldalra. Ez az Ön hálózati regisztrációs oldala, amely alapértelmezés szerint a WordPresshez tartozik.

A normál felhasználói fiókok regisztrációja mellett új webhelyet is létrehozhat rajta, ha a kiemelt rendszergazda engedélyezte ezt a funkciót a hálózati beállításokban (Hálózati adminisztráció → Beállítások → Hálózati beállítások).

A legtöbb témában a regisztrációs oldal nem néz ki túl jól. Sok téma olyan CSS-keretrendszereket használ, mint a Bootstrap, és saját specifikus osztályait az oldal különböző elemeinek stílusához, így nehéz egyetlen HTML-kódot írni, amely mindenkinek megfelel.

De ne essen kétségbe, ha az oldal rendezetlennek tűnik. A wp-signup.php fájl eleinte nagyszerű, amikor nincs időd az oldal minden részletét átdolgozni – más fontosabb oldalakra és tartalmakra koncentrálhatsz.

Ha készen áll a saját regisztrációs oldal létrehozására, a wp-signup.php jó referencia és példa a WordPress azon funkcióinak egyszerű megértéséhez, amelyeket a WordPress a felhasználói bevitel feldolgozásához és ellenőrzéséhez, valamint új fiókok létrehozásához biztosít.

A hálózat fő oldala

Alapértelmezés szerint a WordPress megnyitja a regisztrációs oldalt (wp-signup.php) a web fő domainjén (webhelyén). Azonban a hálózat minden webhelyéhez létrehozhat regisztrációs oldalakat, még akkor is, ha vannak témái.

Megvizsgáljuk azt az esetet, amikor a hálózat összes webhelye ugyanazt a témát használja, de mindegyik rendelkezik regisztrációs oldallal. Az oldalak nyelve eltérő (angol és orosz), így a regisztrációs oldal az oldal „anyanyelvén” jelenik meg. Abban az esetben, ha az oldalak különböző témákat használnak, minden attól függ, hogy melyik témákról van szó, hogy ugyanaz az elrendezés megfelelő-e számukra (nagyszerű helyzet, ami arra késztet, hogy minden témát egységesítsen), vagy érdemes-e egyenként fejleszteni az oldalakat.

functions.php alternatíva

Fájlsorrend

Az MU bővítmények tetszőleges számú fájlt és struktúrát tartalmazhatnak, amely logikusnak tűnik. Én egy ilyen hierarchiát követek:

| mu bővítmények | | load.php | | selena hálózat | | | iratkozz fel | | | | plugin.php | | | ... | | | jetpack | | | | plugin.php

A load.php fájlban a fordítások és az összes szükséges "plugin" csatlakoztatva van:

// Fordítások betöltése MU-bővítményekhez load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // A regisztrációs oldal működéséhez WPMU_PLUGIN_DIR szükséges. "/selena-network/signup/plugin.php"; // Egy másik bővítmény // WPMU_PLUGIN_DIR szükséges ...

A beépülő modulok mappái a selena-network könyvtárban vannak tárolva. Mindegyiknek megvan a saját plugin.php-je, amelyet a load.php-be is belefoglalunk. Ez rugalmasságot biztosít, és lehetővé teszi az azonnali letiltást és engedélyezést egyedi komponensek a munkaprojektről vészhelyzet esetén.

Regisztrációs oldal

Miután kitaláltuk, hol és hogyan írjuk meg a kódot, továbbléphetünk a regisztrációs oldal létrehozásához.

Hozzunk létre egy oldalt example.org/signup/ címmel a szokásos felületen keresztül. Címként bármilyen URL-t használhat, amely megfelelőnek tűnik a projekthez.

Átirányítás a szükséges regisztrációs oldalra

Annak érdekében, hogy a WordPress értesüljön új regisztrációs oldalunkról és átirányítson rá, a „Regisztráció” linkre kattintva a wp_signup_location szűrőt használjuk. A wp-login.php fájlban található, és alapértelmezés szerint felelős a wp-signup.php oldalra történő átirányításért.

Case "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); kilépés; // ...

Mint emlékszik, alapértelmezés szerint a regisztrációs oldal a fő hálózati tartományban nyílik meg. Ezért van itt a network_site_url() használatos.

Adjuk hozzá a kezelőnket a mu-plugins/selena-network/signup/plugin.php szűrőhöz, amely megadja a regisztrációs oldal címét az aktuális oldalon:

Függvény selena_network_signup_page($url) ( return home_url("regisztráció"); ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

A selena_network egy előtag, amelyet a webhelyemen lévő MU-bővítményeken belüli összes függvény nevében használok az ütközések elkerülése érdekében. Ezt a saját egyedi előtagomra kell cserélni. Adjon hozzá 99-es szűrőprioritást, mert egyes bővítmények, például a bbPress és a BuddyPress felülírhatják ezt a címet a sajátjaikkal (az MU beépülő modulok a normál beépülő modulok előtt töltődnek be, lásd fent).

Ne feledje, hogy a home_url() függvényt használja, amely a network_site_url() -vel ellentétben az aktuális hely címét adja vissza, nem a hálózat fő webhelyét.

wp-signup.php funkció

A wp-signup.php fájl sok funkciót és kódot tartalmaz. A teljes kép megtekintéséhez használhatja a kódhajtogatást. Általános szabály, hogy angolul ezt "kódhajtogatásnak" hívják.

A fájl legelején az 1-től a 80-ig (4.1.1-es verzióban) különféle ellenőrzésekés az oldal "kezdetének" megjelenítése a get_header() segítségével.

Ezután rengeteg metódust deklarálnak, és mielőtt elkezdenénk velük dolgozni, érdemes megérteni, hogy az egyes függvények mit csinálnak. Sokan gyakran használnak más, wpmu_ előtaggal ellátott függvényeket, amelyek mindegyike a wp-includes/ms-functions.php fájlban van deklarálva. Ezt a részt nehéz megérteni anélkül, hogy maga látná a kódot. Az alábbiakban a fő funkciók rövid leírása található, ha nehézségei adódnának.

  • wpmu_signup_stylesheet() - További CSS-t ad ki a regisztrációs oldalon.
  • show_blog_form() - mezők a webhely regisztrációjához (cím, név, láthatóság a keresők számára).
  • validate_blog_form() – Érvényesíti a megadott webhelycímet és címet a wpmu_validate_blog_signup() segítségével.
  • show_user_form() - mezők a felhasználói regisztrációhoz (bejelentkezés és e-mail cím).
  • validate_user_form() - a megadott bejelentkezési név és e-mail cím érvényesítése. küldje el a wpmu_validate_user_signup() segítségével.
  • signup_another_blog() - mezők új webhelyek regisztrálásához a show_blog_form() használatával azon felhasználók számára, akik már regisztráltak az oldalon.
  • validate_another_blog_signup() – Érvényesíti a webhely címét és címét a validate_blog_form() segítségével.
  • A signup_user() a fő funkció a regisztrációs oldal mezőinek megjelenítéséhez.
  • validate_user_signup() – Érvényesíti a felhasználónevet és az e-mail címet. küldje el a validate_user_form() paraméterrel.
  • signup_blog() - mezők az oldal címének, nevének és láthatóságának megadásához (a regisztráció második lépése) a show_blog_form() segítségével.
  • validate_blog_signup() - érvényesíti a bejelentkezést, e-mail címet. mail, cím és webhely neve.

A wp-signup.php fájl legalján (a 4.1.1-es verzió 646-os sorától) található a regisztrációs oldal fő logikája, amely az összes fent leírt módszert használja. A kód ezen része nem kerül át egy függvénybe. A végén a get_footer() meghívódik.

Másolja a wp-signup.php funkcióit

Ezután a wp-signup.php MU-bővítményekbe való másolásának és a "fork" módosításának az eljárását ismertetjük. Talán ez nem tűnik a helyes útnak. Ehelyett saját függvényeket írhat az űrlapok érvényesítéséhez és megjelenítéséhez a semmiből, osztályok használatával, nem pedig normál függvényekkel. Véleményem szerint a wp-signup.php már rendelkezik minden szükséges logikával az oldalunkhoz, már csak apró változtatásokat kell végrehajtani.

A WordPress frissítésekor a wp-signup.php is időről időre változik, de ez nem jelenti azt, hogy minden kiadásnál szinkronizálnod kell majd a „villát”. A wp-signup.php-n belüli függvények alapvetően nem tesznek mást, mint a HTML-kimenetet, az adatellenőrzést, a fiók- és webhely-létrehozást, valamint az ms-functions.php-ben deklarált wpmu_ előtagú metódusokat.

Hozzon létre egy függvényt, amely megjeleníti a regisztrációs űrlapot az oldalon. Ehhez másolja a wp-signup.php fájlt a WordPress gyökérkönyvtárából a mu-plugings/selena-network/signup/ mappába. Csatlakoztassa a mu-plugins/selena-network/signup/plugin.php oldalon.

WPMU_PLUGIN_DIR szükséges. "/selena-network/signup/wp-signup.php";

Távolítsa el az összes szükséges és szükségtelen ellenőrzést a másolt fájl legelejétől. A 4.1.1-es verzióban ez az összes kód az 1-től a 80-ig terjedő sorokig.

Most készen állunk az alkotásra fő funkció a regisztrációs űrlap megjelenítéséhez. Ehhez az összes logikát a 646-os sortól a fájl legvégéig átvisszük a selena_network_signup_main nevű függvénybe. A legvégén eltávolítunk két extra zárást

(722. és 723. sor), valamint a get_footer() hívása.

Az újonnan létrehozott selena_network_signup_main() -ban a legelején deklaráljuk az active_signup globális változót, amelyet az összes többi metódus használ ebből a fájlból. És adjunk hozzá egy hívást a before_signup_form eseményhez, amelyet a fájl legelejétől távolítottunk el.

Függvény selena_network_signup_main() ( globális $active_signup; do_action("before_signup_form"); // ... )

Most már csak az elrendezést kell megváltoztatni minden olyan helyen, ahol szükséges, és a regisztrációs oldal készen áll.

Regisztrációs űrlap kimenet

Itt legalább két lehetőség van. Kényelmesebb módja egy rövid kód létrehozása és az oldalra való elhelyezése egy normál szerkesztőn keresztül.

// Rövid kód létrehozása network_signup add_shortcode("network_signup", "selena_network_signup_main");

A második lehetőség a page-signup.php oldalsablon létrehozása a gyermektéma mappájában. A „regisztráció” szó helyett használhat egy, az oldalhoz rendelt egyedi azonosítót. A sablonon belül adja hozzá a szükséges elrendezést, és hívja meg a selena_network_signup_main() parancsot a megfelelő helyen.

Ennek eredményeként a regisztrációs oldalam sokkal jobban és tisztábbnak tűnik.

Aktiválási oldal

Által WordPress alapértelmezett feltételesen két lépésre osztja a Multisite regisztrációs folyamatát - egy űrlap kitöltése az oldalon és a fiók aktiválása, amikor egy e-mailben küldött linkre kattint. Miután kitöltötte az előző részben létrehozott űrlapot, a WordPress e-mailt küld néhány utasítással és egy linkkel a fiók aktiválásához.

A WordPress gyökérkönyvtárában található wp-activate.php fájl felelős az aktiválási oldal megjelenítéséért. A wp-activate.php is teljesen megváltoztatható. A folyamat hasonló ahhoz, amit a wp-signup.php esetében már megtettünk.

Hozzuk létre az example.org/activate/ oldalt a szokásos felületen keresztül. A címként bármilyen olyan URL-t használjon, amely megfelelőnek tűnik.

Másolja a wp-activate.php fájlt a MU bővítményeinkbe, és helyezze el a mu-plugins/selena-network/signup/plugin.php fájlba.

WPMU_PLUGIN_DIR szükséges. "/selena-network/signup/wp-activate.php";

A wp-signup.php-vel ellentétben nem sok tartalom van benne. A fájl egyetlen műveletet hajt végre – aktiválja a fiókot, ha a megfelelő kulcs érkezik, és hiba- vagy sikerüzenetet jelenít meg.

Távolítsunk el minden felesleges ellenőrzést és követelményt – a WordPress 4.1.1-es verziójának 1-69. sorait. A legvégén eltávolítjuk a get_footer() hívást. A fennmaradó tartalom átkerül a selena_network_activate_main() függvénybe.

Érdekes megjegyezni, hogy itt a WordPress (wp-load.php) betöltése előtt deklarálták a WP_INSTALLING állandót. Jelenléte miatt a WordPress nem tölt be bővítményeket.

A regisztrációs oldalhoz hasonlóan itt is csak az elrendezést kell javítani, ahol szükséges. Megváltoztathatja a megjelenített üzenetek szövegét is (ebben az esetben ne felejtse el hozzáadni a MU-bővítmények szövegtartományát az összes fordítói funkcióhoz, alapértelmezés szerint nincs sehol beállítva).

A kész funkció egy előre elkészített oldalon rövid kódon vagy külön sablonon keresztül használható gyermektémában.

Aktiváló e-mailek megfelelő linkekkel

Az aktiváló oldal készen áll, de a WordPress nem tud róla, és továbbra is küld aktiválási e-maileket a wp-activate.php hivatkozással. A wp-signup.php-vel ellentétben nincs olyan szűrő, amely lehetővé tenné a cím megváltoztatását. Ehelyett meg kell írnia egy saját funkcióját, amely e-maileket küld a megfelelő hivatkozásokkal.

Az oldalon található űrlap kitöltésekor és beküldésekor WordPress regisztráció hívások wpmu_signup_ felhasználó() vagy wpmu_signup_ blog() a regisztráció típusától függően. Mindkét funkció létrehozza új rekord a wp_signups táblában, kitöltve azt a szükséges tartalommal, köztük a fiók aktiváló kulcsával.

Ezt követően a függvénytől függően a wpmu_signup_ meghívódik felhasználó _notification() vagy wpmu_signup_ blog _értesítés() . Mindkét funkciónak hasonló a funkcionalitása – aktiváló linket tartalmazó e-mailt generálnak és küldenek, de eltérő érveket használnak. Mindkettő rendelkezik szűrővel az esemény "rögzítésére".

If (! apply_filters("wpmu_signup_user_notification", $felhasználó, $felhasználói_e-mail, $kulcs, $meta)) hamis értéket ad vissza;

Fiókok aktiválása blog létrehozásával:

If (! apply_filters("wpmu_signup_blog_notification", $domain, $elérési út, $cím, $felhasználó, $felhasználói_e-mail, $kulcs, $meta)) ( return false; )

Csak meg kell írnia saját kezelőit, amelyeken belül a wp_mail()-on keresztül küldenek leveleket, és a legvégén feltétlenül adja meg a false-et, hogy a WordPress ne küldjön kétszer aktiváló levelet - az egyik a tiéd, a másik egy alapértelmezett levél a wp-activate.php linkje.

Függvény selena_network_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // E-mail fejléc, törzs és fejlécek generálása // ... // E-mail küldése vagy Cron feladat hozzáadása e-mail küldéséhez wp_mail($user_email , wp_specialchars_decode($subject), $message, $message_headers); // Adja meg a false értéket, hogy megakadályozza, hogy a WordPress kétszer küldjön aktiváló e-mailt; ) add_filter("wpmu_signup_user_notification", "selena_network_wpmu_signup_user_notification", 10, 4);

Ha SMTP-kiszolgálón keresztül küld e-maileket, vagy nagyon magas a regisztrációk száma, érdemes megfontolni, hogy ne küldjön azonnali e-mailt. Ehelyett Cron-feladatokat adhat hozzá a WordPress Cron segítségével.

A wp-signup.php és a wp-activate.php hozzáférésének lezárása

Miután létrehozta saját regisztrációs és aktiválási oldalait, előfordulhat, hogy be kell zárnia az "eredetiket". Például, ha a regisztrációs oldalon vannak további mezők, amelyeket ki kell tölteni. Ezenkívül sok WordPress-webhelyre vonatkozik a spam-regisztráció.

Két probléma egy műveletben történő megoldásához megkérheti az Apache-t, hogy adja vissza a 404-et, ha megpróbálja megnyitni ezeket az oldalakat. Ehhez csak regisztrálnia kell néhány további RewriteRule-t a konfigurációs fájlban vagy a .htaccess fájlban.

RewriteEngine a RewriteBase-en / # A reguláris kifejezések ismerete soha nem felesleges :) RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # WordPress KEZDETÉS # Hagyja az alapértelmezett WordPress szabályokat :) # ... # WordPress VÉGE

Következtetés

Erre és sok más, a WordPress-szel kapcsolatos „problémára” számos megoldás létezik az interneten. Például a regisztrációs és aktiválási oldalak létrehozásához egyesek javasolják az eredeti wp-signup.php és wp-activate.php átírását. Ezt nem szabad megtenni, mert ha wordpress frissítések elveszíti a fájlokon végzett összes módosítást, és a kernel integritását sem fogja tudni ellenőrizni a segítségével.

Ha bármilyen kiegészítőt, témát vagy megoldást fejleszt, szánjon egy kis időt arra, hogy megértse, mi történik a WordPress belsejében. Ehhez számos hasznos hibakereső eszköz létezik.

P.S.

A Multisite User Management beépülő modul segítségével automatikusan különböző szerepköröket rendelhet hozzá az új felhasználókhoz.

Ha bármilyen kérdése vagy nehézsége van a regisztrációs és aktiválási oldalak létrehozása során a cikk elolvasása után, írjon megjegyzést, és biztosan válaszolunk.

27.03.2015 27.03.2015

WordPress fejlesztő. Mindenben szereti a rendet és az új eszközök megértését. A Symfony komponens architektúra ihlette.

  • --- 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 60035 P.O. No Box 42 ) Isztambul (Isztambul, Gençturk Cad.15, Bırlik Han. k-5.d.55 No.1) Madrid 92200 Neuilly-sur-Seine) Republica Moldova , Falesti (s.Fagadau) South Kensington (Bute utca) Adler (Csendes) 2. sáv, Kudepsta járás) Aktobe (Aktobe utca 47/2) Almetievsk (Almetievsk, Lenin utca 13, 306. iroda) Anapa (Terskaya u. 88., 3. emelet) Astrakhan (Kommunisticheskaya u. 17., 4. iroda) Atyrau (Atyrau, Azattyk Ave. 42, iroda 206) Berdyansk (Zaporozhye régió) Bishkek (Bishkek, 32B Chui sugárút, bevásárlóközpont "Izumrud" iroda C-5) Blagoveshchensk (50 Let Oktyabrya st. 15. "Amur Fair" iroda 575 Krassztunjana) Krasnaya u. 61 (2. emelet) városközpont) Vlagyivosztok (Svetlanskaya u. 147, iroda 2/4) Olgograd (Volgograd városa autópálya Aviators 15 raktár 23) Dyurtyuli (st. Agidel, 4 kv.2) Yeysk (st. Pervomayskaya 56, iroda 308) Jekatyerinburg (10 Mamin-Sibiryak St., iroda 3) Ivanovo (Sheremetevsky prospektus, 85G, Premium Plaza Business Center 2. emelet, iroda 212) Izhevsk (Lenina 21, iroda 304. Business Center " Forum") Izberbash (Chapaeva 4 ind. 368501) Irkutszk (Irkutszk, Gornaya u. 4 (a Karamel bevásárlóközpont mellett) iroda 407) Ishimbay (Zorge, 18-as ház) Yoshkar-Ola (24v Lenin Ave., iroda 318) Kazan ( 1. sáv oldalas Grivki ház 10, "Kozya Sloboda" metróállomás, valamint Dekabristov utca, 85 "B" Üzleti központ "Relita" iroda 411) Kamensk-Uralsky (Prospekt Pobeda 56) Kemerovo (Demyan Bedny u., 1 iroda 401) Kijev (Olevskaya st) ., 9/4 (érkezés előzetes hívással) Komsomolsk-on-Amur (Shikhanova u. 10, iroda 1, bejárat a Komsomolskaya felől az épület végéből.) .Krasnaya 124 iroda 302) Krasznojarszk (pr. Krasznojarszkij munkás, 120 bevásárlóközpont "Krasnoyarye") Lviv (Szobornaja tér 12A) Mahacskala (Akushkinogo 9v) Miass (st. 30 let VLKSM 85) Minsk (Korzhenevskogo, 26) Moszkva (Metro: VDNH, Yaroslavskaya u., 10, iroda 0 4, 10, 1 épület 6) Moszkva (Szimferopolszkij körút) Moszkva (Glazovsky sáv 5, bejárat az ívben, az ajtó a metróállomás bal oldalán: Szmolenszkaja-500m, Kropotkinskaya-1km., Park Kultury-1km.) Moszkva (m. Csehovszkaja, Puskinszkaja, Tverszkaja. Strastnoy Boulevard, 6, épület 1, Business Center, iroda 421) Moszkva (Lobnya, Majakovskogo st., 4A, TR1, 3. emelet, iroda 301) Moszkva (Molodezhnaya metróállomás, Yartsevskaya utca, 27. épület 9. Egészségjavító Központ "Négy" Elemek") Moszkva (Krasnaya Presnya 38-45) Moszkva (St. Moszkva m. Taganskaya radiális kijárat 3, 30 méterre a metrótól. utca. Bolsije Kamenscsiki 1, 4. emelet, 30. iroda) Moszkva (Leninsky Prospekt, Vavilova 9A metróállomás, 6. épület, 10 B iroda, 3. emelet) Moszkva (Novoslobodskaya metróállomás, Mendelejevszkaja, Majakovszkaja, Belorusszkaja (radiális). 4. Tverskaya utca -Yamskaya utca , 24. Bejárat a boltíven keresztül, PET SHOP) Moszkva (metró Belorusskaya (gyűrű), 5 méterre a metró kijáratától. Tverskaya Zastava tér 3, 3. emelet, 321. iroda. A Belorusszkij pályaudvar közelében. ) Moszkva (M. ALTUFIEVO , Pskovskaya u., 6) Moszkva (Moszkva, Radio st. , 2. bejárat, 2. iroda) Naberezhnye Chelny (Sh.Usmanova u. 122 kb. 111 1. emelet) Nalchik (Nalchik, Kirov u. 292a, 2. emelet, 6. iroda) ) Nahodka (Pogranichnaya u. 6, 304-es szoba) Nyevinomiszszk (Pl. 50 Let Oktyabrya 8A) Nefteyugansk (12 mikrokerület háza 7) Nyizsnyivartovszk (Nizsnyevartovszk, Mira u. 31B.) Nyizsnyij Novgorod 6. üzlet (1. 3. 9. OL. iroda) központ)) Nyizsnyij Novgorod (m. Gorkovskaya, st. Kostina 3, BC "Új tér", 2. emelet, iroda 239) Nyizsnyij Tagil (a l. Krasnoarmeyskaya d.42a, 3. emeleti iroda 4) Nyizsnyij Tagil (Nizsnyij Tagil, st. Papanina 5, iroda 1, Kushva, Gornyakova u. 4) Novoszibirszk (utca, Oktyabrskaya 42 iroda 601, Üzleti központ körülbelül Lenin tér, Majakovszkij mozi) Novoszibirszk (Gogol utca 33/1. 20 méterre a Marshal Pokryshkina metróállomástól, központ.) Novotroitsk (Szovetszkaja u. .144 négyzetméter 26) Novi Urengoy (Druzsba mikronegyed, ház 4/3, apt. 183) Norilsk (Leninsky prospekt 47a of. 79) Nur-Sultan (Astana) (Beibit,shilik) Marden, iroda 708) Odessza (b -R French 60 multidiszciplináris rehabilitációs szanatórium "SARTUS") Oktyabrsky (32a mikrokörzet, 6. ház, 88. lakás) Omszk (Szevernaja u. 5. első emelet, jobb veranda.) Orszk (Lenin Ave. 93.) ) Pavlodar (Satpaev u. 71. iroda 107) Perm (Szovjetszkaja d.52 iroda 1) Perm (Druzsbi u. 34. iroda 305) Pyt-Yakh (5. mikrokörzet, 5. ház) Pjatigorszk (u. 295. Lövészosztály és 13 k.2) Rostov-on-Don (Soborny lane 21 iroda 10 B) Salavat (Lenina utca, ház 3, iroda 209, 2. emelet) Samara (Novo-Sadovaya utca 106, iroda 804, bal lift, 8. emelet) St. Petersburg (metró: Vasileostrovskaya, Vasziljevszkij-sziget 13. vonala, 78, iroda 182) Szentpétervár (Dosztojevszkaja metróállomás (5 méter) és Vlagyimirszkaja metróállomás (300 méter) VLADIMIRSKIJ PASSAGE 3. emelet, központi bejárat ELSŐ GALÉRIA, u. Vladimirsky 19) Szentpétervár (Admiralteyskaya metróállomás (10 méter) Szpasszkaja 1 perc séta Efimov utca 1, emelet 2, iroda 4, Business Center "Sennaya 4", bejárat a "Sever" kávézótól balra) Szaratov (Bolshaya Gornaya St., 359V, iroda No. 3) Szevasztopol (Ochakovtsev u. 19, központ "Plaza", földszint, iroda 29/2) Sznezhinsk (Zababahina u. 19 a) Szocsi (Szocsi ko. Donskaya ház 15.) Szocsi ( Szovetskaja u. 42. 204. iroda) Sztavropol (Lomonoszov u. 21. iroda 18.) Sterlitamak (Khudaiberdina u. 85., 3. emelet) Szurgut (Pobedy u. 30. 64.) Tobolszk (Tobolszk, 6. mikrokörzet, 11. épület, 11. iroda Komsomolsky sugárút)) Toljatti (40 éves) Pobedy, 50, iroda 212a, TD Raduga 1. emelet) Tomszk (Tomsk, Szovetskaya utca 84) Tuymazy (Michurina utca 15 iroda 2) Tyumen (Gerzen utca, 72 iroda Ulyanovsk 214 () Ryabikov utca, d 73) Uszt-Kamenogorsk (Gorkij u. 57., 213. iroda) Ufa (Verkhnetorgova tér, 6 (NESTEROV Üzleti Központ)) Habarovszk (Postiševa utca 16. iroda) 108-tól) Hanti-Manszijszk (G. Hanti-Manszijszk, st. Karl Marx 15., 2. emelet.) Cseljabinszk (168 Pobedy Ave., 3. emelet, iroda 36.) Cserkeszk (101 Lenina u.) Chita (104 Babushkina u., iroda 425) Chishmy (17. Ring Road) Chishmy (Barátság Ave. , 1B) Svájc (Arosio via Terra Sotto, 1 6939) Shymkent (Kolkhoznaya u. 47) Juzsno-Szahalinszk (Angarsky lane 21) Jakutszk (Dzerzhinsky u. 8 / 3b) Jakutszk (Jakutszkij) Jaltaa (,kmentin, 5 Jalta) Szökőkút, 4. emelet) Yanaul (Szovjetszkaja utca 23. iroda N 8 épület Berezka) Yaroslavl (57 Showroom) Yaroslavl (Chkalova utca 2) Birszk Baskíria () ?>

    Gyakran feltett kérdés, hogyan helyezhet el egy űrlapot a Zend alkalmazás összes oldalán. Tegyük fel, hogy az előfizetési űrlapot a layout.phtml fájlban szeretném elhelyezni úgy, hogy az minden oldalon elhelyezkedjen. A layout->content() parancs műveletekkel és vezérlőkkel működik... Szóval hogyan valósítsuk meg, amire szükségünk van?

    Ennek a problémának az egyik megoldása egy akciósegéd létrehozása.

    Kezdjük a ZF alkalmazás beállításával:

    $ zf projekt elrendezési űrlap létrehozása $ cd elrendezési űrlap $ zf elrendezés engedélyezése

    Tisztítsa meg az application/views/scripts/index/index.phtml fájlt, és illesszen be valami ilyesmit:

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

    Ez a kezdőlap

    Most kezdhetjük.

    A nyomtatvány

    Alkossunk új forma:

    $ zf űrlap regisztráció létrehozása

    Valamint a szükséges mezők:

    application/forms/Signup.php:

    Az Application_Form_Signup osztály kiterjeszti a Zend_Form-ot ( public $processed = false; public function init() ( $this->addElement("text", "name", array("label" => "Név", "kötelező" => igaz, " validators" => array(array("StringLength", false, array("max"=>75)))),)); $this->addElement("text", "e-mail", array("címke" = > "Email", "required" => true, "validators" => array(array("StringLength", false, array("max"=>150)), "EmailAddress",),)); $this- >addElement("submit", "go", array("label" => "Regisztráció")); ) )

    Van egy űrlapunk. Már csak ki kell hozni.

    Akció Segítő

    A műveletsegéd segítségével inicializáljuk az űrlapot.

    Adjon hozzá egy sort az application.ini fájlhoz:

    application/configs/application.ini:

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

    A rendszer most már tudja, hol keresse az akciósegédeket, így továbbléphetünk:

    application/Bootstrap.php:

    bootstrap("frontController"); $signup = Zend_Controller_Action_HelperBroker::getStaticHelper("Regisztráció"); Zend_Controller_Action_HelperBroker::addHelper($regisztráció); ) )

    A műveletsegéd így fog kinézni:

    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())) ( $adat = $form->getValues() // adatfeldolgozás $form->processed = true; ) ) $view->signupForm = $űrlap; ) )

    Nincs itt semmi különös. Csak a szülői osztályra figyelj.

    Segítő megtekintése

    Az űrlap megjelenítéséhez hozzunk létre egy nézet segítőt, amely így néz ki:

    application/views/helpers/SignupForm.php:

    Iratkozz fel hírlevelünkre

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

    Köszönjük jelentkezését

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

    Nincs más hátra, mint az űrlap megjelenítése a layout.phtml-ben:

    application/layouts/scripts/layout.phtml:

    headMeta()->prependHttpEquiv("Content-Type", "text/html; karakterkészlet=UTF-8"); $this->headTitle("Layout form teszt"); echo $this->doctype(); ?> headMeta()->setIndent(4); ?>headTitle()->setIndent(4); ?>

    elrendezés()->tartalom; ?>
    signupForm($this->signupForm); ?>

    Megtörtént

    Ez minden. Elértük az általunk elképzelt funkcionalitást.

    cm… Szinonima szótár

    BAINKI, változatlan. ch. (gyerekes). Alvás. Akarsz melleket? Feküdj bainki. Usakov magyarázó szótára. D.N. Ushakov. 1935 1940... Usakov magyarázó szótára

    Do / do bainki (bye bye). Jarg. azt mondják Űrsikló. Alvás. Maksimov, 21… Az orosz mondások nagy szótára

    állítom. bontsa ki Az alvás állapotáról (gyermekek beszédében vagy felnőttek beszélgetésében a gyerekekkel). II int. bontsa ki Altatódal részeként használják. Efremova magyarázó szótára. T. F. Efremova. 2000... Modern szótár Orosz nyelvű Efremova

    baji- ainki, változhatatlanság... Orosz helyesírási szótár

    baji- megváltoztathatatlan... Az orosz nyelv helyesírási szótára

    Intl., in funkt. skaz. \u003d Bai Bai (II jel) ... enciklopédikus szótár

    baji- int.; in func. skaz. = viszlát 2) … Sok kifejezés szótára

    baji- ba / tinta / és között ... Morfémikus helyesírási szótár

    Könyvek

    • Bainki, Tokmakova I.P. Ebben a könyvben altatódalokat olvashat, vagy akár énekelhet is babájának. Vágd ki a könyvet...
    • Bainki (2006-os szerk.), Irina Tokmakova. Ebben a könyvben altatódalokat olvashatsz vagy akár énekelhetsz babádnak. Kivágott könyv. ISBN:5-9524-2404-X…

    Hozzuk létre saját többoldalas regisztrációs oldalunkat a szabványos wp-signup.php helyett.

    NÁL NÉL normál telepítés wordpress oldal regisztráció (engedélyezés, jelszó-visszaállítás) a wp-login.php fájlt adja ki.

    • /wp-login.php - engedélyezés
    • /wp-login.php?action=register - regisztráció
    • /wp-login.php?action=lostpassword - jelszó visszaállítása

    A wp-login.php fájlban külön feltételek vonatkoznak a több webhelyre. Tehát, ha több webhelyen a /wp-login.php?action=register elemre kattint, a WordPress átirányít a /wp-signup.php oldalra. Sok témában nem tűnik túl vonzónak az oldal, ezért elkészítjük saját magunkat.

    A hálózat fő oldala

    Alapértelmezés szerint a WordPress megnyitja a regisztrációs oldalt (wp-signup.php) a web fő domainjén (webhelyén). Lehetőség van azonban arra, hogy a hálózat minden egyes webhelyéhez külön regisztrációs oldalt készítsenek, még akkor is, ha azok eltérő témájúak. Figyelembe vesszük azt az esetet, amikor a hálózat minden oldalának van saját regisztrációs oldala, de ugyanazt a témát használják, és az oldalak csak nyelvben különböznek egymástól. Ha különböző témákat használ, több kódra lesz szükség.

    functions.php?

    Nem. Úgy tűnik, ennek a fájlnak a neve minden WordPress-cikkben szerepel. Esetünkben, figyelembe véve azt a tényt, hogy a regisztrációs funkcionalitást több webhelyre tervezték, célszerű áthelyezni azokat a MU-bővítményekre, amelyek bármelyik webhely megnyitásakor betöltődnek.

    Lírai kitérő

    Érdemes megjegyezni, hogy a MU-bővítmények a normál beépülő modulok előtt és a WordPress mag teljes betöltése előtt töltődnek be, így egyes függvények meghívása végzetes hibákhoz vezethet a PHP-ben. Ennek a "korai" betöltésnek megvannak a maga előnyei. Tegyük fel, hogy bármelyik témán belül nem lehet ragaszkodni bizonyos műveletekhez, amelyek még azelőtt működnek, hogy a functions.php fájl betöltődik a témából. Példa erre a Jetpack bővítmény jetpack_module_loaded_related-posts formátumú műveletei (a related-posts a modul neve), amellyel nyomon lehet követni a Jetpack modulok tevékenységét. Ez a művelet nem „csatolható” a témafájlból, mert a művelet már a téma betöltése előtt elindult – a bővítmények a témák előtt töltődnek be. Megtekintheti a WordPress betöltési sorrendjének általános képét a kódex Műveletreferencia oldalán.

    Fájlsorrend

    Az MU bővítmények tetszőleges számú fájlt és bármilyen struktúrát tartalmazhatnak, amely logikusnak tűnik. Én egy ilyen hierarchiát követek:

    |-mu-plugins |-|-load.php |-|-|-selena-network |-|-|-|-regisztráció |-|-|-|-|-plugin.php |-|-|-| -|-... |-|-|-|-jetpack |-|-|-|-|-plugin.php

    A load.php fájlban a hálózatunkhoz szükséges összes "plugin" csatlakoztatva van:

    // Fordítóprogramok betöltése az összes kiegészítőhöz load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // A hálózati regisztrációhoz WPMU_PLUGIN_DIR szükséges. "/selena-network/signup/plugin.php"; // Más bővítményekhez // WPMU_PLUGIN_DIR szükséges ...

    A beépülő modulok mappái a selena-network mappában vannak tárolva, mindegyiknek megvan a saját plugin.php fájlja, amelyet a load.php fájlba is beépítünk. Ez rugalmasságot és lehetőséget biztosít bizonyos dolgok gyors letiltására és engedélyezésére.

    Regisztrációs oldal URL-je

    A wp_signup_location szűrő a regisztrációs oldal címének meghatározására szolgál. A wp-login.php fájlban található, és felelős a wp-signup.php fájlra való átirányításért.

    Case "register" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); kilépés;

    Adjuk hozzá a függvényünket a mu-plugins/selena-network/signup/plugin.php fájlhoz, amely megadja a regisztrációs oldal címét az aktuális oldalon:

    Függvény selena_network_signup_page ($url) ( return home_url () . "/signup/"; ) add_filter ("wp_signup_location", "selena_network_signup_page", 99);

    A selena_network egy előtag, amelyet a webhelyemen lévő MU-bővítményeken belüli összes funkció nevében használok az ütközések elkerülése érdekében. Ezt a saját egyedi előtagjával kell helyettesíteni. Adjon hozzá 99-es szűrőprioritást, mert egyes bővítmények, például a bbPress és a BuddyPress felülírhatják ezt a címet a sajátjaikkal (az MU-bővítmények korábban töltődnek be, mint a hagyományos bővítmények, lásd fent). Ne feledje, hogy a network_site_url() helyett a home_url() függvényt használjuk, hogy a látogató ugyanabban a tartományban maradjon. Bármely URL használható címként.

    Oldal létrehozása

    Most a szokásos felületen keresztül létrehozunk egy oldalt site.com/signup/ címmel, a gyermektéma mappában pedig egy sablont új oldal- page-signup.php . A „regisztráció” szó helyett egyedi azonosítót is használhat.

    Az új sablonon belül meg kell hívni a selena_network_signup_main() függvényt, amely megjeleníti a regisztrációs űrlapot.

    Érdemes megjegyezni, hogy az egész folyamat a sablonokkal nem kötelező, helyette létrehozhat saját rövid kódot, amely a selena_network_signup_main() függvényt is meghívja.

    wp-signup.php és wp-activate.php

    Most hozzunk létre egy függvényt, amely megjeleníti a regisztrációs űrlapot. Ehhez másolja a wp-signup.php és wp-activate.php fájlokat a WordPress gyökérkönyvtárából a mu-plugings/selena-network/signup/ mappába (és ne felejtse el beilleszteni a mu-plugins/selena-network mappába /signup/plugin.php) . A további fájlkezelések leírása rendkívül nehéz és hosszú, ezért ezeket Önnek kell elvégeznie. Csak leírom, hogy pontosan mit kell tenni, és közzéteszem forrás fájlok a projektedről:

    1. A fájl elejéről távolítson el minden követelményt, függvényhívást és egyéb, a függvényeken kívüli kódot.
    2. Nevezze át az összes függvényt egyedi előtagok hozzáadásával a nevekhez.
    3. Csomagolja be a wp-signup.php kód alsó részét a selena_network_signup_main függvénybe, és írja be a globális $active_signup-ot a legelején; .
    4. Cserélje ki az elrendezést sajátjára a megfelelő helyeken.

    A wp-activate.php fájlban ugyanezt kell tennie:

    1. Távolítson el minden kódot a függvényeken kívül, csomagolja be az elrendezést egy külön függvénybe.
    2. Módosítsa az elrendezést, ahol szükséges.

    A wp-activate.php fájl felelős a fiókaktiválási oldalért. A regisztrációs oldalhoz hasonlóan ehhez is külön sablont kell készíteni, amelyen belül a wp-activate.php fájlból kell meghívni a függvényt.

    Aktiváló e-mailek küldése

    A regisztrációs oldal e-mailt küld a látogatónak a fiók aktiválásához szükséges linkkel. Alapértelmezés szerint ezt az ms-functions.php fájl wpmu_signup_user_notification() függvénye kezeli. Funkcionalitása funkciójához kölcsönözhető. Azért kell abbahagynia ennek a funkciónak a használatát, mert fiókaktiváló linket küld a wp-activate.php webhelyről. Ezt a funkciót a wpmu_signup_user_notification szűrővel „kikapcsolhatja”, ha false értéket ad meg (ha ez nem történik meg, az aktiváló levél kétszer kerül elküldésre, ok, valójában két különböző betű).

    Függvény armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // A wpmu_signup_user_notification() függvényből származó kód wp_mail($user_email, wp_specialchars_decode($subjecters), $ssage($subjecters), ; return false; ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

    Ennek eredményeként a Selena témában a regisztrációs oldal sokkal tisztább és rendezettebb lett.

    Következtetés

    Az interneten sok más, nem túl helyes módszer létezik ugyanerre - Apache átirányítások, AJAX űrlapok, amelyek Java Script nélkül nem működnek, stb. Nem igazán tetszett ez az egész, ezért megpróbáltam olyan helyesen csinálni, mint lehetséges a saját webhelyemen.

    Megjegyzem, óvatosan szerkessze a fájlokat, és próbáljon meg túlságosan eltérni az eredetitől, hogy a jövőben, ha a WordPress módosítja a wp-signup.php és a wp-activate.php fájlokat, könnyebben összehasonlítható legyen. hogy megtalálják a változásokat.

    Ne felejtsd el megnézni forrás a fent leírt összes funkciót annak érdekében, hogy teljes mértékben megértsük, mi és hogyan történik a kódon belül.

    Bónusz. Spammer elleni védelem

    Még a legkisebb WordPress webhelyeket is gyakran bombázzák a spam regisztrációk. A botok szűrésére végtelen feltételeket lehet írni, sokszor inkább mesterséges intelligenciát próbálni létrehozni 🙂 Multisite esetén sokat segített az Apache-ban szokásos átirányítás, amivel a /wp-signup.php megnyitásakor kértem a 404 kiadását. és /wp-acitvate.php (nem vagyok Apache beállítási szakértő, ezért lehet, hogy a szabályaim nem túl helyesek).

    RewriteEngine on RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # WordPress KEZDÉSE # Alapértelmezett WordPress szabályok :) # ... # WordPress VÉGE

    Ui.: Megpróbálok a lehető legrészletesebben leírni néhány harmadik féltől származó dolgot, mert amikor elkezdtem, néha nem volt senki, aki sok mindent felszólított és elmagyarázott. Azt is hiszem, hogy az ilyen apró tippek más anyagokkal kapcsolatban arra késztetnek valakit, hogy valami újat tanuljon, és bővítse tudásterületét. RewriteRule bejegyzések használata reguláris kifejezések, egyáltalán nem bonyolultak, például a ^ szimbólum egy sor elejét jelenti.