Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Programi
  • Chatty section php. Kreiranje funkcija s promjenjivim brojem argumenata

Chatty section php. Kreiranje funkcija s promjenjivim brojem argumenata

Članak koji govori o HTML-u element sekcije iz kategorije sekcija.

Svrha elementa sekcije

Element odjeljka se koristi za kreiranje odjeljka u dokumentu koji zajedno grupiše neki sadržaj predmeta. Za svaki odeljak u dokumentu treba navesti njegov naziv (temu). To se obično radi sa zaglavljima (h1-h6 elementi).

Naslov odjeljka

Sadržaj odjeljka...

Elementi presjeka se obično koriste u sljedećim situacijama:

  • da označite sekcije unutar sekcije. Na primjer, da biste označili poglavlja u članku, kartice u dijaloškom okviru, odjeljke u disertaciji itd.
  • da grupišete više sekcija u jedan tematska grupa... Na primjer, za grupisanje Najnovije vijesti na web stranici, komentari na članak itd.

Dakle, element odjeljka treba koristiti samo za neki sadržaj ako ima naslov i dio je nečeg drugog.

Korištenje elementa sekcije

Na primjer, uzmite u obzir isječak koda stranice koji sadrži članak s komentarima. Svaki od komentara koje je korisnik postavio na stranici sadrži kompletan sadržaj i stoga se može smatrati elementom članka. Ali, u isto vrijeme, svi komentari predstavljaju određenu tematsku grupu, pa se stoga mogu smjestiti u element odjeljka, tj. dati element grupiraće sve ove komentare na stranici zajedno.

Naslov članka

Komentari (1)

Zaglavlje komentara

Tekst komentara...

Zaglavlje komentara

Tekst komentara...

Naslov članka Komentari Naslov komentara Naslov komentara

Na primjer, razmislite o korištenju elemenata odjeljka za kreiranje odjeljaka unutar elementa članka:

Naslov knjige

Prvo poglavlje

Poglavlje drugo

Treće poglavlje

Dodatak A

Dodatak B

Gornji primjer će imati sljedeći nacrt:

Naslov knjige Prvo poglavlje Drugo Poglavlje treće Dodatak A Dodatak B

Ograničenja upotrebe elementa sekcije

Element sekcije u HTML 5 nije generički element za grupisanje sadržaja, tj. ne bi trebalo da se koristi za umotavanje sadržaja koji vam se sviđa. Njegova glavna svrha je dodati semantiku dokumentu i kreirati njegov okvir.

Kada autor treba da grupiše sadržaj samo da bi stilizovao ili manipulisao njime u JavaScriptu, najbolje je da koristi element div. Element div, za razliku od elementa sekcije, ne dodaje semantiku dokumentu i ne učestvuje u kreiranju njegovog obrisa (okvira).

Razlika između elemenata odjeljka i članka

Elementi odjeljka i članka, iako na prvi pogled izgledaju vrlo slični, imaju različita semantička značenja. Element članak namijenjen je grupiranju sadržaja koji je potpun, samostalan i koji se može gledati odvojeno od ostatka sadržaja stranice. A element odjeljka nosi drugačije semantičko značenje, namijenjen je grupiranju sadržaja koji je sastavni dio nečeg drugog.

Ali kako autor može znati šta je neki sadržaj na stranici? Pogledajmo ovo koristeći primjer isječka članka. Isječak je dio članka i stoga se element odjeljka mora koristiti za grupiranje njegovog sadržaja. Ali isti fragment, već ostavljen kao komentar, predstavljat će nešto cjelovito, cjelovito. Stoga se u ovom kontekstu element članak može koristiti za njegovo grupisanje. Ali, naravno, može se zaključiti, i obrnuto. Stoga, koji element koristiti za grupisanje sadržaja u većini slučajeva ovisi o vašem subjektivnom mišljenju kao autora. Ali najvažnija stvar u ovom pristupu je zadržati odabranu poziciju. Dakle, što je autor dosledniji u kreiranju strukture, to više smisla može da unese u nju.

Bitrix šabloni se mogu podijeliti u nekoliko tipova:
  • Zajednički i složeni predlošci komponenti 2.0
  • Website templates
  • Drugi predlošci entiteta (poštanske poruke, izdanja biltena, web obrasci, generatori izvoza i još mnogo toga)

Predlošci komponenti čak imaju mogućnost korištenja mehanizama za šabloniranje. U principu, možete povezati bilo koji šablonski mehanizam, ali nema pomoćnih alata iz kutije. Ako nekome treba, imam par linkova za nastavke za grančicu i oštricu koji rade i dosta se koriste za sebe u proizvodnji. Ali čak i ovdje bitriksoidi su se izopačili. Predložak se može koristiti samo sa komponentama. Neće funkcionirati povezivanje predloška motora s rendererom predloška stranice ili drugim entitetima, jer tamo nema renderera.

U predlošcima komponenti postoji još jedan neugodan trenutak s njihovim postavljanjem. Komponenta se povezuje jednostavnom konstrukcijom
$ APPLICATION-> IncludeComponent ("bitrix: catalog.section", "template_name",);
Drugi parametar je naziv predloška komponente. Dakle, u zavisnosti od toga različitim uslovima, lokacija ovog predloška može biti na najneočekivanijim mjestima:

  • bitrix / komponente / bitrix / catalog.section / templates / template_name
  • lokalno / komponente / bitrix / catalog.section / templates / template_name
  • bitrix / templates / .default / components / bitrix / catalog.section / template_name
  • bitrix / templates / site_template / components / bitrix / catalog.section / template_name
  • local / templates / .default / components / bitrix / catalog.section / template_name
  • local / templates / site_template / components / bitrix / catalog.section / template_name
  • bitrix / komponente / bitrix / katalog / šabloni / .default / bitrix / catalog.section / template_name
  • local / templates / site_template / components / bitrix / catalog / .default / bitrix / catalog.section / template_name
I nisam naveo sve opcije...

Šablon sajta se može videti kao skup datoteka: header.php, footer.php (da, sajt ih mora imati), description.php ( opis sistema predložak stranice), template_styles.css (stilovi predložaka stranice), direktorij sa predlošcima komponenti i gomilom manje značajnih datoteka. I to je sve. I ni na koji način ne utičete na to, ne činite ništa povodom toga. Nije moguće pokupiti predložak.

O drugim šablonima nema šta da se kaže. Oni se ili jednostavno pohranjuju u bazu podataka u obliku izgleda sa uključivanjem nekih "promjenjivih" podataka, ili je to glupo php fajl, koji obavlja sav posao, od dohvaćanja parametara iz baze podataka do prikaza informacija. Na primjer, možete pogledati YML generator datoteka za tržište. Nema smisla stavljati ga ovdje, jednostavno zato što je dovoljno velik, oko 2k linija. Kome treba proguglaće, leži u /bitrix/modules/catalog/load/yandex_run.php

Priroda datoteke

Kao što je gore postalo jasno, u arhitekturi Bitrixa sve nije baš dobro. Ali Bitrix ima i jedan važniji aspekt arhitekture.
Bitrix je CMS napola fajl. Mnoge stvari kontrolišu neke vrste fajlova:

  • Treba vam stranica - kreirajte datoteku
  • Potreban vam je skup stranica - kreirajte datoteku i uključite komponentu koja radi sa infoblokovima
  • Morate postaviti naslov stranice - uredite datoteku
  • Morate postaviti naslov za sve stranice odjeljka - kreirajte poseban file.section.php u korijenu ovog odjeljka
  • Morate urediti prava - uredite file.access.php
  • Postavke prije inicijalizacije sistema - u datotekama dbconn.php, .settings.php i .settings_extra.php
  • result_modifier.php, component_epilog.php, init.php, .parameters.php, .description.php ....

I ima puno takvih specijalnih datoteka razbacanih po Bitrixu. S jedne strane, to daje određenu fleksibilnost pri radu sa sistemom. S druge strane, može se pretvoriti u agoniju i za programera i za upravitelja stranice. Fajlovi stranica se ponekad pretvaraju u zbrku php koda, rasporeda i komponenti dodataka. Kao rezultat vizuelni urednik može pogrešno raščlaniti ovu datoteku, a kada je uređuje, može lako pobjeći php oznake na nekim mjestima, što će uzrokovati kvar stranice. Kažete - nema potrebe za pisanjem php koda u takve fajlove? Da, znam. Ali Bitrix vas vrlo često i nema alternativu prisiljava na to.
A u glavi morate stalno držati informacije o tome kakve su to datoteke i koje podatke mogu sadržavati. V različite datoteke mora sadržavati različite podatke sa drugačija struktura, i morate ga zapamtiti za svaku opciju. Težak je posao svaki put to tražiti u dokumentaciji.

Pored navedenog

Možete se beskrajno žaliti kako je sve loše uređeno u Bitrixu. Po mom mišljenju, sve ove pritužbe mogu se okarakterisati jednom frazom - "nekako ne do kraja". I zaista, ako odjednom Bitrixoids najave neku značajku, onda je nekako neće potpuno objaviti, neće je dovršiti, nemojte je sjetiti. Ima puno primjera:

  • implementiran ORM - nije dovršen, ne možete ga koristiti u potpunosti
  • napravio autoloader, radi samo u modulima, a ne po standardima
  • omogućio je povezivanje šablona, ​​ali ga ne možete koristiti svuda, a ne u potpunosti
  • itd. itd.

Ukratko, pokušaću da okarakterišem ostale probleme sa kojima se svakodnevno suočavamo.

Admin panel

Ako je neko radio sa admin panelom, napravio svoje stranice u administrativnom dijelu na način na koji Bitrix predlaže, razumjet će me. To je samo pakao. Za one koji nisu upoznati, Bitrix predlaže korištenje nudle datoteke za svaku stranicu. Na primjer, stranica za detaljan pregled naloga u admin panelu koju izvode Bitrix programeri zauzima 4k redaka. Moj IDE počinje da usporava kada gledam sadržaj ove datoteke. Tu imate php, js i html. Pa, barem smo se riješili SQL-a, iako sam siguran da ga ima na drugim administratorskim stranicama.
A šta je spriječilo administrativne stranice da rade sa istim komponentama nije jasno. Jednostavno ne postoji način da prilagodite većinu administratorskih stranica. U slučaju komponenti, to bi se moglo učiniti za kratko vrijeme.
Između ostalog, ljubazni ljudi napravio modul koji će vam pomoći da napravite administrativne stranice

js framework

Bitrix ima js komponentu koja djeluje kao neka vrsta klijentskog okvira. Niko od programera to ne voli iz nekoliko razloga:
  • gotovo je nedokumentovan
  • on je monstruozan
  • u velikoj meri duplira jquery, koji je mnogima poznat

Bitrix ga vrlo često koristi u svojim komponentama, izazivajući time još veći bijes među programerima. Jezgro ove biblioteke u minimiziranom obliku je 85 kb, što je veoma veliko. Nećete moći izbjeći njegovo povezivanje ako želite koristiti sve mogućnosti Bitrixa (kompozit, upravljanje imovinom).

Copy-paste duh

V novije vrijeme sve manje i manje, ali i dalje prilično često, Bitrix pravi nešto za kopiranje i lijepljenje. Ako želite da izmenite rad komponente - copy-paste. Ako želite da kreirate sopstveni predložak za istovar, kopirajte sistemsku kopiju i završite. Ako želite da napravite skoro isti šablon koji imate - kopirajte i zalepite i malo ga promenite. O tome se čak govori i na kursevima za programere početnike. Nemam riječi.

Upravljanje imovinom i CDN

Zaista mi se sviđa način upravljanja resursima u Bitrixu. U principu, moguće je registrovati skup specifičnih "biblioteka". Svaka biblioteka je skup css/js fajlova, koji mogu zavisiti od nekih drugih biblioteka. Ako povežete biblioteku sa stranicom, tada će prije povezivanja sve ovisnosti biti riješene i sve zavisne biblioteke će biti umetnute u stranicu. Čini se da je sve u redu, samo će svaki resurs biti umetnut u obrazac poseban fajl u skriptu ili oznaku veze. I zahvaljujući tome, postoje stranice koje imaju 30-50 skripti i isto toliko povezanih stilskih datoteka.
Sranje-pitanje, rekli su u Bitrixu, i napravili magični štikl koji kombinuje sve ove fajlove u jedan. I bilo je sajtova gde su umesto 50 skripti bile 2, svaka od 300-500 kb. Prije nekog vremena ovo spajanje je radilo sa greškama i spajalo je nekoliko puta iste resurse, ali sada je izgleda popravljeno.
A onda su izašli Bitrixoidi - omogućili su upload svih resursa na CDN server. Koja zauvek pada...
Zatim se pojavio Google Pagespeed Insights, koji je preporučio da se izostavi svi resursi donji dio stranice. A u Bitrixu su opet napravili čarobnu kvačicu, koja glupo izostavlja sve resurse u tijelu, ako nisu označeni posebnim atributom.
Oni takođe distribuiraju minimizirane verzije svojih skripti zajedno sa kutijom, koja se povezuje kada se koristi još jedan čarobni okvir za potvrdu na admin panelu.
Općenito, nema scss-a za vas, nema TypeScript-a. Ako želite pravilno upravljati resursima - nemojte koristiti ugrađeni Bitrix sistem, koristite webpack, koji možete lako sprijateljiti sa Bitrixom.

Više stranica / višejezično

Ovo je vjerovatno najgora glavobolja programera koja se događa od početka proizvoda. Ne možete samo uzeti i napraviti višejezičnu web stranicu. A ako vam treba višejezični direktorij sa različite cijene i valute - pretvara se u brašno, za koje također morate platiti urednu svotu (morat ćete izdvojiti da biste kupili dodatnu licencu za sljedeću jezičnu verziju stranice).
Ako kreirate višejezičnu i viševalutu stranicu, budite spremni na činjenicu da će se Bitrix vrlo agresivno oduprijeti tome. Postavke više lokacija su decentralizirane u cijeloj administrativnoj oblasti. Svaki entitet u admin panelu ima svoju zavisnost od jezičke verzije stranice. Neki entiteti možda uopće ne podržavaju ovisnosti o mjestu/jeziku, a neki imaju samo nedvosmisleno vezivanje za jezik, tako da ćete morati duplicirati ovaj entitet i zatim ga podržati.
V osnovna verzija Da bi infoblok radio na nekoliko jezika, morat ćete kreirati duplikat ovog infobloka. Ali u praksi, niko to ne radi i pokušava da smisli sopstvene načine za centralno skladištenje jednog entiteta, šireći njegove atribute zavisne od jezika na druga skladišta.
Ne možete postaviti zadani jezik za lokalizaciju. Ako imate jezičku varijablu koja opisuje frazu na ruskom, a ova jezička varijabla nije na engleskom, tada će engleska stranica prikazati prazan red, i na to se ne može utjecati ni na koji način (u mnogim slučajevima bilo bi moguće ostaviti ruski izraz kako ne bi bilo praznina).

Mehanizam upravljanja pravima

Veoma smo lukavi sa ovim podsistemom. Često je teško shvatiti zašto ste dodijelili prava za pregled entiteta, ali ih korisnik ne može koristiti. Na primjer, da biste dodijelili pravo na uređivanje infobloka, morate dati pristup /bitrix / admin direktoriju, dodijeliti prava za određeni infoblok i dodijeliti prava u glavnom modulu. Potrebno je uraditi previše operacija da bi se dale dozvole za jedan entitet. A ako nema dovoljno prava, onda bez brčkanja po izvornom kodu nećete moći razumjeti zašto.

Konfigurisanje

Bitrix nema centralizovano čvorište koje bi vam omogućilo upravljanje sistemskim postavkama. Postavke su ponovo decentralizirane u cijelom sistemu. Opcije su dostupne u postavkama modula, u postavkama komponenti, u COption (ne premještaju se na admin panel). U admin panelu opcije za jedan modul mogu biti razmaknute 3-4m različite stranice koji se nalaze na potpuno različitim mjestima. urlrewrite se može uređivati ​​preko admin panela! Sada i .settings i.settings_extra. Ponekad je potpuno nejasno koji su od njih prioritetniji, vrlo često nema dovoljno objašnjenja za opcije, nije jasan odnos. Ne postoji izvorni način za dijeljenje konfiguracije između programera.
Postavke mogu biti vrlo nelogične. Ponekad dođe do apsurda ... pogledajte komponentu bigdata - može li nepripremljena osoba to moći prilagoditi?

Integracija sa 1C

Ovo je stavka na listi Bitrix funkcija za koju je dovoljna veliki broj kupaca. Bitrix obećava da će postaviti dvosmernu integraciju sajta sa 1C u 2 klika, koja će trenutno isporučiti sadržaj i dokumente iz jednog sistema u drugi.
Da, zaista jeste, ali uz nekoliko napomena.
Prvo, da biste napravili integraciju iz kutije bez dodatnih napora, potrebno je da uradite sve tačno kako je napisano u Bitrix dokumentaciji - izgradite direktorijum na sajtu prema pravilima koje Bitrix nudi i napravite katalog u 1C koji Bitrix zahtijeva. U idealnom slučaju, kreirajte sve od nule, a onda će vam možda sve raditi iz kutije.
Drugo, Bitrix nije prijateljski sa svim 1C konfiguracijama iz kutije. Vrijedi ga pročitati unaprijed
treće, idealan svet ne može biti. Obično kupac koji želi web stranicu već ima maloprodajni biznis, što znači da već ima 1C, što je ogromna kanta za smeće. I ovo smeće se može baciti na stranicu. A kako sajt ne bi dobio istu kantu za smeće, potrebno je značajno modifikovati mehanizam razmene.
Vrlo često se zahtjevi kupaca uvelike razlikuju od vizije proizvoda koju je formirao Bitrix tim i tada modifikacija mehanizma zamjene može biti prilično skupa, po intenzitetu rada uporediv sa razvojem jedinstvenog modula zamjene za konkretan slučaj.
Stoga, nema potrebe stvarati iluziju da ćete moći lako integrirati stranicu sa 1C. Sve su to intrige marketingaša.

Poboljšanje razmjene sa 1C također je posebna tema. Klasa \ CIBlockCMLImport je odgovorna za organizovanje razmene direktorijuma - 5.7k redova. Jedna od glavnih metoda, koja najčešće zahtijeva proširenje - \ CIBlockCMLImport :: ImportElement, sadrži više od 1k redova. Dovoljno je naslijediti ga jednom, ažurirati proizvod nekoliko puta na duže vrijeme i možete dobiti neradnu razmjenu sa 1C. Stoga programeri često ne ulaze u ovu klasu i pokušavaju nekako ući u proces uvoza koristeći rukovaoce događajima. Rad sa obrađivačima događaja u Bitrixu, posebno u modulu infobloka, također nije baš ugodno iskustvo, makar samo zbog činjenice da događaji istog tipa nisu jednolično raspoređeni, a neki događaji jednostavno nisu dovoljni.
Općenito, ova situacija je tužna kao i prije.

Nedosljednost

Ponekad mi se čini da su programeri različiti moduli oni zapravo ne komuniciraju jedni s drugima. Proučavajući izvorni kod kernela, nailazite na vrlo heterogena rješenja koja bi se mogla izvršiti na istom motoru, ali su iz nekog razloga implementirana na različite načine.
Na primjer, možete uzeti svojstva elemenata infoblokova i korisničkih polja. I jedan i drugi entitet je u stvari dodatno polje za drugi entitet. Ima tip, značenje i opis. Vrijednost je pohranjena u zasebnoj tablici (tabelama) baze podataka, imaju otprilike sličan interfejs za pristup podacima. Pa zašto im ne napraviti isti interfejs?
Krajem marta, modul prodaje je ažuriran na najnoviju verziju, a obećali su i tamo proizvoljna svojstva za narudžbe. Postoji li sada novi, treći interfejs za rad sa proširenim svojstvima entiteta?

Bitrix24

Ovo je generalno posebna tema za razgovor. Na osnovu ovog sistema često nastaje zabuna. Postoje 2 verzije B24 - SaaS i Standlone. Postoji tržište za B24, ali sadrži samo aplikacije za SaaS verziju! Ako imate verziju u kutiji, kupljenu za 200 komada, nećete je moći isporučiti najpopularnije aplikacije, kao konstruktor dokumenata, i općenito ne možete instalirati nijednu aplikaciju sa Bitrix24 marketplacea na svoj Bitrix24. Evo paradoksa.
Umjesto toga, tržište iz regularna verzija... Postoji mnogo više rješenja, ali ona su uglavnom koncentrisana oko upravljanja web stranicama, a ne B24.

Bitrix24, kako su mi rekli u odeljenju tehnička podrška, to je kompletan sistem. Ako ometate rad standardne komponente sistema, onda budite spremni da će ova funkcionalnost prekinuti s narednim ažuriranjima. Bitrix neće računati na vas da finalizirate komponente portala, uprkos činjenici da službeno šalju svoje klijente partnerima

Usput, da se dotjeraju komponente u verzija u kutiji B24 je još jedan problem. Komponente koje generiraju js kod koji koristi ajax za pristup php kod koji generira html + js kao odgovor. Ovo je paklena mješavina u koju zaista ne želite da ronite.

Dokumentacija

Bitrix dokumentacija zaostaje za razvojem proizvoda 1-1,5 godina. Kod je veoma slabo pokriven phpDoc-ovima, i često je komentar ispred klase samo za prikaz, automatski generisan u IDE-u.
Sam stil prezentacije dokumentacije u zvaničnim izvorima često je previše „slobodan“, a sadržaj nekih članaka u dokumentaciji možda nema nikakve veze sa samim Bitrixom.
Kurs programera ima mnogo informacija, ali format u kojem se programer upoznaje sa mogućnostima sistema ne pruža nivo percepcije koji je potreban. Ako odete u Symfony Cookbook, onda je sve raspoređeno na policama, svi potrebni aspekti su opisani ovisno o verziji. Dok u Bitrixu, kurs obuke programera sadrži nije jasno na osnovu čega strukturirane informacije na starom i novom nukleusu, koji se hrani prvo odvojeno, a zatim miješano, od čega početnike boli glava.

Organizacija procesa razvoja

Zbog specifičnosti sistema, nije ga tako lako organizovati pogodan proces razvoj. Ne najviše svježa verzija Business edition (koje je bilo pri ruci) nakon instalacije zauzima, razmislite, skoro 530 megabajta
$ du -s * | sort -nr | cut -f 2- | dok čita a; uradi du -hs $ a; urađeno 523M bitrix 204K upload 64K bitrixsetup.php 56K desktop_app 20K readme.html 20K licence.html 4.0K web . config 4.0K urlrewrite.php 4.0K readme.php 4.0K licence.php 4.0K install.config 4.0K index.php
Dobra polovina ovog volumena su binarni programi i instalateri, koji generalno nisu potrebni za kontrolu verzija. Uopšteno govoreći, uobičajeno je da se ne verzija bitrix kernela. Bitrix programeri, takoreći, sami garantuju integritet kernela, upravljaju zavisnostima verzija različitih modula tokom ažuriranja. Ali ovo odmah nosi barem jedan veliki nedostatak - nemoguće je implementirati potpuno funkcionalan projekat s jednom komandom iz kontrole verzija, morate ga sastaviti u dijelovima: nabavite izvor kernela iz bitrix sigurnosne kopije, a izvor programera iz git-a .
Baza takođe nije u redu. Ako sami možete koristiti migracije tokom razvoja, tada Bitrix ubacuje ažuriranja u bazu podataka koristeći obične skripte koje ne možete kontrolirati. Stoga, tokom ažuriranja, i dalje ćete morati prenositi sigurnosne kopije baze podataka sa centralnog razvojnog hosta na druge programere.
Ljubazni ljudi su, opet, vidjeli alate koji pomažu da se sve ovo organizira, ali nažalost, još uvijek nije moguće natjerati Bitrix da se pridržava ovih pravila.
Zvanično, Bitrix vam omogućava da imate 2 kopije jednog distributivnog kompleta. Jedan je za proizvodnju, drugi za razvoj. Ako imate nekoliko programera na jednom projektu, onda ste, takoreći, izvan zakona) U stvari, dovoljno je da prekinete dolazne i odlazne veze sa / na www.bitrixsoft.com za Bitrix mašinu, a zatim možete prikovati onoliko kopija razvoja koliko želite, oni jednostavno neće moći sami da se ažuriraju.

Kolege

I poslednje pitanje koje bih želeo da se dotaknem.
Zbog činjenice da Bitrix ima nizak prag ulaska, među kompanijama koje pružaju usluge na ovom tržištu ima dosta nekvalifikovanog osoblja. Slučajno sam vidio mnogo različitih projekata tokom svoje karijere (ukupno više od stotinu), izvedenih na 1C-Bitrixu. Sa sigurnošću mogu reći da je 95% njih učinjeno "svinjskim gafom". Vrlo rijetko je bilo projekata u čijem razvoju se osjećao pristup, ali to je bilo samo nekoliko. Ovo je sve veoma tužno.

zaključci

Naravno, ne mogu se uzeti u obzir svi nedostaci u jednom članku. Svaki dan nailazite na neke sitnice koje vam svakodnevno ometaju posao. Ali jednostavno je nemoguće uzeti u obzir sve takve sitnice, a vjerovatno ni na šta.

Kakvi se zaključci ovdje mogu izvući. Bitrix je izuzetno složen sistem zbog činjenice da ima loše osmišljenu arhitekturu, mnoge nedostatke koji nastavljaju da žive u proizvodu dugo vremena. S druge strane, Bitrix je dovoljan jednostavan sistem, što zahtijeva mnogo niži nivo vještina za početak, za razliku od okvira.
Podržavanje ovog proizvoda je veoma nezahvalan zadatak u poređenju sa proizvodima kao što su Symfony, Laravel, Yii. Proizvod veoma voli da stavlja žbicu u točkove i neiskusnih i iskusnih programera, što zauzvrat može uticati na cenu usluga iskusnih programera za Bitrix.

Da li žalim što sam proveo toliko vremena radeći sa ovim sistemom? Radije da nego ne. Bilo bi mudrije potrošiti ovo vrijeme učeći nešto ispravnije i logičnije (što sada aktivno pokušavam). Ali desilo se da na početku mog puta nije bilo nikoga da me uputi na pravi put.

Ako ti - početnik php programer, zatim odaberite Bitrix za proučavanje okvira kao što su Symfony, Laravel, Yii, ZendFramework. Vjerujte mi, isplatit će se kamatama u budućnosti. Nakon što ste savladali bilo koji od ovih okvira, neće vam biti teško da u budućnosti razvijete nešto za Bitrix. Ako nemate izbora, onda proučite Bitrix, ali u slobodno vrijeme bolje je pokušati uroniti u svijet okvira kako bi se mozak pospremio.

Ako ste programer s iskustvom u Bitrixu, ali bez iskustva u drugim okvirima, onda svakako zaronite u drugi svijet, otkrit ćete puno novih i korisnih znanja koje će vam pomoći u pisanju mnogo boljih rješenja za 1C-Bitrix. Pokušajte koristiti rješenja iz drugih okvira u svojim projektima, jer to nije teško učiniti zahvaljujući komponentnom pristupu potonjeg i kompozitora.

Ako ste kupac, onda ne vjerujte Bitrix trgovcima. Ništa neće biti tako lako kao što kažu u Bitrix prezentacijama. I nemojte kriviti svoje programere, oni nemaju nikakve veze s tim. Ako želite stvoriti veliku i složenu internetsku trgovinu na nivou eldorado / mvideo / sportmaster, onda, možda, Bitrix neće biti najbolji izbor.

UPD. Vidi se da su članak pročitali zaposleni u Bitrixu. U odeljku o marketingu napisao sam da su marketinški pozivi napisani u sekciji Arhitektura kursa Bitrix programera. Sada ih nema. Čak su se i zapečatili, očigledno im se žurilo.

Hvala kutu na zapažanju i oštrom oku :)

Tagovi:

Dodaj oznake

Bez obzira koliko PHP koristimo, pojavljuju se neke funkcije za koje nismo ni čuli. Neki od njih bi nam bili od velike koristi. Napravio sam malu listu korisne funkcije koji bi trebao biti u arsenalu svakog PHP programera.

1. Kreiranje funkcija s promjenjivim brojem argumenata

Vjerovatno već znate da nam PHP dozvoljava kreiranje funkcija sa opcionim argumentima. Sada ću pokazati funkciju u kojoj se broj argumenata može mijenjati od slučaja do slučaja.

Ali prvo, sjetimo se kako kreiramo funkcije na uobičajeni način:

// funkcija sa dva opciona parametra function foo ($ arg1 = "", $ arg2 = "") (echo "arg1: $ arg1 \ n"; echo "arg2: $ arg2 \ n";) foo ("zdravo", "svijet"); / * će ispisati: arg1: zdravo arg2: world * / foo (); / * će ispisati: arg1: arg2: * /

Sada da vidimo kako možete napisati funkciju s neograničenim brojem argumenata. Za ovo će se koristiti metoda func_get_args ():

// ne specificiraj nikakve argumente funkcija foo () (// vraća niz proslijeđenih argumenata $ args = func_get_args (); foreach ($ args kao $ k => $ v) (echo "arg". ($ k + 1). " : $ v \ n ";)) foo (); / * neće ništa ispisati * / foo ("zdravo"); / * ispisuje arg1: hello * / foo ("zdravo", "svet", "ponovo"); / * ispisuje arg1: zdravo arg2: svijet arg3: opet * /

2. Korištenje Glob () za pronalaženje datoteka

Nazivi funkcija često su sami po sebi razumljivi. Isto se ne može reći za funkciju glob ().

Ne ulazeći u detalje, njegova funkcionalnost je slična metodi scandir (). Omogućava vam da pronađete potreban fajl po obrascu:

// pronađi sve php datoteke $ files = glob ("*. php"); print_r ($ fajlovi); / * će ispisati: Niz (=> phptest.php => pi.php => post_output.php => test.php) * /

Da biste pronašli fajlove nekoliko tipova, potrebno je da napišete ovako:

// pronaći sve php i txt datoteke $ files = glob ("*. (php, txt)", GLOB_BRACE); print_r ($ fajlovi); / * izlaz: Niz (=> phptest.php => pi.php => post_output.php => test.php => log.txt => test.txt) * /

Također možete odrediti putanju u predlošku:

$ files = glob ("../ images / a * .jpg"); print_r ($ fajlovi); / * izlaz: niz (=> ../images/apple.jpg => ../images/art.jpg) * /

Da biste dobili punu putanju do dokumenta, koristite metodu realpath ():

$ files = glob ("../ images / a * .jpg"); // Primijeni funkciju "realpath" na svaki element niza $ files = array_map ("realpath", $ files); print_r ($ fajlovi); / * će ispisati: Niz (=> C: \ wamp \ www \ images \ apple.jpg => C: \ wamp \ www \ images \ art.jpg) * /

3. Informacije o korištenoj memoriji

Ako pratite količinu memorije koja se troši za rad vaših skripti, onda ćete ih, vjerovatno, češće optimizirati.

U PHP-u postoji moćan alat praćenje iskorištene memorije. V različitim dijelovima učitavanja skripte mogu biti različita. Da biste dobili vrijednost iskorištene memorije u ovog trenutka, trebali bismo koristiti memory_get_usage () metodu. Za fiksiranje maksimalan broj korištenje iskorištene memorije memory_get_peak_usage ()

Echo "Inicijalno:" .memory_get_usage (). "Bytes \ n"; / * Početno: 361400 bajtova * / // dajmo malo opterećenje za ($ i = 0; $ i< 100000; $i++) { $array = md5($i); } // и ещё for ($i = 0; $i < 100000; $i++) { unset($array[$i]); } echo "Final: ".memory_get_usage()." bytes \n"; /* Final: 885912 bytes */ echo "Peak: ".memory_get_peak_usage()." bytes \n"; /* Peak: 13687072 bytes */

4. Informacije o procesoru

Da biste to učinili, trebate koristiti metodu getrusage (). Međutim, imajte na umu da ova funkcija neće raditi na Windowsima.

Print_r (getrusage ()); / * ispisuje niz (=> 0 => 0 => 2 => 3 => 12692 => 764 => 3864 => 94 => 0 => 1 => 67 => 4 => 0 => 0 => 0 => 6269 => 0) * /

Gore navedena slika bit će razumljiva onima koji imaju iskustva u tome sistemska administracija... Za sve ostale nudimo dešifriranje:

  • ru_oublock: broj operacija pisanja bloka
  • ru_inblock: broj operacija čitanja bloka
  • ru_msgsnd: broj poslanih poruka
  • ru_msgrcv: broj primljenih poruka
  • ru_maxrss: maksimalna veličina set bez stranica
  • ru_ixrss: ukupna zajednička memorija
  • ru_idrss: ukupna količina nedijeljenih podataka
  • ru_minflt: broj korištenih memorijskih stranica
  • ru_majflt: broj stranica koje nedostaju
  • ru_nsignals: broj primljenih signala
  • ru_nvcsw: broj prekidača konteksta procesa
  • ru_nivcsw: broj prisilnih prebacivanja konteksta
  • ru_nswap: broj pristupa disku tokom stranica
  • ru_utime.tv_usec: radno vrijeme u korisnički način rada(mikrosekunde)
  • ru_utime.tv_sec: vrijeme provedeno u korisničkom modu (sekunde)
  • ru_stime.tv_usec: vrijeme privilegovanog načina rada (mikrosekunde)
  • ru_stime.tv_sec: vrijeme rada u privilegovanom modu (sekunde)

Da biste saznali koje resurse vašeg procesora koristi skripta, potrebno vam je 'korisničko vrijeme' (vrijeme u korisničkom modu) i 'sistemsko vrijeme' (vrijeme u privilegovanom modu). Rezultat možete dobiti u sekundama i mikrosekundama. Da biste ukupan broj sekundi pretvorili u decimalni broj, trebate podijeliti vrijednost mikrosekundi sa 1 milion i vrijednosti dodati sekunde.

Zbunjen nekako. Evo primjera:

// odmor od 3 sekunde spavanje (3); $ data = getrusage (); echo "Vrijeme korisnika:". ($ podaci ["ru_utime.tv_sec"] + $ podaci ["ru_utime.tv_usec"] / 1000000); echo "Sistemsko vrijeme:". ($ podaci ["ru_stime.tv_sec"] + $ podaci ["ru_stime.tv_usec"] / 1000000); / * izlazi Korisničko vrijeme: 0.011552 Sistemsko vrijeme: 0 * /

Iako je skripti trebalo oko 3 sekunde da se izvrši, procesor nije bio jako opterećen. Činjenica je da kada se pozove (sleep), skripta praktički ne troši procesorske resurse. Općenito, postoji mnogo zadataka koji oduzimaju značajno vrijeme bez korištenja procesora. Na primjer, čekanje na operacije vezane za disk. Dakle, ne koristite uvijek CPU vrijeme u svojim skriptama.

Evo još jednog primjera:

// petlja 10 miliona puta za ($ i = 0; $ i<10000000;$i++) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.424592 System time: 0.004204 */

Skripti je trebalo 1,4 sekunde CPU vremena. U ovom slučaju, vremena sistemskog poziva su općenito niska.

Sistemsko vrijeme je vrijeme koje procesor troši na izvršavanje sistemskih zahtjeva prema kernelu u ime programa. primjer:

$ start = mikrovrijeme (true); // poziva mikrovrijeme svake 3 sekunde dok (mikrovrijeme (true) - $ start< 3) { } $data = getrusage(); echo "User time: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "System time: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* выводит User time: 1.088171 System time: 1.675315 */

Sistemsko vrijeme se sada troši mnogo više nego u prethodnom primjeru. To je sve zahvaljujući metodi microtime () koja koristi sistemske resurse.

Međutim, treba imati na umu da prikazano vrijeme možda nije tačno jer u ovom trenutku, resurse procesora koriste i drugi programi, što može dovesti do male greške.

5. Magične konstante

U PHP-u postoje mnoge magične konstante kao što su broj tekuće linije (__LINE__), putanja datoteke (__FILE__), putanja direktorija (__DIR__), naziv funkcije (__FUNCTION__), naziv klase (__CLASS__), naziv metode (__METHOD__) i prostori imena (__NAMESPACE__) .

Nećemo ih svi uzeti u obzir. Pogledajmo samo par:

// ova skripta ovisi o trenutnoj lokaciji datoteke i // može uzrokovati probleme ako se koristi iz različitih direktorija require_once ("config / database.php"); // ova skripta neće uzrokovati probleme require_once (dirname (__ FILE__). "/config/database.php");

Koristite __LINE__ kada otklanjate greške u skriptama:

// kod // ... my_debug ("neka poruka za otklanjanje grešaka", __LINE__); / * ispisuje red 4: neka poruka za otklanjanje grešaka * / // više koda // ... my_debug ("još jedna poruka za otklanjanje grešaka", __LINE__); / * ispisuje red 11: druga poruka za otklanjanje grešaka * / funkcija my_debug ($ msg, $ linija) (echo "Linija $ linija: $ msg \ n";)

6. Generisanje jedinstvenih ID-ova

Postoje slučajevi kada trebate generirati jedinstveni niz. Više puta sam vidio da koriste funkciju md5 () za rješavanje ovog problema:

// generira nasumični string echo md5 (vrijeme (). mt_rand (1,1000000));

Ali u stvari, PHP ima posebnu funkciju uniqid () za ovu svrhu.

// generiše nasumični niz echo uniqid (); / * ispisuje 4bd67c947233e * / // još jednom echo uniqid (); / * će ispisati 4bd67c9472340 * /

Golim okom možete vidjeti da su prvi znakovi blago rečeno slični... To je zbog činjenice da ova metoda koristi vrijeme servera za generiranje znakova. Čak je i korisno jer sve generirane vrijednosti dobivaju se po abecednom redu, što omogućava njihovo brzo sortiranje.

Da bismo smanjili šanse za dobijanje duplikata, možemo dodati prefiks ili koristiti drugi parametar (povećaće broj znakova):

// sa prefiksom echo uniqid ("foo_"); / * će ispisati foo_4bd67d6cd8b8f * / // sa drugim parametrom echo uniqid ("", true); / * ispisuje 4bd67d6cd8b926.12135106 * / // oba echo uniqid ("bar _", istina); / * ispisuje bar_4bd67da367b650.43684647 * /

Ova metoda generiše linije manje od md5, čime se štedi prostor.

7. Serijalizacija

Da li ste ikada morali da skladištite složene podatke u bazi podataka ili u fajlu? Da bi se objekat pretvorio u string, PHP obezbeđuje posebnu funkciju.

Uopšteno govoreći, postoje 2 od ovih metoda: serialize () i unserialize ()

// složeni niz $ myvar = niz ("zdravo", 42, niz (1, "dva"), "jabuka"); // pretvoriti u string $ string = serialize ($ myvar); echo $ string; / * će ispisati a: 4: (i: 0; s: 5: "zdravo"; i: 1; i: 42; i: 2; a: 2: (i: 0; i: 1; i: 1; s : 3: "dva";) i: 3; s: 5: "jabuka";) * / // dobijemo originalnu vrijednost $ newvar = unserialize ($ string); print_r ($ newvar); / * će ispisati niz (=> zdravo => 42 => niz (=> 1 => dva) => jabuka) * /

Ovako funkcioniraju ove funkcije. Međutim, zbog eksplozivnog rasta popularnosti JSON-a, PHP 5.2 je dodao 2 metode json_encode () i json_decode (). Njihov rad je sličan serialize ():

// složeni niz $ myvar = niz ("zdravo", 42, niz (1, "dva"), "jabuka"); // pretvoriti u string $ string = json_encode ($ myvar); echo $ string; / * će ispisati ["hello", 42 ,, "apple"] * / // vratiti originalnu vrijednost $ newvar = json_decode ($ string); print_r ($ newvar); / * ispisuje niz (=> zdravo => 42 => niz (=> 1 => dva) => jabuka) * /

Ova opcija je kompaktnija i kompatibilnija s drugim jezicima kao što je JavaScript. Međutim, može doći do gubitka podataka kada se radi s vrlo sofisticiranim objektima.

8. Kompresija žica

Kada govorimo o kompresiji, odmah mi padne na pamet arhivske datoteke v ZIP format... PHP pruža mogućnost komprimiranja dugih stringova bez ikakvih datoteka.

V sljedeći primjer Hajde da pokažemo kako funkcioniraju funkcije gzcompress () i gzuncompress ():

$ string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc ut elit id mi ultricies adipiscing. Nulla facilisi. Praesent pulvinar, sapien vel feugiat vestibulum, nulla dui pretsecium orci, non ultricies adipiscie elit. Aliquam pretium ullamcorper urna quis iaculis. Etiam ac massa sed turpis tempor luctus. Curabitur sed nibh eu elit mollis congue. Praesent ipsum diam, consectetur vitae ornare a. aliquam tell id a nnaunclenc, at non miinia mag. ornare in mollis in, mollis sed nunc. Etiam at justo in leo congue mollis. Nullam in neque eget metus hendrerit scelerisque eu non enim. Ut malesuada lacus eu nulllesism bibodna id eoda uru. "; $ komprimirano = gzcompress ($ string); echo "Originalna veličina:". strlen ($ string). "\ n"; / * će ispisati Originalna veličina: 800 * / echo "Kompresovana veličina:". strlen ($ kompresovano). "\ n"; / * će ispisati komprimiranu veličinu: 418 * / // vratiti $ original = gzuncompress ($ komprimirano);

U našoj je moći da smanjimo jačinu teksta za 50%. U istu svrhu možete koristiti metode gzencode () i gzdecode (), koje koriste drugačiji algoritam kompresije.

9. Izvršiti prije završetka

PHP ima funkciju register_shutdown_function () koja će vam omogućiti da izvršite neki kod prije nego što skripta izađe.

Recimo da želite znati neke informacije... Vrijeme izvođenja skripte:

// dobijemo vrijeme početka $ start_time = microtime (true); // neke operacije // ... // ispis vremena rada echo "izvršenje je trajalo:". (mikrovrijeme (true) - $ start_time). "sekunde.";

Na prvi pogled ovo može izgledati kao trivijalan zadatak. U ove svrhe, možete postaviti kod na kraj datoteke. Međutim, ako se funkcija exit () aktivira negdje prije toga, ovaj kod nikada neće raditi. Takođe, neće raditi ako postoji greška na stranici ili korisnik prekine učitavanje stranice (klikom na odgovarajuće dugme u svom pretraživaču);

Kada koristite metodu register_shutdown_function (), kod će se ipak izvršiti:

$ start_time = mikrovrijeme (tačno); register_shutdown_function ("my_shutdown"); funkcija my_shutdown () (globalno $ start_time; echo "izvršenje je trajalo:". (mikrovrijeme (true) - $ start_time). "sekunde.";)

Izlaz

PHP je čitava planeta koja ne prestaje da nas oduševljava svojim sadržajem. Šta mislite o ovim funkcijama?

Top srodni članci