Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Programi
  • Brbljivi odjeljak php. Stvaranje funkcija s promjenjivim brojem argumenata

Brbljivi odjeljak php. Stvaranje funkcija s promjenjivim brojem argumenata

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

Namjena elementa sekcije

Element odjeljka koristi se za stvaranje odjeljka u dokumentu koji zajedno grupira neke tematske sadržaje. Za svaki odjeljak u dokumentu treba navesti njegov naslov (predmet). To se obično radi sa naslovima (h1 - h6 elementi).

Naslov odjeljka

Sadržaj odjeljka...

elementi sekcije obično se koriste u sljedećim slučajevima:

  • za označavanje odjeljaka unutar odjeljka. Na primjer, da biste označili poglavlja u članku, kartice u dijaloškom okviru, odjeljke u disertaciji itd.
  • grupirati više odjeljaka u jedan tematska grupa. Na primjer, grupirati najnovije vijesti na stranici, komentari na članak itd.

Stoga bi se element odjeljka trebao koristiti za neki sadržaj samo ako ima naslov i dio je nečeg drugog.

Primjena elementa sekcije

Na primjer, razmislite o isječku koda stranice koji sadrži članak s komentarima. Svaki od komentara koje je korisnik ostavio na stranici sadrži dovršeni sadržaj i stoga se može smatrati elementom članka. No, u isto vrijeme, svi komentari predstavljaju neku tematsku grupu, pa se stoga mogu smjestiti u element odjeljka, t.j. zadanog elementa grupirat će sve te komentare na stranici zajedno.

Naslov članka

Komentari

Naslov komentara

Tekst komentara...

Naslov komentara

Tekst komentara...

Naslov članka Komentari Naslov komentara Naslov komentara

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

Naziv knjige

Prvo poglavlje

Drugo poglavlje

Treće poglavlje

Dodatak A

Prilog B

Gornji primjer bi imao sljedeću strukturu (crte):

Naslov knjige Prvo poglavlje Drugo poglavlje Treće poglavlje Dodatak A Dodatak B

Ograničenja pri korištenju elementa sekcije

Element odjeljka u HTML-u 5 nije generički element za grupiranje sadržaja; ne smije se koristiti za omotavanje sadržaja koji vam se sviđa. Njegova glavna svrha je dodati semantiku dokumentu i stvoriti njegovu strukturu (okviru).

Kada autor treba grupirati sadržaj samo da bi ga stilizirao ili radio s njim u JavaScriptu, najbolje je koristiti element div. Element div, za razliku od elementa odjeljka, ne dodaje semantiku dokumentu i ne sudjeluje u stvaranju njegove strukture (okviru).

Razlika između elemenata odjeljka i članka

Elementi odjeljka i članka, iako su naizgled vrlo slični, imaju različita semantička značenja. Element članak služi za grupiranje sadržaja koji je potpun, samostalan i može se smatrati odvojenim od ostatka sadržaja stranice. A element odjeljka ima drugačije semantičko značenje, namijenjen je grupiranju sadržaja koji je sastavni dio nečeg drugog.

Ali kako autor zna što je neki sadržaj na stranici? Pogledajmo ovo koristeći primjer fragmenta članka. Fragment je dio članka i stoga se element odjeljka mora koristiti za grupiranje njegovog sadržaja. Ali isti fragment, već ostavljen kao komentar, bit će nešto cjelovito, cjelovito. Stoga se u ovom kontekstu element članak može koristiti za njegovo grupiranje. No, naravno, može se tvrditi i suprotno. Stoga, koji element koristiti za grupiranje sadržaja u većini slučajeva ovisi o vašem subjektivnom mišljenju kao autora. Ali najvažnije u ovom pristupu je zadržati odabranu poziciju. Stoga, što je autor dosljedniji u stvaranju strukture, to će više smisla moći u nju unijeti.

Predlošci u Bitrixu mogu se podijeliti u nekoliko vrsta:
  • Zajednički i složeni predlošci komponenti 2.0
  • Predlošci web-mjesta
  • Predlošci za druge entitete (poštanske poruke, izdanja biltena, web obrasci, generatori izvoza i još mnogo toga)

Predlošci komponenti čak imaju mogućnost korištenja predložaka. U principu, možete spojiti bilo koji predložak, ali nema pomoćnih alata iz kutije. Ako nekome treba, imam par linkova na nastavke za grančicu i oštricu, koji rade i dosta se koriste u proizvodnji. Ali čak su i ovdje Bitrixoidi izopačeni. Predložak se može koristiti samo s komponentama. Povezivanje predložaka s rendererom predloška web-mjesta ili drugim entitetima neće raditi, jer. tamo nema renderera.

U predlošcima komponenti smeta još jedna točka s njihovim postavljanjem. Komponenta je spojena jednostavnim dizajnom
$APPLICATION->IncludeComponent("bitrix:catalog.section", "template_name", );
Drugi parametar je naziv predloška komponente. Dakle, ovisno o raznim uvjetima, lokacija ovog predloška može biti na najneočekivanijim mjestima:

  • bitrix/components/bitrix/catalog.section/templates/template_name
  • local/components/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/components/bitrix/catalog/templates/.default/bitrix/catalog.section/template_name
  • local/templates/site_template/components/bitrix/catalog/.default/bitrix/catalog.section/template_name
I još nisam naveo sve opcije...

Predložak stranice može se gledati kao skup datoteka: header.php, footer.php (da, stranica ih mora imati), description.php ( opis sistema predložak stranice), template_styles.css (stilovi predložaka web mjesta), direktorij s predlošcima komponenti i skupina manje važnih datoteka. I to je sve. I nema načina da se na to utječe, nema veze s tim. Nije moguće spojiti predložak.

O ostalim predlošcima nema se što reći. Oni su ili jednostavno pohranjeni u bazi podataka u obliku izgleda s uključivanjem nekih "varijabilnih" podataka u nju, ili je to glupo php datoteku, 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 to postavljati ovdje, jednostavno zato što je prilično velik, oko 2k redaka. Kome treba neka progugla, leži u /bitrix/modules/catalog/load/yandex_run.php

Priroda datoteke

Kao što je gore postalo jasno, u Bitrixu s arhitekturom nije sve baš dobro. Ali Bitrix također ima još jedan važan aspekt arhitekture.
Bitrix je CMS s pola datoteke. Puno stvari se kontrolira pomoću neke vrste datoteka:

  • Trebate stranicu - kreirajte datoteku
  • Potreban vam je skup stranica - stvorite datoteku i tamo spojite komponentu koja radi s infoblokovima
  • Morate postaviti naslov stranice - uredite datoteku
  • Morate postaviti naslov za sve stranice odjeljka - kreirajte posebnu .section.php datoteku u korijenu ovog odjeljka
  • Trebate urediti prava - uredite datoteku .access.php
  • Postavke prije inicijalizacije sustava - u datotekama dbconn.php, .settings.php i .settings_extra.php
  • result_modifier.php, component_epilog.php, init.php, .parameters.php, .description.php ....

A takvih posebnih datoteka ima puno razasutih po Bitrixu. S jedne strane, to daje određenu fleksibilnost pri radu sa sustavom. S druge strane, može se pretvoriti u muku i za programera i za upravitelja stranice. Datoteke stranica ponekad se pretvaraju u zbrku php koda, izgleda i dodataka. Kao rezultat vizualni 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 dovesti do toga da stranica ne radi. Kažete - nemojte pisati php kod u takve datoteke? Da znam. Ali Bitrix vrlo često i bez alternativnih snaga za to.
Da, i morate stalno imati na umu informacije o tome kakve su datoteke i koje podatke mogu sadržavati. V različite datoteke treba sadržavati različite podatke različita struktura, i morate ga zapamtiti za svaku opciju. Svaki put to tražiti u dokumentaciji je težak posao.

Pored navedenog

Možete se beskrajno žaliti kako je sve loše posloženo u Bitrixu. Po mom mišljenju, sve te pritužbe mogu se okarakterizirati jednom frazom - "nekako ne potpuno". I doista, ako Bitrixoidi iznenada najave nekakvu značajku, onda je nekako ne puštaju u potpunosti, ne dovršavaju, ne dovode je na pamet. Primjeri - masa:

  • 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 predloška motora, ali se ne može koristiti svugdje, a ne u potpunosti
  • itd. itd.

Ukratko, pokušat ću okarakterizirati ostale probleme s kojima se svakodnevno suočavam.

admin

Ako je netko radio s admin panelom, kreirao 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 datoteke s rezancima za svaku stranicu. Na primjer, stranica za pregled pojedinosti o narudžbi u administrativnom području od strane programera Bitrixa zauzima 4k redaka. Moj IDE se počinje usporavati prilikom pregleda sadržaja ove datoteke. Tu imate php, js i html. Pa, barem su se riješili SQL-a, iako sam siguran da ga ima na drugim administrativnim stranicama.
A što je spriječilo administrativne stranice da odrade posao koristeći iste komponente, nije jasno. Jednostavno ne postoji način za prilagođavanje većine administrativnih stranica. U slučaju komponenti, to bi se moglo učiniti u trenu.
Usput, dobri ljudi napravio modul koji će vam pomoći u izradi administrativnih stranica

js framework

Bitrix ima js komponentu koja djeluje kao neka vrsta klijentskog okvira. Nitko od programera to ne voli iz nekoliko razloga:
  • gotovo je nedokumentiran
  • on je čudovište
  • uvelike duplicira jquery poznat mnogima

Bitrix ga vrlo često koristi u svojim komponentama, izazivajući time još veći bijes među programerima. Jezgra ove biblioteke u minimiziranom obliku je 85 kb, što nije puno. Neće biti moguće izbjeći njegovu vezu ako želite koristiti sve značajke Bitrixa (kompozit, upravljanje imovinom).

copy-paste duh

V U posljednje vrijeme sve rjeđe, ali i dalje prilično često, Bitrix napravi nešto copy-paste. Ako želite izmijeniti rad komponente - copy-paste. Ako želite stvoriti vlastiti predložak za prijenos, kopirajte i zalijepite sistemski i dovršite ga. Ako želite napraviti gotovo isti predložak koji imate - copy-paste i malo ga promijenite. O tome čak govore i na tečajevima za programere početnike. Nemam riječi.

Upravljanje imovinom i CDN

Jako mi se sviđa način upravljanja resursima u Bitrixu. U principu je moguće registrirati skup određenih "knjižnica". Svaka knjižnica je skup css/js datoteka koje mogu ovisiti o nekim drugim knjižnicama. Ako uključite neku biblioteku na stranicu, tada će se prije povezivanja sve ovisnosti razriješiti i sve ovisne biblioteke umetnuti na stranicu. Čini se da je sve u redu, samo će svaki resurs biti umetnut u obrazac zasebna datoteka u skripti ili oznaci veze. I zahvaljujući tome, postoje stranice koje imaju 30-50 povezanih skripti i isto toliko stilskih datoteka.
Sranje-pitanje, rekli su u Bitrixu, i napravili čarobnu kvačicu koja spaja sve ove datoteke u jednu. I pojavile su se stranice gdje su umjesto 50 skripti bile 2, svaka od 300-500 kb. Prije nekog vremena ovaj sindikat je radio s greškama i nekoliko puta kombinirao iste resurse, ali sada se čini da je to popravljeno.
A onda su se Bitrixoidi izvukli - zeznuli su mogućnost uploada svih resursa na CDN poslužitelj. Koji uvijek padne...
Zatim se pojavio Google Pagespeed Insights koji je preporučio smanjenje svih resursa Niži dio stranicama. I u Bitrixu su opet napravili čarobnu kvačicu, koja glupo snižava sve resurse u tijelu, ako nisu označeni posebnim atributom.
Oni također distribuiraju minimizirane verzije svojih skripti zajedno s kutijom, koje se povezuju kada se koriste još jedna čarobna kvačica na administratorskoj ploči.
Općenito, nema scss-a za vas, nema TypeScript-a. Ako želite kompetentno upravljati resursima - nemojte koristiti ugrađeni Bitrix sustav, koristite webpack, s kojim se lako možete sprijateljiti s Bitrixom.

Višestrani / višejezični

Ovo je vjerojatno najveća glavobolja programera koja se događa od početka proizvoda. Ne možete samo uzeti i stvoriti višejezičnu stranicu. A ako trebate višejezični katalog sa različite cijene i valute - onda se pretvara u brašno, za što također morate platiti uredan iznos (morat ćete se izdvojiti za kupnju dodatne licence za sljedeću jezičnu verziju stranice).
Ako stvarate višejezičnu i viševalutu stranicu, budite spremni na činjenicu da će se Bitrix tome vrlo agresivno oduprijeti. Postavke više stranica decentralizirane su na cijeloj administrativnoj ploči. Svaki entitet na administrativnoj ploči ima svoju ovisnost o jezičnoj verziji stranice. Neki entiteti možda uopće ne podržavaju ovisnosti o web-mjestu/jeziku, a neki imaju samo nedvosmisleno vezanje za jezik, tako da će se ovaj entitet morati duplicirati i zatim podržati.
V osnovna verzija da bi infoblok radio na nekoliko jezika, morat ćete stvoriti duplikat ovog infobloka. Ali u praksi to nitko ne čini i pokušava smisliti vlastite načine centraliziranog pohranjivanja jednog entiteta, šireći njegove atribute ovisne o jeziku na druge trgovine.
Ne možete postaviti zadani jezik prilikom lokalizacije. Ako imate jezičnu varijablu koja opisuje frazu na ruskom, a ova jezična varijabla nije dostupna na engleskom, tada će se na stranici na engleskom prikazati prazan redak, a na to se nikako ne može utjecati (u mnogim slučajevima moglo bi se ostaviti ruski izraz kako ne bi bilo praznina).

Mehanizam upravljanja pravima

Vrlo zamudili s ovim podsustavom. Često je teško shvatiti zašto ste dodijelili prava za pregled nekog entiteta, a korisnik ih ne može koristiti. Na primjer, da biste dali pravo na uređivanje infobloka, trebate dati pristup direktoriju /bitrix/admin, dati dopuštenja za određeni infoblok i dati dopuštenja u glavnom modulu. Potrebno je obaviti previše operacija da bi se izdala prava za jedan entitet. A ako nema dovoljno prava, onda bez odabira izvornih kodova neće biti moguće razumjeti zašto.

Konfiguracija

Bitrix nema centralizirano čvorište koje bi vam omogućilo upravljanje postavkama sustava. Postavke su ponovno decentralizirane u cijelom sustavu. Postoje opcije u postavkama modula, u postavkama komponenti, u COptionu (bez postavljanja u admin panel). U admin panelu opcije jednog modula mogu biti razmaknute 3-4 metra različite stranice koji se nalaze na potpuno različitim mjestima. urlrewrite se može uređivati ​​putem administratorske ploče! Sada također .settings i .settings_extra. Ponekad uopće nije jasno tko od njih ima veći prioritet, vrlo često nema dovoljno objašnjenja za opcije, nisu jasni odnosi. Ne postoji izvorni način dijeljenja konfiguracije između programera.
Postavke su vrlo nelogične. Ponekad dođe do apsurda ... pogledajte komponentu velikih podataka - može li je nespremna osoba moći postaviti?

Integracija s 1C

Ovo je stavka na popisu značajki Bitrixa koja je dovoljna za ugriz veliki broj kupaca. Bitrix obećava postavljanje dvosmjerne integracije web-mjesta s 1C u 2 klika, što će odmah isporučiti sadržaj i dokumente iz jednog sustava u drugi.
Da, stvarno je tako, ali uz nekoliko napomena.
Prvo, kako biste integraciju napravili "iz kutije" bez dodatnih napora, morate učiniti sve točno kako je napisano u Bitrix dokumentaciji - izgraditi katalog na web mjestu prema pravilima koja Bitrix nudi i izraditi katalog u 1C koji Bitrix zahtijeva. U idealnom slučaju, kreirajte sve od nule, a onda će vam možda sve raditi izvan okvira.
Drugo, Bitrix nije prijateljski sa svim 1C konfiguracijama iz kutije. Vrijedi prvo provjeriti
Treće, idealan svijet ne može biti. Obično kupac koji želi web stranicu već ima maloprodajnu tvrtku, što znači da već ima 1C, što je ogromna kanta za smeće. I ovo smeće se mora baciti na mjesto. A kako stranica ne bi dobila isto smeće, potrebno je značajno poboljšati mehanizam razmjene.
Vrlo često se zahtjevi kupaca uvelike razlikuju od vizije proizvoda koju je formirao Bitrix tim, te tada modifikacija mehanizma zamjene može biti prilično skupa, po intenzitetu rada usporediva s razvojem jedinstvenog modula zamjene za konkretan slučaj.
Stoga, ne morate gajiti iluzije o činjenici da ćete moći lako integrirati stranicu s 1C. Sve su to makinacije trgovaca.

Dopuna razmjene s 1C također je zasebno pitanje. Klasa \CIBlockCMLImport je odgovorna za organiziranje razmjene kataloga - 5,7k redaka. Jedna od glavnih metoda koju je najčešće potrebno proširiti je \CIBlockCMLImport::ImportElement, koja sadrži više od 1k redaka. Dovoljno je naslijediti ga jednom, ažurirati proizvod nekoliko puta tijekom dugog vremena i možete dobiti neradnu razmjenu s 1C. Stoga se programeri često ne penju u ovu klasu i pokušavaju nekako ući u proces uvoza pomoću rukovatelja događaja. Rad s obrađivačima događaja u Bitrixu, posebno u modulu infoblock, također nije baš ugodno iskustvo, makar samo zato što događaji istog tipa nisu jednoliko raspoređeni, a neki događaji jednostavno nisu dovoljni.
Općenito, s ovim su stvari jednako tužne kao i prije.

Nedosljednost

Ponekad mi se čini da su programeri različitih modula oni zapravo ne komuniciraju jedni s drugima. Proučavajući izvorne kodove kernela, nailazite na vrlo heterogena rješenja koja bi se mogla implementirati na jednom motoru, ali se iz nekog razloga različito implementiraju.
Na primjer, možemo uzeti svojstva elemenata infobloka i korisničkih polja. Oba ova entiteta su, zapravo, dodatno polje za drugi entitet. Ima vrstu, vrijednost i opis. Vrijednost je pohranjena u odvojenim tablicama baze podataka, imaju približno isto sučelje za pristup podacima. Pa zašto ih ne učiniti istim sučeljem?
Krajem ožujka modul prodaje je ažuriran na Najnovija verzija, a i obećali su prilagođena svojstva za narudžbe. Postoji li sada novo, treće sučelje za rad s proširenim svojstvima entiteta?

Bitrix24

Ovo je općenito posebna tema za raspravu. Često dolazi do zabune oko ovog sustava. Postoje 2 verzije B24 - SaaS i Standlone. Postoji tržište za B24, ali sadrži aplikacije samo za SaaS verziju! Ako imate inačicu u kutiji kupljenu za 200 komada, ovo nećete moći staviti vrhunske aplikacije, kao konstruktor dokumenata, i općenito, nećete moći instalirati nijednu aplikaciju s tržišta za Bitrix24 na svoj Bitrix24. Evo takvog paradoksa.
Umjesto toga, tržnica iz redovna verzija. Postoji mnogo više rješenja, ali ona su uglavnom usmjerena na upravljanje web stranicama, a ne na B24.

Bitrix24, kako su mi rekli u odjelu tehnička podrška, to je kompletan sustav. Ako ometate posao standardne komponente sustava, budite spremni da će se ova funkcionalnost prekinuti s naknadnim ažuriranjima. Bitrix neće računati da ćete finalizirati komponente portala, i to unatoč činjenici da službeno šalju svoje klijente partnerima

Usput, modificirajte komponente u verzija u kutiji B24 je drugi problem. Komponente koje generiraju js kod kojem se pristupa putem ajaxa php kod, koji generira html+js kao odgovor. To je paklena mješavina u koju stvarno ne želite zaroniti.

Dokumentacija

Bitrix dokumentacija zaostaje za razvojem proizvoda 1-1,5 godina. Kod je vrlo slabo pokriven phpDocs-om i često je komentar prije klase samo za prikaz, automatski se generira u IDE-u.
Sam stil prezentacije dokumentacije u službenim izvorima često je previše „slobodan“, a sadržaj nekih članaka u dokumentaciji možda nema nikakve veze sa samim Bitrixom.
Tečaj za programere ima puno informacija, ali format u kojem se programer upoznaje sa mogućnostima sustava ne pruža potrebnu razinu razumijevanja. Ako odete na Symfony Cookbook, tada je sve posloženo, svi potrebni aspekti opisani su ovisno o verziji. Dok u Bitrixu tečaj za razvojne programere sadrži neshvatljivo po kojem principu strukturirane informacije po staroj i novoj jezgri koja se servira prvo odvojeno, a zatim miješana, od čega početnike boli glava.

Organizacija procesa razvoja

Zbog specifičnosti sustava nije ga tako jednostavno organizirati zgodan proces razvoj. Ne najviše svježa verzija Edition Business (ono što je bilo pri ruci) nakon instalacije zauzima, razmislite, gotovo 530 megabajta
$ du -s *|sort -nr|cut -f 2-|dok čita a;do du -hs $a;done 523M bitrix 204K upload 64K bitrixsetup.php 56K desktop_app 20K readme.html 20K license.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
Od ovog volumena dobra polovica su binarni programi i instalacijski programi, koji općenito nisu potrebni za kontrolu verzija. Općenito govoreći, uobičajeno je da se Bitrix kernel ne verzija. Programeri Bitrixa, takoreći, sami jamče integritet kernela, upravljaju ovisnostima verzija različitih modula tijekom ažuriranja. Ali to odmah nosi barem jedan veliki minus - nemoguće je implementirati potpuno radni projekt s jednom naredbom iz kontrole verzija, morate je izgraditi u dijelovima: nabavite izvore kernela iz bitrix sigurnosne kopije, a izvore programera iz git-a .
Ni baza nije dobra. Ako sami možete koristiti migracije tijekom razvoja, tada Bitrix ubacuje ažuriranja u bazu podataka pomoću običnih skripti koje ne možete kontrolirati. Stoga, prilikom ažuriranja i dalje morate prenijeti sigurnosne kopije baze podataka sa središnjeg razvojnog hosta na druge programere.
Ljubazni ljudi, opet, pile alate koji pomažu da se sve to organizira, ali nažalost, još uvijek nije moguće natjerati Bitrix da se pridržava ovih pravila.
Službeno, Bitrix vam omogućuje da imate 2 kopije jedne distribucije. Jedan je za proizvodnju, a drugi za razvoj. Ako imate nekoliko programera na jednom projektu, onda ste, takoreći, zabranjeni) Zapravo, dovoljno je prekinuti dolazne i odlazne veze s/do www.bitrixsoft.com na Bitrix stroj, a zatim možete zakivati koliko god kopija razvoja želite, oni se jednostavno ne mogu sami ažurirati.

kolege

I posljednje pitanje koje bih se dotaknuo.
Zbog činjenice da Bitrix ima nizak ulazni prag, među tvrtkama koje pružaju usluge na ovom tržištu ima dosta nekvalificiranog osoblja. Imao sam priliku vidjeti mnogo različitih projekata tijekom svoje karijere (ukupno više od sto) dovršenih na 1C-Bitrixu. Sa sigurnošću mogu reći da je 95% njih odrađeno “blefiranjem”. Rijetko su postojali projekti za čiji se razvoj osjetio pristup, ali tih je bilo malo. Sve je ovo jako tužno.

zaključke

Naravno, svi minusi se ne mogu razmatrati u okviru jednog članka. Svaki dan svakodnevno nailazite na neke sitnice koje ometaju posao. Ali razmotriti sve takve sitnice jednostavno je nemoguće, a vjerojatno i beskorisno.

Kakvi se zaključci ovdje mogu izvesti. Bitrix je iznimno složen sustav zbog činjenice da ima loše zamišljenu arhitekturu, mnoge nedostatke koji nastavljaju živjeti u proizvodu dugo vremena. S druge strane, Bitrix je dovoljan jednostavan sustav, što zahtijeva mnogo nižu razinu vještine za početak, za razliku od okvira.
Podrška za ovaj proizvod je vrlo nezahvalan zadatak u usporedbi s proizvodima kao što su Symfony, Laravel, Yii. Proizvod jako voli stavljati žbice u kotače i neiskusnih i iskusnih programera, što zauzvrat može utjecati na cijenu usluga iskusnih programera za Bitrix.

Žalim li što sam proveo toliko vremena radeći s ovim sustavom? Radije da nego ne. Bilo bi mudrije potrošiti ovo vrijeme proučavajući nešto ispravnije i logičnije (što sada aktivno pokušavam). Ali slučajno se dogodilo da me na početku mog puta nije imao tko uputiti u pravom smjeru.

Ako ti - php početnik developer, onda preferiraju Bitrix za proučavanje okvira kao što su Symfony, Laravel, Yii, ZendFramework. Vjerujte, u budućnosti će se to više nego isplatiti. Nakon što ste svladali bilo koji od ovih okvira, neće vam biti teško u budućnosti razviti nešto za Bitrix. Ako nemate izbora, onda proučite Bitrix, ali u slobodno vrijeme bolje je pokušati uroniti u svijet okvira kako biste svoj mozak smjestili.

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 koja će vam pomoći da napišete puno bolja 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 skladatelja.

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

UPD. Vidi se da su djelatnici Bitrixa pročitali članak. U rubrici Marketing napisao sam da su u rubrici Arhitektura u tijeku Bitrix developera pisani marketinški pozivi. Sada ih nema. Čak su ga i zapečatili, očito u žurbi.

Hvala nook na pažnji i oštrom oku :)

Oznake:

Dodaj oznake

Koliko god koristili PHP, i dalje se pojavljuju neke značajke za koje nismo ni čuli. Neki od njih bili bi nam vrlo korisni. Napravio sam mali popis korisne značajke, koji bi trebao biti u arsenalu svakog PHP programera.

1. Kreiranje funkcija s promjenjivim brojem argumenata

Vjerojatno već znate da nam PHP omogućuje stvaranje funkcija s izbornim argumentima. Sada ću pokazati funkciju u kojoj se broj argumenata može mijenjati od slučaja do slučaja.

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

// funkcija s dva neobavezna parametra function foo($arg1 = "", $arg2 = "") ( echo "arg1: $arg1\n"; echo "arg2: $arg2\n"; ) foo("zdravo", "svijet"); /* izlaz: arg1: zdravo arg2: svijet */ foo(); /* izlaz: arg1: arg2: */

Pogledajmo sada kako možete napisati funkciju s neograničenim brojem argumenata. Za to će se koristiti metoda func_get_args():

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

2. Koristite Glob() za pronalaženje datoteka

Često nazivi funkcija govore sami za sebe. Isto se ne može reći za funkciju glob().

Ne ulazeći u detalje, njegova je funkcionalnost slična metodi scandir(). Omogućuje vam da pronađete potrebna datoteka prema predlošku:

// pronaći sve php datoteke $files = glob("*.php"); print_r($ datoteke); /* izlaz: niz ( => phptest.php => pi.php => post_output.php => test.php) */

Da biste pronašli datoteke nekoliko vrsta, morate napisati ovako:

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

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

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

Da biste dobili puni put do dokumenta, koristite metodu realpath():

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

3. Informacije o korištenoj memoriji

Ako pratite količinu memorije koju pojedu vaše skripte, vjerojatno ćete ih češće optimizirati.

U PHP-u postoji moćan alat praćenje korištenja memorije. V različitim dijelovima skripta za učitavanje može biti drugačija. Da biste dobili vrijednost iskorištene memorije u ovaj trenutak, trebali bismo koristiti metodu memory_get_usage(). Za fiksiranje maksimalan broj korištenje iskorištene memorije memory_get_peak_usage()

echo "Inicijalno: ".memory_get_usage()." bajtova \n"; /* Početno: 361400 bajtova */ // daje 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(). Ali imajte na umu da ova značajka neće raditi u sustavu Windows.

Ispis_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 jasna onima koji imaju iskustva u tome administracija sustava. Za sve ostale nudimo dešifriranje:

  • ru_oublock: broj upisa u blok
  • ru_inblock: broj čitanja bloka
  • ru_msgsnd: broj poslanih poruka
  • ru_msgrcv: broj primljenih poruka
  • en_maxrss: maksimalna veličina set koji se ne može stranicama
  • ru_ixrss: ukupna zajednička memorija
  • ru_idrss: ukupna količina nedijeljenih podataka
  • ru_minflt: broj korištenih memorijskih stranica
  • ru_majflt: broj grešaka stranice
  • ru_nsignals: broj primljenih signala
  • ru_nvcsw: broj promjena konteksta po procesu
  • ru_nivcsw: broj prisilnih prebacivanja konteksta
  • ru_nswap: broj pristupa disku tijekom stranica
  • ru_utime.tv_usec: radno vrijeme u prilagođeni način rada(mikrosekunde)
  • ru_utime.tv_sec: vrijeme provedeno u korisničkom načinu rada (sekunde)
  • ru_stime.tv_usec: vrijeme privilegiranog načina rada (mikrosekunde)
  • ru_stime.tv_sec: vrijeme privilegiranog načina rada (sekunde)

Kako biste saznali koje resurse vašeg procesora koristi skripta, trebate vrijednost 'korisničko vrijeme' (vrijeme u korisničkom načinu) i 'sistemsko vrijeme' (vrijeme u privilegiranom načinu). Rezultat možete dobiti u sekundama i mikrosekundama. Da biste pretvorili ukupan broj sekundi u decimalni broj, trebate podijeliti vrijednost u mikrosekundama s 1 milijun i vrijednosti dodati sekunde.

Nekako zbunjujuće. Evo primjera:

// odmor 3 sekunde sleep(3); $podaci = getrusage(); echo "Vrijeme korisnika: ". ($data["ru_utime.tv_sec"] + $data["ru_utime.tv_usec"] / 1000000); echo "Vrijeme sustava: ". ($data["ru_stime.tv_sec"] + $data["ru_stime.tv_usec"] / 1000000); /* ispisuje Korisničko vrijeme: 0,011552 Vrijeme sustava: 0 */

Iako je skripta trajala oko 3 sekunde, procesor nije bio jako opterećen. Stvar je u tome što pri pozivu (spavanju) skripta praktički ne troši resurse procesora. Općenito, postoji mnogo zadataka koji oduzimaju značajno vrijeme, ali ne koriste procesor. Na primjer, čekanje na operacije povezane s diskom. Dakle, ne koristite uvijek CPU vrijeme u svojim skriptama.

Evo još jednog primjera:

// hodati 10 milijuna puta for($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 */

Skripta je uzela 1,4 sekunde CPU vremena. U ovom slučaju, vremena poziva sustava su općenito niska.

Vrijeme privilegiranog načina rada (System Time) je vrijeme koje procesor provede izvršavajući zahtjeve sustava prema kernelu u ime programa. Primjer:

$start = mikrovrijeme(true); // poziva mikrovrijeme svake 3 sekunde while(microtime(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 */

Sada je vrijeme sustava potrošeno mnogo više nego u prethodnom primjeru. Sve zahvaljujući metodi microtime () koja koristi resurse sustava.

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

5. Čarobne konstante

U PHP-u postoje mnoge čarobne konstante kao što su trenutni broj retka (__LINE__), put datoteke (__FILE__), put direktorija (__DIR__), naziv funkcije (__FUNCTION__), naziv klase (__CLASS__), naziv metode (__METHOD__) i prostori imena (__NAMESPACE__) .

Nećemo ih sve razmatrati. 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__ prilikom otklanjanja pogrešaka skripti:

// kod // ... my_debug("neka poruka za otklanjanje pogrešaka", __LINE__); /* izlazni redak 4: neka poruka za otklanjanje pogrešaka */ // više koda // ... my_debug("još jedna poruka za otklanjanje pogrešaka", __LINE__); /* izlazni redak 11: još jedna poruka za otklanjanje pogrešaka */ funkcija my_debug($msg, $line) ( echo "Linija $line: $msg\n";)

6. Generiranje jedinstvenih ID-ova

Postoje slučajevi kada trebate generirati jedinstveni niz. Mnogo puta sam vidio da se funkcija md5() koristi za rješavanje ovog problema:

// generira nasumični niz echo md5(time() . mt_rand(1,1000000));

Ali zapravo, PHP ima posebnu funkciju uniqid() za tu svrhu.

// generira nasumični niz echo uniqid(); /* izlazi 4bd67c947233e */ // još jednom echo uniqid(); /* ispisuje 4bd67c9472340 */

Golim okom možete vidjeti da su prvi znakovi u najmanju ruku slični... To je zbog činjenice da ova metoda koristi vrijeme poslužitelja za generiranje znakova. Čak je i korisno, jer. sve generirane vrijednosti dobivaju se abecednim redom, što omogućuje njihovo brzo sortiranje.

Kako bismo smanjili šanse za dobivanje duplikata, možemo dodati prefiks ili koristiti drugi parametar (povećati broj znakova):

// s prefiksom echo uniqid("foo_"); /* izlaz foo_4bd67d6cd8b8f */ // s drugim parametrom echo uniqid("",true); /* izlazi 4bd67d6cd8b926.12135106 */ // oba echo uniqid("bar_",true); /* ispisuje bar_4bd67da367b650.43684647 */

Ova metoda generira linije manje od md5, tako da možete uštedjeti prostor.

7. Serijalizacija

Jeste li ikada morali pohraniti složene podatke u bazu podataka ili datoteku? Kako bi se objekt pretvorio u string, PHP pruža posebnu funkciju.

Općenito govoreći, ove metode su 2: serialize() i unserialize()

// složeni niz $myvar = array("zdravo", 42, array(1,"dva"), "jabuka"); // pretvoriti u niz $string = serialize($myvar); echo $string; /* izlaz a:4:(i:0;s:5:"zdravo";i:1;i:42;i:2;a:2:(i:0;i:1;i:1;s :3:"two";)i:3;s:5:"apple";) */ // dobijemo izvornu vrijednost $newvar = unserialize($string); print_r($newvar); /* ispisuje niz ( => zdravo => 42 => niz ( => 1 => dva) => jabuka) */

Ovako funkcioniraju te funkcije. Međutim, zbog brzog rasta popularnosti JSON-a, 2 metode json_encode() i json_decode() dodane su u PHP 5.2. Njihov je rad sličan serialize():

// složeni niz $myvar = array("zdravo", 42, array(1,"dva"), "jabuka"); // pretvoriti u niz $string = json_encode($myvar); echo $string; /* ispisuje ["hello",42,,"apple"] */ // vraćanje izvorne vrijednosti $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, pri radu s vrlo sofisticiranim objektima može doći do gubitka podataka.

8. String Compression

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

V sljedeći primjer Pokažimo 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 pretium orci, non ultricies adipiscing elit, non ultricies adipiscing e , consectetur adipiscing 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, miquam aliquam sed in aliquam sed in aliquam. metus, at lacinia augue. Sed magna nisi, 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 nulla sodaleeumdu i nulla sodaleeumism. ; $komprimirano = gzcompress($string); echo "Izvorna veličina: ". strlen($string)."\n"; /* ispisuje Izvorna veličina: 800 */ echo "Komprimirana veličina: ". strlen($komprimirano)."\n"; /* izlaz Komprimirana veličina: 418 */ // return $original = gzuncompress($compressed);

Možemo smanjiti količinu teksta za 50%. U istu svrhu možete koristiti metode gzencode() i gzdecode(), koje koriste drugačiji algoritam kompresije.

9. Pokrenite prije završetka

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

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

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

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

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

$start_time = mikrovrijeme(true); register_shutdown_function("my_shutdown"); funkcija my_shutdown() ( globalno $start_time; echo "izvršenje je trajalo: ". (microtime(true) - $start_time). " sekundi."; )

Zaključak

PHP je cijeli planet koji nas ne prestaje oduševljavati svojim sadržajem. Što mislite o ovim značajkama?

Vrhunski povezani članci