Kā izveidot savu reģistrācijas lapu pakalpojumā WordPress vairākās vietnēs. Iesniedziet veidlapu bez atkārtotas ielādes, izmantojot jQuery AJAX reģistrācijas veidlapas izvadi

Jūs esat paveicis labu sākumu, taču pārslēgšanas paziņojums valodā userLanguage() vienkārši nešķiet pareizs no objektorientētā perspektīvas:

Klasei ar nosaukumu Valoda ir jāatspoguļo viena valoda, kas ir pietiekami vispārīga, lai atbilstu visiem gadījumiem: tomēr šobrīd neatkarīgi no tā, kādu valodu tā pārstāv, visu to definīcijas ir iestrēgušas vienā metodē.

Vai tas ir kopjams? Nav īsti, nē. Šobrīd jums ir divas valodas, kuras, manuprāt, jūs zināt. Tomēr, ja kādreiz vēlaties to tulkot citā valodā (iespējams, izmantojot citu rakstzīmju kopu, radīsies problēmas ar vietu failā, faila pareizu saglabāšanu un citu lietotāju nodrošināto tulkojumu sapludināšanu jūsu vietnei.

Par to, vai izmantot datubāzes, abstraktas klases utt.: Jūs varētu vēlēties, lai gan ir arī citi risinājumi.

1. risinājums: vienkāršs konfigurācijas fails

parse_ini_file() ir ļoti spēcīgs mazs rīks, kas dara tieši to, ko jūs gaidāt. Izmantojot vienkāršu failu, piemēram, šo, ko mēs izsauksim en.ini:

PAGE_TITLE = Manas vietnes lapas nosaukums HEADER_TITLE = Manas vietnes galvenes nosaukums SITE_NAME = Mana vietne SLOGAN = Mans sauklis šeit HEADING = Virsraksts MENU_LOGIN = Pieteikties MENU_SIGNUP = Reģistrēties MENU_FIND_RIDE = Atrast braucienu MENU_ADD_RIDE = Pievienot braucienu MENU_LOGOUT = Atteikties

Varat vienkārši izmantot: parse_ini_file("en.ini"), lai atgrieztu masīvu tieši tāpat kā jūsu slēdža priekšrakstā, ko citiem (neprogrammētājiem) būs daudz vieglāk lasīt un rakstīt jūsu vietā. Un, ja jūs turpinātu nosaukt failus ar šo stilu, jūs varētu reducēt userLanguage() uz kaut ko līdzīgu:

Publiskā funkcija userLanguage() ( $file = "/path/to/language/config/" . $this->UserLng . ".ini"; if(!file_exists($file)) ( //Handle Error ) return parse_ini_file( $fails);

2. risinājums: abstraktā klase

Tā kā jūsu masīvs pamatā darbojas kā ieguves metodes, abstraktajā valodu klasē ir jābūt visiem nepieciešamajiem valodas komponentiem, piemēram:

Interfeisa valoda (publiskā funkcija getPageTitle(); publiskā funkcija getHeaderTitle(); publiskā funkcija getSiteName(); publiskā funkcija getSlogan(); publiskā funkcija getHeading(); publiskā funkcija getMenuLogin(); publiskā funkcija getMenuSignup(); publiskā funkcija getMenuFindRide() publiskā funkcija getMenuAddRide();

Lai gan interfeiss ir mazs, tā ieviešana var radīt lielu failu, lai gan tas varētu būt skaidrāks nekā masīva stils:

Klase angļu valoda ievieš valodu ( public function getHeaderTitle() ( atgriež "Manas vietnes galvenes virsraksts"; ) public function getHeading() ( atgriež "Heading"; ) // utt... )

Alternatīva

Varat arī apvienot šos stilus un izmantot vienu valodu ar getter metodēm, kas piekļūst šim masīvam, t.i.:

Klases valoda ( privātā $languageArray; privātā $userLanguage; publiskā funkcija __construct($language) ( $this->userLanguage = $language; $this->languageArray = self::userLanguage(); ) privāta statiska funkcija userLanguage() ( $ file = "/path/to/language/config/" . $this->userLanguage ".ini" return $this->languageArray["PAGE_TITLE"] ) publiskā funkcija getHeaderTitle() (atgriež $this->languageArray["HEADER_TITLE"]; ) //etc... )

Kas nodrošinās priekšrocības no abiem. Tomēr personīgi, ja vien jūs neplānojat tuvākajā nākotnē pievienot vairāk valodu, es uzskatu, ka risinājums Nr. 2 jums būtu vislabāk piemērots.

Mēs izveidojam savu reģistrācijas lapu vairākām vietnēm, nevis standarta wp-signup.php.

Tipiskā WordPress instalācijā reģistrācijas lapu (pieteikšanās, paroles atiestatīšana) izvada fails wp-login.php.

  • /wp-login.php — autorizācija
  • /wp-login.php?action=register — reģistrācija
  • /wp-login.php?action=lostpassword — paroles atiestatīšana

Ir atsevišķi nosacījumi vairākām vietnēm failā wp-login.php. Tātad, sekojot saitei /wp-login.php?action=register vairākās vietnēs, WordPress novirzīs uz lapu /wp-signup.php. Daudzas tēmas neļauj lapai izskatīties īpaši pievilcīgai, tāpēc mēs to veidosim paši.

Galvenā tīkla vietne

Pēc noklusējuma WordPress atver reģistrācijas lapu (wp-signup.php) tīkla galvenajā domēnā (vietnē). Tomēr katrai tīkla vietnei varat izveidot atsevišķu reģistrācijas lapu, pat ja tām ir dažādas tēmas. Mēs izskatīsim gadījumu, kad visām tīkla vietnēm ir sava reģistrācijas lapa, taču tiek izmantota viena un tā pati tēma un vietnes atšķiras tikai pēc valodas. Ja izmantojat dažādas tēmas, jums būs jāraksta vairāk koda.

Funkcijas.php?

Nē. Šķiet, ka šis faila nosaukums ir minēts katrā rakstā par WordPress. Mūsu gadījumā, ņemot vērā, ka reģistrācijas funkcionalitāte ir paredzēta vairākām vietnēm, ir lietderīgi to iekļaut MU spraudņos, kas tiek ielādēti, atverot jebkuru vietni.

Liriska atkāpe

Ir vērts atzīmēt, ka MU spraudņi tiek ielādēti pirms parastajiem spraudņiem un pirms WordPress kodola pilnīgas ielādes, tāpēc dažu funkciju izsaukšana var izraisīt fatālas kļūdas PHP. Šādai “agrīnai” iekraušanai ir arī savas priekšrocības. Pieņemsim, ka jebkurā motīvā nevar pievienot dažas darbības, kas tiek aktivizētas pat pirms funkcijas.php faila ielādes no motīva. Piemērs tam ir darbības no Jetpack spraudņa formā jetpack_module_loaded_related-posts (related-posts ir moduļa nosaukums), ar kuru palīdzību ir iespējams uzraudzīt Jetpack moduļu darbību. Šai darbībai nav iespējams “piesaistīt” no motīva faila, jo darbība jau ir aktivizēta pirms motīva ielādes - spraudņi tiek ielādēti pirms motīviem. Kodeksa lapā Darbības atsauce varat apskatīt vispārējo WordPress ielādes secības attēlu.

Failu secība

MU spraudņi var saturēt jebkuru failu skaitu un jebkuru struktūru, kas jums šķiet loģiska. Es pieturos pie kaut kā šāda hierarhijas:

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

Fails load.php satur visus mūsu tīklam nepieciešamos “spraudņus”:

// Ielādēt tulkojumus visiem papildinājumiem load_muplugin_textdomain ("selena_network", "/selena-network/languages/"); // Lai reģistrētos tīklā, nepieciešams WPMU_PLUGIN_DIR. "/selena-network/signup/plugin.php"; // Citiem spraudņiem // ir nepieciešams WPMU_PLUGIN_DIR ...

Selena-tīkla mapē tiek saglabātas spraudņu mapes, katrai no tām ir savs spraudnis.php, ko mēs iekļaujam mapē load.php. Tas sniedz jums elastību un iespēju ātri izslēgt un ieslēgt lietas.

Reģistrācijas lapas adrese

Lai norādītu reģistrācijas lapas adresi, izmantojiet filtru wp_signup_location. To var atrast failā wp-login.php, un tas ir atbildīgs par novirzīšanu uz wp-signup.php.

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

Pievienosim savu funkciju mu-plugins/selena-network/signup/plugin.php, kas atgriezīs pašreizējās vietnes reģistrācijas lapas adresi:

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

selena_network ir prefikss, ko savā vietnē izmantoju visu funkciju nosaukumos MU spraudņos, lai izvairītos no sadursmēm. Tas ir jāaizstāj ar savu unikālo prefiksu. Filtra pievienošanas prioritāte ir 99, jo daži spraudņi, piemēram, bbPress un BuddyPress, var pārrakstīt šo adresi ar savu (MU spraudņi tiek ielādēti agrāk nekā parastie spraudņi, skatiet iepriekš). Ņemiet vērā, ka mājas_url() tiek izmantots network_site_url() vietā, lai apmeklētājs būtu tajā pašā domēnā. Jebkuru URL var izmantot kā adresi.

Lapas izveide

Tagad izveidosim lapu ar adresi site.com/signup/, izmantojot parasto interfeisu, un bērna motīva mapē mūsu jaunās lapas veidne ir page-signup.php. Vārda "reģistrēšanās" vietā varat izmantot unikālu ID.

Jaunajā veidnē ir jāizsauc funkcija selena_network_signup_main(), kas parādīs reģistrācijas veidlapu.

Ir vērts atzīmēt, ka viss veidnes process nav obligāts, un tā vietā varat izveidot savu īskodu, kas izsauks arī funkciju selena_network_signup_main().

wp-signup.php un wp-activate.php

Tagad izveidosim funkciju, kas parādīs reģistrācijas veidlapu. Lai to izdarītu, kopējiet failus wp-signup.php un wp-activate.php no WordPress saknes uz mu-plugings/selena-network/signup/ (un neaizmirstiet tos savienot iekšā mu-plugins/selena-network /signup/plugin.php) . Turpmākās manipulācijas ar failiem ir ārkārtīgi grūti un ilgi aprakstītas, tāpēc tās būs jādara pašam. Es tikai aprakstīšu, kas tieši ir jādara, un publicēšu sava projekta avota failus:

  1. Faila sākumā noņemiet visus prasīt , funkciju izsaukumus un citus kodus ārpus funkcijām.
  2. Pārdēvējiet visas funkcijas, pievienojot nosaukumiem unikālus prefiksus.
  3. Aptiniet wp-signup.php koda apakšējo daļu funkcijā selena_network_signup_main un pašā sākumā ierakstiet globālu $active_signup; .
  4. Pareizajās vietās nomainiet izkārtojumu ar savu.

Vietnē wp-activate.php jums jādara apmēram tas pats:

  1. Noņemiet visu kodu ārpus funkcijām, ietiniet izkārtojumu atsevišķā funkcijā.
  2. Mainiet izkārtojumu vietās, kur nepieciešams.

Fails wp-activate.php ir atbildīgs par konta aktivizācijas lapu. Tāpat kā reģistrācijas lapai, tai ir jāizveido atsevišķa veidne, kuras iekšpusē ir jāizsauc funkcija no faila wp-activate.php.

Aktivizācijas vēstuļu sūtīšana

Reģistrācijas lapa apmeklētājam nosūta e-pastu ar saiti konta aktivizēšanai. Pēc noklusējuma to veic funkcija wpmu_signup_user_notification() no faila ms-functions.php. Jūs varat aizņemties tās funkcionalitāti savām funkcijām. Iemesls, lai izvairītos no šīs funkcijas izmantošanas, ir tas, ka tā nosūta konta aktivizācijas saiti no wp-activate.php. Varat “izslēgt” šo funkciju, izmantojot filtru wpmu_signup_user_notification, atgriežot tai false (ja tas nav izdarīts, aktivizācijas vēstule tiks nosūtīta divas reizes, labi, faktiski divi dažādi burti).

Funkcija armyofselenagomez_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // ... // Kods no funkcijas wpmu_signup_user_notification() wp_mail($user_email, wp_specialchars_decode($subject,me) ; return false ) add_filter("wpmu_signup_user_notification", "armyofselenagomez_wpmu_signup_user_notification", 10, 4);

Līdz ar to Selēnas tēmas reģistrācijas lapa sāka izskatīties daudz tīrāka un glītāka.

Secinājums

Internetā ir daudz citu ne pārāk korektu veidu, kā darīt to pašu - Apache redirects, AJAX formas, kas nedarbosies bez Java Script utt. Man tas viss īsti nepatika, tāpēc mēģināju to izdarīt tikpat pareizi kā iespējams manā vietnē.

Atzīmēju, ka faili ir rūpīgi jārediģē un jācenšas pārāk neatkāpties no oriģinālajiem, lai turpmāk, ja WordPress mainīs wp-signup.php un wp-activate.php failus, būtu vieglāk salīdzināt viens ar otru, lai atrastu izmaiņas.

Neaizmirstiet apskatīt visu iepriekš aprakstīto funkciju pirmkodu, lai pilnībā saprastu, kas un kā notiek koda iekšienē.

Bonuss. Aizsardzība pret surogātpasta izplatītājiem

Pat mazākās WordPress vietnes bieži nomoka surogātpasta reģistrācija. Var rakstīt bezgalīgus nosacījumus botu filtrēšanai, bieži vien vairāk kā mēģinājums radīt mākslīgo intelektu :) Daudzvietņu gadījumā man ļoti palīdzēja regulāra pāradresācija Apache, ar kuras palīdzību es prasīju 404 atverot / wp-signup.php un /wp-acitvate.php (es neesmu Apache konfigurēšanas eksperts, tāpēc mani noteikumi var nebūt īsti pareizi).

RewriteEngine vietnē RewriteBase / RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # BEGIN WordPress # Mēs nepieskaramies WordPress noteikumiem pēc noklusējuma :) # ... # END WordPress

P.S. Es cenšos pēc iespējas detalizētāk aprakstīt dažas trešās puses lietas, jo, kad es sāku, dažreiz nebija neviena, kas daudz ko ieteiktu un izskaidrotu. Es arī uzskatu, ka šādi nelieli padomi par citiem materiāliem mudinās kādu apgūt ko jaunu un paplašināt savu zināšanu jomu. RewriteRule ierakstos tiek izmantotas regulāras izteiksmes, tās nemaz nav sarežģītas, piemēram, simbols ^ nozīmē rindas sākumu.

Sludinājumi

Lielai daļai vietņu ir reģistrācijas veidlapa, lai lietotāji varētu reģistrēties, un tādējādi viņi var gūt labumu no sava veida privilēģijām vietnē. Šajā rakstā mēs redzēsim, kā izveidot reģistrācijas veidlapu PHP un MySQL.

Mēs izmantosim vienkāršus tagus, kā arī izmantosim tabulas tagu, lai izstrādātu tīmekļa lapu Sign-Up.html. Sāksim:

Saraksts 1: pierakstīšanās.html

Pieteikšanās

Reģistrācijas forma
Vārds
E-pasts
Lietotājvārds
Parole
Apstipriniet paroli



1. attēls:

Sing-in.html tīmekļa lapas apraksts:

Kā redzams 1. attēlā, ir reģistrācijas veidlapa, kurā tiek prasīti daži dati par lietotāju. Šie ir parastie dati, kurus jebkura vietne pieprasa saviem lietotājiem vai apmeklētājiem izveidot un ID un paroli. Mēs izmantojām tabulas tagu, jo, lai tīmekļa lapā parādītu veidlapas laukus sakārtotā formā, kā jūs tos varat redzēt 1. attēlā. Tas izskatās tik vienkārši, jo mēs tajā vēl neizmantojām CSS stilu. Tagad izmantosim CSS stilus un saistīsim CSS stila fails ar sing-up.html tīmekļa lapu.

Saraksts 2: style.css

/*CSS fails reģistrēšanās tīmekļa lapai*/ #body-color( background-color:#6699CC; ) #Sign-Up( background-image:url("sign-up.png"); background-size: 500px 500px background-repeat: no-repeat: margin-down: 450px; font-weight:bold; font-size:20px;

3. saraksts: saiti style.css ar vietni sign-up.html



2. attēls:

Faila style.css apraksts:

Ārējā CSS failā mēs izmantojām dažus stilus, kas jums varētu izskatīties jauni. Tā kā mēs izmantojām attēlu fonā un iestatījām to tīmekļa lapas centrā. Kas ir kļuvis viegli lietojams, izmantojot html div tagu. Tā kā mēs izmantojām trīs div tagu ID. #button, #sing-up un #body-color, un mēs tiem pielietojām visus CSS stilus, un tagad jūs varat redzēt 2. attēlu, cik tas izskatās skaisti un pievilcīgi. Tajā varat izmantot daudzus citus CSS stilus, piemēram, 2D un 3D CSS stilus. Tas izskatīsies skaistāk, nekā izskatās tagad.

Pēc visiem šiem vienkāršajiem darbiem mēs tagad izveidosim datu bāzi un tabulu, lai saglabātu visus datus jauno lietotāju datu bāzē. Pirms mēs sākam izveidot tabulu, mums jāzina, ko mēs prasām no lietotāja. Veidojot veidlapu, mēs izveidosim tabulu atbilstoši reģistrācijas veidlapai, kuru varat redzēt 1. un 2. attēlā.

3. saraksts: vaicājums tabulai MySQL

IZVEIDOT TABULU Vietnes lietotāji (lietotāja ID int(9) NOT NULL auto_increment, pilns vārds VARCHAR(50) NOT NULL, lietotājvārds VARCHAR(40) NOT NULL, e-pasts VARCHAR(40) NOT NULL, nodod VARCHAR(40) NOT NULL, KEY(us) PRIMARY );

3. uzraksta apraksts:

Viena lieta, kas jums jāzina: ja jums nav MySQL iespējas, lai izmantotu šo vaicājumu, sekojiet manam iepriekšējam rakstam par . no šīs saites jūs varēsiet saprast uzstādīšanu un prasības. Un kā mēs to varam izmantot.

3. saraksta vaicājumā mēs izmantojām visas lietas, kas mums nepieciešamas reģistrācijas veidlapai. Tā kā ir e-pasta, pilna vārda, paroles un lietotājvārda mainīgie. Šie mainīgie saglabās lietotāja datus, kurus viņš/viņa ievadīs reģistrācijas veidlapā 2. attēlā, lai reģistrētos.

Pēc visiem šiem darbiem mēs strādāsim ar PHP programmēšanu, kas ir servera puses programmēšanas valoda. Tāpēc ir jāizveido savienojums ar datu bāzi.

4. saraksts: datu bāzes savienojums

4. uzraksta apraksts:

Mēs izveidojām savienojumu starp datu bāzi un mūsu tīmekļa lapām. Bet, ja nezināt, vai tas darbojas vai ne, izmantojiet vēl vienu lietu pēdējā 5. pārbaudes sarakstā.

Saraksts 5: datu bāzes savienojamības savienojuma pārbaude

5. apraksta saraksts:

5. sarakstā es tikko mēģināju jums parādīt, ka varat pārbaudīt un apstiprināt savienojumu starp datu bāzi un PHP. Un vēl viena lieta, mēs neizmantosim 5. saraksta kodu savā reģistrācijas vietnē. Jo tas ir tikai tāpēc, lai jūs saprastu, kā varat pārbaudīt MySQL savienojumu.

Tagad mēs uzrakstīsim PHP programmēšanas lietojumprogrammu, lai vispirms pārbaudītu lietotāja pieejamību un pēc tam saglabātu lietotāju, ja tas ir jauns vietnes lietotājs.

6. saraksts: connectivity-sign-up.php

Connectivity-sign-up.php apraksts

Šajā PHP lietojumprogrammā es izmantoju vienkāršāko veidu, kā izveidot tīmekļa lapu reģistrācijas lietojumprogrammu. Kā redzat, vispirms mēs izveidojam savienojumu, piemēram, sarakstu 4. Un pēc tam mēs izmantojām divas funkcijas, pirmā funkcija ir SignUP(), ko izsauc if paziņojums no pēdējās lietojumprogrammas, kur tā vispirms apstiprina reģistrēšanās nospiešanu. pogu. Ja tas tiek nospiests, tā izsauks funkciju SingUp, un šī funkcija izmantos vaicājumu SELECT, lai iegūtu datus un salīdzinātu tos ar lietotāja vārdu un e-pastu, kas pašlaik ir ievadīts no lietotāja. Ja lietotājvārds un e-pasts jau ir iekļauti datu bāzē, tas paziņos atvainojos, ka esat jau reģistrēts

Ja lietotājs ir jauns, jo tā pašreizējais lietotājvārds un e-pasta ID nav datu bāzē, tad If priekšraksts izsauks NewUser (), kur tiks saglabāta visa jaunā lietotāja informācija. Un lietotājs kļūs par tīmekļa lapas daļu.



3. attēls

3. attēlā lietotājs ievada datus, lai reģistrētos, ja lietotājs saskaņā ar datu bāzes ierakstiem ir vecs šīs tīmekļa lapas lietotājs. Tātad tīmekļa lapā tiks parādīts ziņojums, ka lietotājs jau ir reģistrēts, ja lietotājs ir jauns, tāpēc tīmekļa lapā tiks parādīts ziņojums, ka lietotāja reģistrācija ir pabeigta.



4. attēls:

Tā kā mēs ievadījām datus reģistrācijas veidlapā (4. attēls), saskaņā ar datubāzi, kuru lietotājvārdu un e-pasta adresi ievadījām reģistrācijas veidlapā, tas jau ir datu bāzē. Tāpēc mums vajadzētu izmēģināt jaunu lietotājvārdu un e-pasta adresi, lai reģistrētos ar jaunu ID un paroli.



5. attēls

5. attēlā tas apstiprina, ka lietotājs ir ievadījis lietotājvārdu un e-pasta id. Abi nav iekļauti datu bāzes ierakstos. Tātad tagad tiek izveidots jauns ID un parole, un lietotājs var izmantot savu jauno ID un paroli, lai nākamreiz pieteiktos.

Secinājums:

Šajā rakstā mēs uzzinājām vienkāršāko veidu, kā izveidot reģistrēšanās vietni. Mēs arī uzzinājām, kā tā darbojas ar datu bāzi, ja mēs izmantojam PHP un MySQL. Es mēģināju sniegt jums pamatzināšanas par reģistrēšanās tīmekļa lapas funkcionalitāti. Kā tas darbojas aizmugurē un kā mēs varam mainīt tā izskatu priekšpusē. Par jebkuru jautājumu nevilcinieties un komentējiet.

Ļauj izmantot vienu WordPress instalāciju vairākām vietnēm vienlaikus. Šajā gadījumā katra vietne datu bāzē iegūst savas tabulas ar unikālu prefiksu.

Tabulas ar reģistrēto lietotāju datiem ir kopīgas visām tīkla vietnēm. Tas ir neapšaubāms pluss, un, reģistrējoties vienreiz, varat piekļūt vairākām vietnēm. Turklāt katrā vietnē vienam kontam var būt dažādas tiesības. Piemēram, vienā vietnē lietotājs var būt redaktors, bet citā - administrators.

Tipiskā WordPress instalācijā reģistrācijas, pieteikšanās un paroles atiestatīšanas lapu izvada fails wp-login.php.

  • wp-login.php - autorizācija
  • wp-login.php?action=register — reģistrācija
  • wp-login.php?action=lostpassword — paroles atiestatīšana

Vairāku vietņu režīmā WordPress kodols sāk darboties nedaudz savādāk, un, sekojot saitei wp-login.php?action=register, notiks novirzīšana uz wp-signup.php. Šī ir jūsu tīkla reģistrācijas lapa, kas pēc noklusējuma tiek piegādāta kopā ar WordPress.

Papildus parasto lietotāju kontu reģistrēšanai varat tajā izveidot arī jaunu vietni, ja galvenais administrators ir iespējojis šo funkciju tīkla iestatījumos (Tīkla administrators → Iestatījumi → Tīkla iestatījumi).

Lielākajā daļā tēmu reģistrācijas lapa neizskatās īpaši labi. Daudzas tēmas izmanto CSS ietvarus, piemēram, Bootstrap un savas pielāgotās klases, lai veidotu dažādu lapu elementu stilu, tāpēc ir grūti uzrakstīt vienu HTML, kas būtu piemērots visiem.

Bet nevajag izmisumā, ja lapa izskatās nesakopta. Fails wp-signup.php ir lieliska lieta sākumā, kad jums nav laika strādāt ar katru vietnes detaļu — varat koncentrēties uz citām svarīgākām lapām un saturu.

Kad esat gatavs izveidot savu reģistrācijas lapu, wp-signup.php ir labs piemērs, kas palīdz izprast WordPress piedāvāto funkciju klāstu, lai apstrādātu un apstiprinātu lietotāja ievadi un izveidotu jaunus kontus.

Galvenā tīkla vietne

Pēc noklusējuma WordPress atver reģistrācijas lapu (wp-signup.php) tīkla galvenajā domēnā (vietnē). Tomēr katrai tīkla vietnei varat izveidot reģistrācijas lapas, pat ja tām ir motīvi.

Mēs apsvērsim gadījumu, kad visas tīkla vietnes izmanto vienu un to pašu tēmu, bet katrai no tām ir reģistrācijas lapa. Vietnes atšķiras pēc valodas (angļu un krievu), tāpēc reģistrācijas lapa tiks parādīta vietnes “dzimtajā” valodā. Ja vietnēs tiek izmantotas dažādas tēmas, viss būs atkarīgs no tā, kādas tēmas tās ir, vai tām būs piemērots viens un tas pats izkārtojums (lieliska situācija, kas var mudināt apvienot visas tēmas), vai arī ir vērts lapas izstrādāt atsevišķi.

Alternatīva functions.php

Failu secība

MU spraudņi var saturēt jebkuru failu skaitu un struktūru, kas jums šķiet loģiska. Es pieturos pie kaut kā šāda hierarhijas:

| mu-plugins | | load.php | | selena-network | | | pierakstīšanās | | | | plugin.php | | | ... | | | jetpack | | | | spraudnis.php

Fails load.php ietver tulkojumus un visus nepieciešamos “spraudņus”:

// Notiek tulkojumu ielāde MU spraudņiem load_muplugin_textdomain("selena_network", "/selena-network/languages/"); // Reģistrācijas lapas funkcionalitātei ir nepieciešams WPMU_PLUGIN_DIR . "/selena-network/signup/plugin.php"; // Vēl viens spraudnis // nepieciešams WPMU_PLUGIN_DIR ...

Spraudņu mapes tiek glabātas selena tīkla direktorijā. Katram ir savs spraudnis.php, ko mēs iekļaujam failā load.php. Tas sniedz jums elastību un iespēju avārijas gadījumā nekavējoties izslēgt un ieslēgt atsevišķas darba projekta sastāvdaļas.

Reģistrācijas lapa

Izdomājuši, kur un kā rakstīsim kodu, varam pāriet uz reģistrācijas lapas izveidi.

Izmantojot parasto saskarni, izveidosim lapu ar adresi example.org/signup/. Varat izmantot jebkuru URL, kas šķiet piemērots jūsu projektam.

Pārvirziet uz nepieciešamo reģistrācijas lapu

Lai WordPress uzzinātu par mūsu jauno reģistrācijas lapu un tieši uz to novirzītu, noklikšķinot uz saites “Reģistrēties”, tiek izmantots wp_signup_location filtrs. To var atrast vietnē wp-login.php, un pēc noklusējuma tas ir atbildīgs par novirzīšanu uz wp-signup.php.

Lieta "reģistrs" : if (is_multisite()) ( wp_redirect(apply_filters("wp_signup_location", network_site_url("wp-signup.php"))); iziet; // ...

Kā jūs atceraties, pēc noklusējuma reģistrācijas lapa tiek atvērta tīkla galvenajā domēnā. Tāpēc šeit tiek izmantots network_site_url().

Pievienosim mūsu apdarinātāju filtram vietnē mu-plugins/selena-network/signup/plugin.php, kas atgriezīs pašreizējās vietnes reģistrācijas lapas adresi:

Funkcija selena_network_signup_page($url) ( return home_url("reģistrēšanās"); ) add_filter("wp_signup_location", "selena_network_signup_page", 99);

selena_network ir prefikss, ko savā vietnē izmantoju visu funkciju nosaukumos MU spraudņos, lai izvairītos no sadursmēm. Tas ir jāaizstāj ar savu unikālo prefiksu. Filtra pievienošanas prioritāte ir 99, jo daži spraudņi, piemēram, bbPress un BuddyPress var pārrakstīt šo adresi ar savu (MU spraudņi tiek ielādēti agrāk nekā parastie spraudņi, skatiet iepriekš).

Lūdzu, ņemiet vērā, ka tiek izmantots home_url(), kas atšķirībā no network_site_url() atgriež pašreizējās vietnes adresi, nevis tīkla galvenās vietnes adresi.

Funkcionalitāte wp-signup.php

Fails wp-signup.php satur lielu skaitu funkciju un koda. Lai redzētu kopainu, varat izmantot koda locīšanu. Parasti angļu valodā to sauc par “koda locīšanu”.

Faila pašā sākumā no 1. līdz 80. rindiņai (versijā 4.1.1) tiek veiktas dažādas pārbaudes un lapas “sākums” tiek izvadīts, izmantojot get_header() .

Pēc tam tiek deklarētas daudzas metodes, un pirms sākam strādāt ar tām, ir vērts saprast, ko katra funkcija dara. Daudzi no tiem bieži izmanto citas funkcijas ar prefiksu wpmu_, kuras visas ir deklarētas failā wp-includes/ms-functions.php. Šo sadaļu ir grūti saprast, pašam neredzot kodu. Tālāk sniegts īss galveno funkciju apraksts gadījumā, ja rodas kādas grūtības.

  • wpmu_signup_stylesheet() — reģistrācijas lapā izvada papildu CSS.
  • show_blog_form() - lauki vietnes reģistrācijai (adrese, nosaukums, redzamība meklētājprogrammām).
  • validate_blog_form() - apstiprina ievadīto vietnes adresi un nosaukumu, izmantojot wpmu_validate_blog_signup() .
  • show_user_form() - lauki lietotāja reģistrācijai (pieteikšanās un e-pasta adrese).
  • validate_user_form() — ievadītās pieteikšanās un e-pasta adreses pārbaude. pastu, izmantojot wpmu_validate_user_signup() .
  • signup_another_blog() - lauki jaunu vietņu reģistrēšanai, izmantojot show_blog_form() lietotājiem, kuri jau ir reģistrējušies vietnē.
  • validate_another_blog_signup() - pārbauda vietnes adresi un nosaukumu, izmantojot validate_blog_form() .
  • signup_user() ir galvenā funkcija reģistrācijas lapas lauku parādīšanai.
  • validate_user_signup() - pārbauda pieteikumvārdu un e-pasta adresi. pastu, izmantojot validate_user_form() .
  • signup_blog() - lauki adreses, nosaukuma un vietnes redzamības ievadīšanai (otrais reģistrācijas solis), izmantojot show_blog_form() .
  • validate_blog_signup() - pārbauda pieteikšanos, e-pasta adresi. e-pasts, adrese un vietnes nosaukums.

Pašā wp-signup.php faila apakšā (no 646. rindas versijā 4.1.1) ir galvenā reģistrācijas lapas loģika, kurā tiek izmantotas visas iepriekš aprakstītās metodes. Šī koda daļa nav iekļauta funkcijā. Beigās tiek izsaukts get_footer().

Kopējiet wp-signup.php funkcionalitāti

Tālāk tiks aprakstīta procedūra wp-signup.php kopēšanai MU spraudņos un izmaiņu veikšanai “dakšā”. Tas var nešķist labākais veids, kā rīkoties. Tā vietā varat rakstīt savas funkcijas no jauna, lai apstiprinātu un parādītu veidlapas, izmantojot klases, nevis parastās funkcijas. Manuprāt wp-signup.php jau ir visa mūsu lapai nepieciešamā loģika, atliek tikai veikt nelielas izmaiņas.

Kad WordPress tiek atjaunināts, arī wp-signup.php ik pa laikam mainās, taču tas nenozīmē, ka būs jāsinhronizē sava “dakša” ar katru laidienu. Wp-signup.php funkcijas būtībā nodarbojas tikai ar HTML izvadi, datu verifikāciju, kontu un vietņu izveidi, un metodes ar prefiksu wpmu_, kas deklarētas ms-functions.php.

Izveidosim funkciju, kas lapā parādīs reģistrācijas veidlapu. Lai to izdarītu, kopējiet wp-signup.php no WordPress saknes uz mu-plugings/selena-network/signup/ . Savienosim to iekšā mu-plugins/selena-network/signup/plugin.php).

Nepieciešams WPMU_PLUGIN_DIR. "/selena-network/signup/wp-signup.php";

Noņemsim visas nepieciešamās un nevajadzīgās pārbaudes jau no kopētā faila sākuma. Versijā 4.1.1 tas ir viss kods no 1. līdz 80. rindiņai.

Tagad esam gatavi izveidot galveno funkciju reģistrācijas veidlapas parādīšanai. Lai to izdarītu, mēs pārsūtīsim visu loģiku no 646. rindas līdz pašām faila beigām uz funkciju, ko sauc par selena_network_signup_main. Pašās beigās mēs noņemsim divus papildu aizvērumus

(722. un 723. rinda), kā arī get_footer() izsaukums.

Jaunizveidotajā selena_network_signup_main() pašā sākumā mēs deklarēsim globālo active_signup mainīgo, ko izmanto visas pārējās metodes no šī faila. Un pievienosim izsaukumu notikumam before_signup_form, kuru noņēmām jau pašā faila sākumā.

Funkcija selena_network_signup_main() ( globālā $active_signup; do_action("before_signup_form"); // ... )

Tagad atliek tikai mainīt izkārtojumu visās vietās, kur tas ir nepieciešams un reģistrācijas lapa ir gatava.

Reģistrācijas veidlapas izvade

Šeit ir vismaz divas iespējas. Ērtāks veids ir izveidot īskodu un ievietot to lapā, izmantojot parasto redaktoru.

// Izveidojiet īskodu network_signup add_shortcode("network_signup", "selena_network_signup_main");

Otrā iespēja ir izveidot lapas veidni page-signup.php bērna motīva mapē. Vārda "reģistrēšanās" vietā varat izmantot lapai piešķirto unikālo ID. Veidnes iekšpusē pievienojiet nepieciešamo izkārtojumu un izsauciet selena_network_signup_main() pareizajā vietā.

Rezultātā mana reģistrācijas lapa izskatījās daudz labāka un tīrāka.

Aktivizācijas lapa

Pēc noklusējuma WordPress sadala reģistrācijas procesu Multisite divos posmos – aizpildot veidlapu vietnē un aktivizējot savu kontu, noklikšķinot uz e-pastā nosūtītās saites. Kad esat aizpildījis iepriekšējā sadaļā izveidoto veidlapu, WordPress nosūta e-pastu ar īsiem norādījumiem un saiti konta aktivizēšanai.

Fails wp-activate.php, kas atrodas WordPress saknes direktorijā, ir atbildīgs par aktivizācijas lapas parādīšanu. wp-activate.php var arī pilnībā mainīt. Process ir līdzīgs tam, ko mēs jau veicām ar wp-signup.php.

Izmantojot parasto saskarni, izveidosim lapu example.org/activate/. Adresei izmantojiet jebkuru URL, kas jums šķiet piemērots.

Kopēsim failu wp-activate.php uz mūsu MU spraudņiem un savienosim to ar mu-plugins/selena-network/signup/plugin.php.

Nepieciešams WPMU_PLUGIN_DIR. "/selena-network/signup/wp-activate.php";

Iekšpusē nav daudz satura, atšķirībā no wp-signup.php. Fails veic vienu darbību - tas aktivizē kontu, ja tiek saņemta pareizā atslēga, un parāda ziņojumu par kļūdu vai veiksmīgu darbības pabeigšanu.

Noņemsim visas nevajadzīgās pārbaudes un prasības - no 1. līdz 69. rindiņai WordPress 4.1.1. Pašās beigās mēs noņemsim get_footer() izsaukumu. Atlikušo saturu mēs pārsūtīsim uz funkciju selena_network_activate_main().

Interesanti atzīmēt, ka šeit pirms WordPress (wp-load.php) ielādes tika deklarēta konstante WP_INSTALLING. Tā klātbūtne liek WordPress neielādēt spraudņus.

Tāpat kā reģistrācijas lapas gadījumā, atliek tikai labot izkārtojumu, kur nepieciešams. Varat arī mainīt parādīto ziņojumu tekstu (šajā gadījumā neaizmirstiet pievienot savu MU spraudņu teksta domēnu visām tulkotāju funkcijām; pēc noklusējuma tas nekur nav instalēts).

Gatavo funkciju var izmantot iepriekš izveidotā lapā, izmantojot īskodu vai atsevišķu veidni bērna motīvā.

Aktivizācijas vēstules ar pareizām saitēm

Aktivizācijas lapa ir gatava darbam, taču WordPress par to nezina un joprojām sūtīs aktivizācijas e-pastus ar saiti uz wp-activate.php. Atšķirībā no wp-signup.php, nav filtra, kas ļautu mainīt adresi. Tā vietā jums ir jāraksta sava funkcija, kas nosūtīs e-pastus ar pareizajām saitēm.

Kad reģistrācijas lapā aizpildāt un iesniedzat veidlapu, WordPress izsauc wpmu_signup_ lietotājs() vai wpmu_signup_ emuārs() atkarībā no reģistrācijas veida. Abas funkcijas izveido jaunu ierakstu wp_signups tabulā, aizpildot to ar nepieciešamo saturu, kas ietver konta aktivizācijas atslēgu.

Pēc tam atkarībā no funkcijas tiek izsaukta wpmu_signup_ lietotājs _notification() vai wpmu_signup_ emuārs _notification() . Abām funkcijām ir līdzīga funkcionalitāte – tās ģenerē un nosūta e-pastu ar aktivizācijas saiti, taču izmanto dažādus argumentus. Abiem ir filtri, lai “pārtvertu” notikumu.

If (! apply_filters("wpmu_signup_user_notification", $lietotājs, $lietotāja_e-pasts, $key, $meta)) atgriež false;

Lai aktivizētu kontus ar emuāra izveidi:

If (! apply_filters("wpmu_signup_blog_notification", $domēns, $ceļš, $nosaukums, $lietotājs, $lietotāja_e-pasts, $key, $meta)) (atgriež false; )

Atliek tikai uzrakstīt savus apdarinātājus, kuros sūtīt vēstules caur wp_mail() , un pašās beigās noteikti atgriezt false, lai WordPress nenosūta aktivizācijas vēstuli divreiz - viens ir tavs, otrs pēc noklusējuma vēstule ar saiti uz wp-activate.php .

Funkcija selena_network_wpmu_signup_user_notification($user, $user_email, $key, $meta = array()) ( // Ģenerējiet burta galveni, tekstu un galvenes // ... // Nosūtiet vēstuli vai pievienojiet Cron uzdevumu, lai nosūtītu vēstule wp_mail($user_email , wp_specialchars_decode($subject), $message, $message_headers // Dodiet false, lai WordPress nenosūtītu aktivizācijas e-pastu divreiz return false("wpmu_signup_user_notification", "selena_network_user_1";_notification); ;

Ja sūtāt e-pastus, izmantojot SMTP serveri, vai arī reģistrāciju skaits ir ļoti liels, apsveriet iespēju nesūtīt e-pastus uzreiz. Tā vietā varat pievienot Cron uzdevumus, izmantojot WordPress Cron.

Mēs slēdzam piekļuvi failiem wp-signup.php un wp-activate.php

Pēc savu reģistrācijas un aktivizācijas lapu izveides, iespējams, vēlēsities aizvērt "oriģinālus". Piemēram, ja reģistrācijas lapā ir papildu lauki, kas ir jāaizpilda. Turklāt daudzas WordPress vietnes ir pakļautas surogātpasta reģistrācijai.

Varat atrisināt divas problēmas ar vienu darbību, lūdzot Apache atgriezt 404, ja mēģināt atvērt šīs lapas. Lai to izdarītu, konfigurācijas failam vai .htaccess ir jāpievieno pāris papildu RewriteRules.

RewriteEngine vietnē RewriteBase / # Regulāro izteiksmju zināšanas nekad nebūs liekas :) RewriteRule ^wp-signup\.php - RewriteRule ^wp-activate\.php - # SĀKT WordPress # Mēs nepieskaramies WordPress noteikumiem pēc noklusējuma :) # .. # END WordPress

Secinājums

Šai un daudzām citām WordPress “problēmām” internetā ir daudz risinājumu. Piemēram, lai izveidotu reģistrācijas un aktivizācijas lapas, daži iesaka pārrakstīt sākotnējos wp-signup.php un wp-activate.php. To nevajadzētu darīt, jo, atjauninot WordPress, jūs zaudēsit visas failos veiktās izmaiņas, kā arī nevarēsit pārbaudīt kodola integritāti, izmantojot .

Izstrādājot jebkuru papildinājumu, motīvu vai risinājumu, jums vajadzētu veltīt nedaudz laika, lai saprastu, kas notiek WordPress. Šim nolūkam ir daudz noderīgu atkļūdošanas rīku.

P.S.

Lai jauniem lietotājiem automātiski piešķirtu dažādas lomas, varat izmantot vairāku vietņu lietotāju pārvaldības spraudni.

Ja pēc raksta izlasīšanas rodas jautājumi vai grūtības reģistrācijas un aktivizēšanas lapu izveides laikā, atstājiet komentāru un mēs noteikti atbildēsim.

27.03.2015 27.03.2015

WordPress izstrādātājs. Mīl kārtību it visā un jaunu instrumentu izpratni. Iedvesmojoties no Symfony komponentu arhitektūras.

  • Sveiki visi lasītāji!

    Šodien mēs apskatīsim diezgan svarīgu tēmu, ko izvirzījuši daudzi darba devēji, proti, daudzvalodību.

    Ko es domāju, runājot par daudzvalodību? Nu, droši vien katrs mans cienījamais lasītājs ne reizi vien ir redzējis foršus portālus un starp visu informācijas burzmu atrada divas mazas ikoniņas, galvenokārt ar labi zināmām zvaigznēm un svītrām un pazīstamajiem balti-zili-sarkanajiem karodziņiem. Protams, noklikšķinot uz viena no tiem, krievu runa, pie kuras esam pieraduši, pārvērtās buržuāziskajā valodā () vai otrādi. Bet vai esat kādreiz jautājis sev, kā tas viss tiek darīts? Nu, tieši par to es runāšu.

    Uzreiz teikšu, ka, lai strādātu ar materiālu, kas šeit tiks prezentēts, jums būs nepieciešams PHP atbalsts vismaz 4.39.

    Tātad, kā jūs zināt, mūsu vietnes saturs ir sadalīts dinamiskā un statiskā. Mēs uzskatām, ka statisks saturs ir kaut kas tāds, kas darbības laikā nemainīs savu nozīmi (atslēgvārdi, kļūdu teksts un citas muļķības). Šeit mēs sāksim. Bet analizēsim, kā tieši mēs mainīsim noteiktas teksta vērtības valodu. Es ceru, ka neviens neieteica izmantot izņēmumus, jo tas ir tik neracionāli, ka nevar būt iracionālāk. Tā vietā es iesaku izmantot konstantes (par datu veidiem lasiet vietnē php.net). Mēs vienkārši deklarēsim funkciju vārdu, kas atkarībā no valodas nozīmes attiecīgi mainīs savu nozīmi. Kā mēs to darām? Jā, tāpat kā visi pārējie, izveidosim divus (piemēram) dažādus failus, kuru nosaukumiem būs šāda shēma:

    Language_map.php;

    Kā jau sapratāt, vārda "valoda" vietā mēs aizstāsim vērtību, kas raksturo šo valodu. Mūsu gadījumā mēs izmantosim divu rakstzīmju valodas kodu (ru, en, ua, pl utt.).

    Nu, mēs esam izdomājuši teoriju, tagad izmantosim savas zināšanas praksē. Mēs izveidojam divus failus. Es izveidoju failus ar tulkojumu angļu un krievu valodā, un tas, kā jūs to izveidojat, ir jūsu gaumes ziņā.

    Fails: en_map.php

    Fails: ru_map.php

    Tātad, manuprāt, nekas sarežģīts nav, un viss rakstītais ir pakļauts banālākajiem RHP likumiem. Pirmkārt, mēs pārbaudām, vai konstantes jau ir deklarētas, tad mēs tās nedeklarējam;

    Šī bija vieglākā daļa, tagad pāriesim pie grūtākas tēmas - dinamiskās daļas tulkošanas.

    Pieņemsim, ka jums ir liela portāla sistēma vai vienkārša vietne, bet jūs, talantīgs programmētājs, kurš pārzina visus PHP aspektus, neesat tās īpašnieks, bet gan izgatavojāt to pēc pasūtījuma. Īpašnieks ir pilna laika dizainers (), kuram nav ne jausmas, ne jausmas par programmēšanas smalkumiem, bet viņam ir tikai viena vēlme, lai viss darbotos, un viņš var visu mainīt. Kas attiecas uz visu, tas ir cits stāsts, taču mēs joprojām ļausim viņam mainīt vietnes valodas parametrus (lai ar ko bērns sevi izklaidētu).

    Bet atkal atgriežoties pie dilemmas par “Dizaineriem un programmētājiem”, vēlreiz jāpiemin, ka šādai vietnei jābūt pilnībā, tā teikt, “What You See Is What You Get”, citādi tas nav iespējams. Tāpēc centīšos darīt visu, lai programmētājos tas neradītu nervozus tikumus un varētu apmierināt dizainerus (domāts lietojamība).

    Tātad, prom ar tukšiem vārdiem un uz priekšu uz Berlīni. Sāksim ar teoriju. Tātad, kā mēs atšķirsim dinamiska satura valodas, kuras labākajā gadījumā tiek noņemtas, mainītas vai vēl sliktāk? Šeit nav iespējams izmantot konstantes, tāpēc ko mums vajadzētu darīt?

    Es jau dzirdu domas, kas peld ap tevi.

    Personīgi, mēģinot šo iedzīvināt, sākumā darīju to visneracionālākajā veidā, proti, lai tulkotu rakstus, tabulā sadalīju divos laukus, kas bija pakļauti tulkošanai (tas ir, izveidoju field_eng un field_ru) šādā veidā jau lielie galdi pārvērtās par vienkārši nepieklājīgi milzīgiem. Tāpēc es sāku meklēt alternatīvu, un ticiet vai nē, es to atradu. Vai jau jūties siltāks, jā, drīz tiksim pie karstākās daļas. Es atradu izeju no šīs situācijas, un tagad es plānoju jums to izskaidrot, un tas, vai jūs to sapratīsit vai nē, būs atkarīgs no jums. Pirmkārt, vienosimies par visām detaļām.

    Pirmkārt, mums ir nepieciešama tabula, kurā tiks ievietoti tulkošanas dati. Pieņemsim, ka mums ir tabula `raksti`, kurā tiks ievietoti daži raksti, un tiem vajadzētu būt, teiksim, diviem tulkojumiem, bet ir nepieciešams viens. Mūs interesēs tikai divi galvenie, mūsu gadījumā, lauki: nosaukums, apraksts. Tekstu strukturēsim šādi:

    <%eng%>Raksta versija angļu valodā <%ru%>Raksta versija krievu valodā

    Pēc tam rindiņa kā šo divu struktūru kombinācija tiks pievienota tabulas "raksti" laukiem "nosaukums" un "apraksts".

    Šī metode sastāvēs no pirmā sākuma atslēgvārda meklēšanas (piemēram,<%eng%>), tad mēs atradīsim pirmo noslēdzošā atslēgvārda atkārtojumu. Bet mēs nedrīkstam aizmirst, ka mums ir nepieciešams ne tikai ieraksts, bet arī struktūras garums. Pirmajā gadījumā mēs pievienosim struktūras garumu pirmajam atvēršanas struktūras gadījumam, otrais solis būs noslēdzošās struktūras garuma atrašana. Bet tu jautā:<Как же мы получим текст?>.

    Izmantojot funkciju substr(). Pirmais parametrs būs pats teksts, otrs būs sākuma struktūras garums, bet trešais (visinteresantākais) būs atšķirība starp noslēguma struktūras pirmo reizi un teksta garumu. Jā, es saprotu, ka tas nav tik vienkārši, bet tas ir jāsaprot. Tāpēc tagad mēs to darīsim praksē. Es izveidoju funkciju, kas iezīmēs tekstu starp taustiņu tagiem. Tam būs nepieciešami trīs parametri: parsējamais teksts, parsēšanai izmantojamā valoda un struktūru masīvs.

    ","<%/","%>")) ( $start_tag=strpos($data,$delimiters.$lang.$delimiters)+ strlen($delimiters.$lang.$delimiters); $count=(strpos($data,$delimiters.$lang.$ norobežotāji)-strlen($data)) $data=substr($data,$start_tag,$count) if(trim($data)=="")( $data=NOT_ENTERED; ) return $data ) ?>

    Kā redzat, tas ir diezgan garš un var apjukt, bet, ja jūs to nesaprotat, tad tā nav liela problēma, jo funkcija uzskaitīšanai jau pastāv, un nedaudz tālāk es apskatīšu citu metodi tāds pats mērķis. Jā, un neaizmirstiet kaut kur deklarēt valodas konstanti NOT_ENTERED, kas tiks piešķirta funkcijas rezultātam, ja teksta garums ir nulle.

    Tātad, mēs to izdomājām ar brutālu spēku, bet tagad mūs gaida jauns uzdevums, sastādīt vienkāršu tekstu īpaši formatētā virknē. Šis jau ir daudz vienkāršāk, un, ja zini PHP pietiekami labi, tad var viegli uzrakstīt šādu funkciju, un ja vēl peldi, tad lūdzu ej uz ofisu.

    Algoritms nav sarežģīts un sastāv no visu valodas konstrukciju aizstāšanas vienā rindā. Sākumā slinkuma dēļ es gribēju ierobežot skriptu līdz noteiktam skaitam valodu (tas atvieglo ieviešanu), bet tad es pārdomāju un saņēmu šo:

    ","<%/","%>")) ( if(!is_array($data)) ( die(PARAM_CHECK_ERROR); ) $data=""; $temp=""; $count=0; foreach($data kā $k=>$v) ( if(!is_string($k)) ( break; ) $count++ if($count>1 & $temp=$k) ( die(ERROR_CONSTRUCTION_COUNT); ) $temp=$k $data.=$delimiters.$ k; .$delimiters.$v.$delimiters.$k.$delimiters ) atgriež $data ) ?>

    Nu, šeit es nedaudz paskaidrošu. Funkcija izmanto masīvu kā parametru. Masīva struktūrai jābūt šādai:

    "valodas identifikators"=>"teksts";

    Pēc tam pārbaudām, vai saņemtais parametrs nav masīvs, tad<пока Вася!>.

    Ja tas joprojām ir masīvs, tad, protams, mēs to uzskaitām, un valodas vietā konstrukcijā ievietojam šī asociatīvā masīva elementa atslēgu un teksta vietā, protams, pašu tekstu. , tas ir, mainīgā $v vērtība. Tad mēs apvienojam visus datus vienā rindā. Bet es aizmirsu pieminēt vienu svarīgu detaļu, citiem vārdiem sakot, diezgan lielu teksta daļu. Pirmkārt, pirms cilpas mēs deklarējām trīs mainīgos: dati, temp, skaits;

    Skaitīšanas mainīgais ir cilpas iterāciju skaits, un ar katru nākamo cilpas kārtu skaitītājs palielinās. Datu mainīgais ir nākotnes iegūtā virkne, kurā tiks apvienotas visas valodas konstrukcijas. Bet interesantāki ir mainīgie lielumi un temperatūra. Priekš kam tās domātas? Iespējams, ka lielākā daļa cilvēku jau to uzminēja pēc avota izlasīšanas, bet tiem, kuri vēl nav to izdarījuši<дошло>Es paskaidrošu. Tas tiek darīts, lai pārbaudītu, vai valodas konstrukcija nav atkārtota vairāk nekā vienu reizi. Tāpēc mēs deklarējām skaitīšanas mainīgo. Tā kā tā noklusējuma vērtība ir nulle, mēs pārbaudām, vai cilpa ir izpildīta vismaz vienu reizi, jo, ja mēs to nedarīsim, iznāks kaut kas līdzīgs 2=2 vai 0=0, jo $k vērtība vēl nav mainīts. Tā kā pārbaude tiks ignorēta pirmo reizi, mēs piešķiram vērtību mainīgajam $temp pēc pārbaudes. Tas tiek darīts arī kāda iemesla dēļ. Pirmajā iterācijā viss noritēs labi, bet, ja mēs tomēr piešķirtu vērtību pirms pārbaudes, tad pārbaude veiktu jau minēto pārbaudi (2=2, 3=3 utt.). Tāpēc mēs to darām šādi.

    Tagad, kā loģisks secinājums, mēs izveidosim nelielu vietni, kurā tiks izmantots viss iepriekš minētais:

    ","<%/","%>")) ( $data=substr($data, (strpos($data,$delimiters.$lang.$delimiters)+ strlen($delimiters.$lang.$delimiters)), (strpos($data,$delimiters. $lang.$delimiters)-strlen($data))); if(trim($data)=="") ( $data=NOT_ENTERED; ) return $data ) funkcija compilateLanguageString($data, $delimiters=array( ")<%","%>","<%/","%>")) ( if(!is_array($data)) ( die(PARAM_CHECK_ERROR); ) $data=""; $temp=""; $count=0; foreach($data kā $k=>$v) ( if(!is_string($k)) ( break; ) $count++ if($count>1 & $temp=$k) ( die(ERROR_CONSTRUCTION_COUNT); ) $temp=$k $data.=$delimiters.$ k; .$delimiters.$v.$delimiters.$k.$delimiters ) return $data ) //Neaizmirstiet par<статике>if(!isset($_GET["lang"])) ( setcookie("lang",$_GET["lang"]); header("Atrašanās vieta: index.php?module=home"); ) if(isset( $_COOKIE["lang"])) ( ietver $_COOKIE["lang"]."_map.php"; ) else ( ietver "ru_map.php": ) if(isset($_POST["pievienot"])) ( $description=compilateLanguageString(masīvs($_POST["description_lv"],$_POST["description_ru"])); $nosaukums=compilateLanguageString(masīvs($_POST["titlte_eng"],$_POST["title_ru"])); //Datubāzes pievienošanas process ) echo" "; atbalss" "; atbalss" "; $title=($_SERVER["REMOTE_ADDR"]=="127.0.0.1")? ADMIN_WELCOM: "Sveiki viesi!"; echo $title; atbalss""; atbalss" "; atbalss"":echo" "; $conn_id=@mysql_connect("localhost","root",""); @mysql_select_db("somedatabase"); $q=@mysql_query("ATLASĪT virsrakstu, aprakstu NO `rakstu ROBEŽAS 0.1",$ conn_id) ; if(@mysql_ num_rows($q)==0)( ARTCILES_NOT_FOUNDED; ) else ( $row=@mysql_fetch_array($q); $title=subTextByLang($row["title"],$lang); $ description= subTextByLang($row["apraksts"],$lang");

    ":echo" "; atbalss" "; atbalss" "; atbalss"
    ".ARTICLE_TITLE_TEXT."". $title."
    ".ARTICLE_DESCRIPTION_TEXT."
    ".$apraksts."
    "; ) @mysql_close($conn_id); //Tas nav tik slikti, tagad jums ir jāizveido veidlapa, lai pievienotu raksta atbalsi"
    "; atbalss" "; atbalss" "; atbalss" "; atbalss" "; atbalss" "; atbalss" "; atbalss" "; atbalss" "; atbalss"
    ".ARTICLE_TITLE_TEXT (EN):
    ".ARTICLE_TITLE_TEXT."
    (RU):
    "; atbalss" "; atbalss"
    apraksts angļu valodā
    "; atbalss" "; atbalss"
    "; atbalss"
    "; ?>

    ". "Krievu apraksts

    Nu tas tā. Tomēr skriptā ir viens “bet” autors nevar pievienot vairāk par divām tulkošanas iespējām, izmantojot veidlapu. Es tāpat kā citi autori neteikšu, ka es to darīju jūsu apmācībai, jo godīgi sakot, kad es nonācu līdz šim brīdim, mana galva mani gandrīz vairs netraucēja, tāpēc es to atstāju uz jūsu pleciem . Ticiet man, ir daudz iespējamo risinājumu, un es ļoti ceru, ka jūs to atradīsit. Par funkcijām nevaru 100% apgalvot, ka tās neizraisīs kļūmi, bet liktenīgām kļūdām nevajadzētu būt, lai gan visādi var gadīties. Bet es esmu vairāk nekā 60% pārliecināts, ka sintakse ir bojāta, jo es nepārbaudīju piemērus. Bet te tev tiešām labs treniņš, jo “blusu” ķeršana ir ļoti noderīga nodarbe!