Გამარჯობა ყველას. მინდა წარმოგიდგინოთ კიდევ ერთი ველოსიპედი, რომელიც დაწერილია PHP გამოყენებით დოკუმენტის ობიექტიმოდელი. რით განსხვავდება იგი იმავე სახეობის სხვა სამბორბლიანი წარმომადგენლებისგან? სინამდვილეში, არც ისე ბევრი განსხვავებაა, ის აერთიანებს ბევრს საუკეთესოს. Მაგალითად:
1. html და php-ის სრული გამიჯვნა.
2. არ არის დამატებითი ეტიკეტები შაბლონებში, როგორიცაა
3. შაბლონის სხვა ფაილების შინაარსის განლაგებაში ჩასმის შესაძლებლობა, როგორც php-დან, ასევე განლაგებაში სპეციალური ტეგის გამოყენებით.
4. ნებისმიერი html ტეგის შექმნის შესაძლებლობა.
5. შენახვის უნარი html ფაილიყველაფერი, რაც შეიქმნა და შეგროვდა.
6. მოთხოვნილი გვერდის html ფაილის არსებობის შემოწმება შაბლონის გენერირებამდე.
იმისათვის, რომ ყველასთვის დაუყოვნებლივ ცხადი გახდეს, რამდენად მოსახერხებელი და მარტივია მისი გამოყენება, მე გეტყვით და გაჩვენებთ, როგორ გამოვიყენე იგი ჩემი ერთ-ერთი პროექტის შესაქმნელად (ვეჭვობ, რომ ყველა ჩემს პროექტს გადავწერ ამისთვის).
პირველი, რასაც ჩვეულებრივ ვაკეთებ, არის მონაცემთა ბაზიდან ყველა ინფორმაციის მიღება გვერდის შესახებ ( საკვანძო სიტყვები, გვერდის აღწერა, შაბლონის სახელი და css და js ფაილის მისამართები). ამ ყველაფერს ვინახავ $ head მასივში. შემდეგ ვიღებ კონტენტს მონაცემთა ბაზიდან და ვინახავ მას $ გვერდების მასივში. და ვიწყებ კლასთან მუშაობას.
ასე რომ, ჯერ ვიძახებ კლასის კონსტრუქტორს და გადავცემ მასში ყველა საჭირო პარამეტრს:
$ tpl = ახალი შაბლონი; $ tpl -> ext = TPL_EXTENSION; შაბლონების დირექტორიაში ფაილების # გაფართოება $ tpl -> htm = CACHE_EXTENSION; # გაფართოება უკვე გენერირებული გვერდებისთვის $ tpl -> skin_dir = DIR_TEMPLATES; # დირექტორია, რომელიც შეიცავს საიტის ყველა შაბლონს (მაგალითად, შაბლონებს) $ tpl -> js_dir = DIR_JS; # დირექტორია, სადაც უნდა მოძებნოთ JS ფაილები $ tpl -> css_dir = DIR_CSS; # დირექტორია, სადაც მდებარეობს CSS $ tpl -> img_dir = DIR_IMG; # დირექტორია, სადაც სურათები $ tpl -> skin = $ _SESSION ["skin"]; # შაბლონის სახელი მინდა გამოვიყენო $ tpl -> cache = DIR_CACHE; # სად შეინახოთ მზა html $ tpl -> log = FILE_T_LOGS; # სად ჩაწეროთ ჟურნალები $ tpl -> tag_start = SYMBOL_START_TAG; # სიმბოლო, რომლითაც ცვლადები შაბლონში იწყება $ tpl -> tag_end = SYMBOL_END_TAG; # სიმბოლო, რომელიც ამთავრებს ცვლადებს თარგში $ tpl -> dir_delimeter = DIRECTORY_SEPARATOR; $ tpl -> სივრცე = SYMBOL_SPACE; # სიმბოლო ცვლის სივრცეს.
ფუფ, როგორც ჩანს, ყველა ცვლადი გავიდა, მოდით გადავიდეთ.
იმისათვის, რომ არ ვაიძულოთ კლასს ზედმეტი სამუშაოს შესრულება, ჯერ ვამოწმებთ, გვაქვს თუ არა უკვე მოთხოვნილი გვერდის მზა Html ფაილი.
if ($ tpl -> TestPageStatus () === TRUE) (საჭიროებს $ tpl -> cacheFileName;) სხვას ($ tpl -> გვერდი ("ინდექსი"); # გადაიტანეთ შაბლონის ფაილის სახელი, სხვათა შორის, თქვენ შეუძლია გადასცეს რამდენიმე მათგანი, გამოყოფილი მძიმეებით $ tpl -> მინიჭება ("HEAD", $ head); $ tpl -> მინიჭება ("CONTENT", $ გვერდი); $ tpl -> build (); # მიეცით ბრძანება შექმენით შაბლონი $ tpl -> ShowPage (); # გამომავალი.)
აქ არის ყველა მეთოდი, რომელიც უნდა გამოიყენოთ გვერდის საჩვენებლად.
ახლა მოდით შევხედოთ ამ კლასის რამდენიმე სასარგებლო მეთოდს. ვთქვათ, ჩვენ უკვე გადავეცით კლასს ყველაფერი, რაც გვჭირდება, მაგრამ ჯერ არ მიგვიცია ბრძანება გამოსვლისთვის, რადგან უცებ გაგვახსენდა, რომ შაბლონში რამდენიმე Html ტეგი უნდა შეგვექმნა. ამის გაკეთება ასევე ძალიან მარტივია. პირველ რიგში, ჩვენ უნდა ვიპოვოთ ბლოკი, რომელშიც გვინდა რაღაცის დამატება. თქვენ შეგიძლიათ იპოვოთ იგი 2 გზით:
$ tpl -> findById ("findMe"); $ tpl -> findByTagName ("div");
findById მეთოდი ლოგიკურად ვარაუდობს, რომ შაბლონში ყველა ტეგის ID უნიკალურია. და findByTagName მეთოდი დააბრუნებს პირველს, რომელიც ემთხვევა.
ჩვენ უნდა გადავიტანოთ შედეგი, რომელიც მივიღეთ $ tpl -> createChild () მეთოდის ძიებით, რათა შევძლოთ ნაპოვნი ელემენტში ბავშვის ტეგების შექმნა. მეთოდი createChild, სხვათა შორის, ახალი ელემენტის შექმნის შემდეგ გვიბრუნებს, რათა ახლად შექმნილი ელემენტი სხვაგან გამოვიყენოთ.
ვიპოვე ტეგების შექმნის 3 გზა შაბლონში, ასე რომ, მე გაჩვენებთ 3 მაგალითს ერთდროულად. მაგალითი 1:
ჩვენ უნდა შევქმნათ
შიგნით$ მშობელი = $ tpl -> findById („მშობელი“); $ tpl -> createChild ($ მშობელი, "div", "id = შვილი, კლასი = ტესტი");
ჩვენ ვიღებთ:
მაგალითი 2:
ჩვენ უნდა შევქმნათ
$ მშობელი = $ tpl -> findById („მშობელი“); $ tpl -> createChild ($ მშობელი, "div", "id = შვილი, კლასი = ტესტი", "ზოგიერთი ტექსტი");
ჩვენ ვიღებთ:
მაგალითი 3:
ჩვენ უნდა შევქმნათ
$ მშობელი = $ tpl -> findByTagName ("span"); # (1) $ tpl -> createChild ($ მშობელი, "div", "ახალი ელემენტი"); # (2)
(1) მშობლის ძიება არა id, არამედ ტეგით იპოვის პირველ შესატყვისს
(2) თუ ჩვენ არ გვჭირდება ატრიბუტები, არამედ მხოლოდ ახალი ელემენტის მნიშვნელობა, მაშინ მათი გამოტოვება შეიძლება.
ჩვენ ვიღებთ:
და ამ მანიპულაციების შემდეგ უკვე ვურეკავ ShowPage-ს. და აქ ჩვენ შეუფერხებლად მივდივართ კიდევ 2 საინტერესო პუნქტამდე.
წარმოიდგინეთ სიტუაცია, როდესაც გვაქვს შაბლონი, დავუშვათ, რომ ეს არის list.tpl შაბლონი, ვთქვათ, მობილური ტელეფონების სიით:
(CONTENT.ბრენდი)
(CONTENT.Model)
(CONTENT.Info)თუ ჩვენ გადავეცით ინფორმაცია მხოლოდ 1 ტელეფონის საშუალებით, მაშინ ცვლადები უბრალოდ შეიცვლება მათი მნიშვნელობებით, ხოლო თუ ჩვენ გადავეცით ინფორმაცია ერთდროულად რამდენიმე ტელეფონის საშუალებით, მაშინ კლასი დააკოპირებს ამ განყოფილებას იმდენჯერ, რამდენჯერაც მოვიდა მნიშვნელობების ვარიანტები. ის. და ის ამას თავად გააკეთებს, განსხვავებით, მაგალითად, xTemplate კლასისგან, რომელსაც ჰქონდა მინიჭება და ანალიზი თითოეული მნიშვნელობისთვის.
მართალია, არის ერთი არც თუ ისე მოსახერხებელი მომენტი, თუ ამ ბლოკის შემდეგ არის კიდევ რამდენიმე, მაგალითად:
(CONTENT.ბრენდი)
(CONTENT.Model)
(CONTENT.Info)მაშინ ასეთ სიტუაციაში მოგვიწევს პატარა ხრიკის გამოყენება მობილური ტელეფონის შეფუთვით
(CONTENT.ბრენდი)
(CONTENT.Model)
(CONTENT.Info)ამ შემთხვევაში, ყველა მობილური ტელეფონი გამოჩნდება ერთმანეთის მიყოლებით, შიგნით , და "სხვა ბლოკი" დარჩება ქვემოთ.
და, თუ არაფერი დამავიწყდა, მაშინ ბოლო მომენტი არის სხვა შაბლონების შინაარსის დამატება მიმდინარე შაბლონში.
კიდევ ერთხელ მივმართავ თქვენს ფანტაზიას.
წარმოიდგინეთ, რომ განლაგების დიზაინერს სურს page.html ფაილის შიგთავსი დაემატოს list.html ფაილის ბლოკს, ამისათვის ის ამატებს სწორ ადგილას list.html ფაილში.
ასეთი ჩანართების რაოდენობა შეზღუდული არ არის და მათი მდებარეობა აბსოლუტურად არ არის კრიტიკული, ასე რომ თქვენ შეგიძლიათ ჩასვათ ისინი როგორც გსურთ და ნებისმიერი რაოდენობით.
ალბათ სულ ესაა, თუ რამე გამახსენდა დამატებით შეგატყობინებთ. გმადლობთ, რომ ბოლომდე წაიკითხეთ.
ტეგები: php, კლასი, შაბლონი, შაბლონის ძრავა, პარსერი
შექმნის შემდეგ ინფორმაცია-ფაილი, პრინციპში, თემა უკვე განსაზღვრულია. ეს ნიშნავს, რომ თქვენ შეგიძლიათ გადახვიდეთ თემების მართვის განყოფილებაში http://mysite.ru/admin/build/themesდა შეიყვანეთ თქვენი თემა იქ. ბუნებრივია, ჩართვის შემდეგ თქვენ ვერ ნახავთ რაიმე დიზაინს - გვერდი შეიძენს სტილს "შავი თეთრზე" - შავი ტექსტი თეთრ ფონზე.
თუმცა, მინდა აღვნიშნო, რომ მიუხედავად იმისა, რომ ჩვენს თემაში არ არის ფაილები გარდა mytheme.infoარ იტყუება, საიტი იმუშავებს ისევე, როგორც ადრე - აჩვენეთ მთელი შინაარსი, დაამატეთ ბლოკები რეგიონებში ( http://mysite.ru/admin/build/block) და ა.შ. ეს გამოწვეულია იმით, რომ დრუპალის ბირთვი მოიცავს საჭირო მოდულები, რომელიც, თუნდაც თქვენს თემაში ფაილების არარსებობის შემთხვევაში (ინფორმაციის ფაილის გარდა), საშუალებას გაძლევთ გააგრძელოთ მუშაობა Drupal-თან.
პრინციპში, შაბლონის ყველა შექმნა მცირდება შაბლონის ფაილების გადახურვამდე (მათ აქვთ გაფართოება .tpl.php) ჩვენი სტანდარტული მოდულები CMS.
ყველაზე მნიშვნელოვანი tpl ფაილი (tpl არის მოკლე შაბლონი, ნიმუში) არის page.tpl.php... ის პასუხისმგებელია საიტის თითოეული გვერდის შექმნაზე. ვნახოთ, რისგან შედგება შაბლონის ფაილი:
- html კოდი
- php კოდი
- Javascript კოდი(არ არის საჭირო)
Drupal გადასცემს საიტის მონაცემებს თითოეულ შაბლონის ფაილზე სტანდარტული ცვლადების სახით. თითოეული შაბლონის ფაილის 2 ტიპის ცვლადია:
- ცვლადები, რომლებიც გადაეცემა მხოლოდ ამ ფაილს
- ცვლადები, რომლებიც გადაეცემა ყველა ფაილს
აქ მოცემულია ყველა ცვლადის სია page.tpl.php:
საერთო ცვლადები (ყველა ფაილისთვის):
- $ base_path- ბაზის ბილიკი, სადაც დამონტაჟდა დრუპალი
- $ css- css ფაილების მასივი, რომლებიც დაკავშირებულია მიმდინარე შაბლონის ფაილთან
- $ დირექტორია- გზა საქაღალდეში, სადაც თემაა დაინსტალირებული
- $ არის_წინა- აბრუნებს TRUE-ს, თუ მთავარ გვერდზე ხართ
- $ loged_in- აბრუნებს TRUE-ს, თუ შესული ხართ
- $ is_admin- აბრუნებს TRUE-ს, თუ თქვენ გაქვთ წვდომა ადმინისტრაციულ პანელზე
გვერდის მეტამონაცემები
- $ ენა- (საგანი) აქტუალური ენარომელიც ნაჩვენებია საიტზე
- $ ენა-> ენა- შეიცავს მის ტექსტურ წარმოდგენას
- $ ენა-> რეჟ- შეიცავს ენის მიმართულებას. ეს იქნება ან "ltr" (მარცხნიდან მარჯვნივ) ან "rtl" (მარჯვნიდან მარცხნივ)
- $ head_title- გვერდის სათაურის შეცვლილი ვერსია, ტეგებს შორის გამოსაყენებლად
- $ თავი- ჩასმულია ტეგებს შორის ... შეიცავს მეტა ტეგებს, საკვანძო სიტყვებს და ა.შ.
- $ სტილები- ემსახურება ყველაფრის ჩამოტვირთვას css- ფაილები მიმდინარე გვერდზე
- $ სკრიპტები- ემსახურება ყველაფრის ჩამოტვირთვას javascript "sმიმდინარე გვერდზე
- $ სხეულის_კლასები- კლასების ნაკრები cssტეგისთვის ... ის შეიცავს ინფორმაციას საიტზე სვეტების ამჟამინდელი მდებარეობის, მათი ნომრის, მიმდინარე url "e" და ა.შ.
ინფორმაცია საიტის შესახებ
- $ front_page- საიტის მთავარი გვერდის მისამართი. უმჯობესია გამოიყენოთ ეს ცვლადი მითითებისთვის მთავარი გვერდიმას შემდეგ, რაც მასში შედის დომენის ენა და პრეფიქსი
- $ ლოგო- ბილიკი საიტის ლოგოსკენ, თუ ის შედის საიტზე
- $ site_name- საიტის სახელი. ის შეიძლება ცარიელი იყოს, თუ გამორთავთ მას ინფორმაციის ფაილში არსებულ ფუნქციებში. კონფიგურირებადია mysite.ru/admin/settings/site-information-ზე
- $ საიტის სლოგანი- საიტის სლოგანი. ის შეიძლება ცარიელი იყოს, თუ გამორთავთ მას ინფორმაციის ფაილში არსებულ ფუნქციებში. კონფიგურირებადია mysite.ru/admin/settings/site-information-ზე
- $ მისია- საიტის მისია. ის შეიძლება ცარიელი იყოს, თუ გამორთავთ მას ინფორმაციის ფაილში არსებულ ფუნქციებში. კონფიგურირებადია mysite.ru/admin/settings/site-information-ზე
ნავიგაცია
- $ search_box- შეიცავს html კოდს, რომელიც აჩვენებს საძიებო სტრიქონს. შეიძლება ცარიელი იყოს, თუ მას გამორთავთ ინფორმაციის ფაილში
- $ ძირითადი_ბმულები
- $ secondary_links- მასივი, რომელიც შეიცავს ნავიგაციის ბმულებს საიტისთვის, თუ ისინი დაშვებულია ინფორმაციის ფაილის ფუნქციებში
გვერდის ნაგულისხმევი შინაარსი
- $ დარჩა- რეგიონი. შეიცავს html კოდს მარცხენა სვეტისთვის. თუ ინფორმაციის ფაილში რომელიმე რეგიონს მიუთითებთ, ის ქრება
- $ breadcrumb - "პურის ნამსხვრევები"ამისთვის ამჟამინდელი გვერდი
- $ სათაური- გვერდის სათაური
- $ დახმარება- დინამიური რჩევები, ძირითადად ნაჩვენებია ადმინისტრაციულ პანელში
- $ შეტყობინებები- აჩვენებს შეტყობინებებს საიტზე შეცდომებზე და გაფრთხილებებზე
- $ ჩანართები- ბმულები (ჩანართები), რომლებიც აკავშირებს მიმდინარე გვერდს მის ქვეგვერდებთან (მაგალითად, სტატიისთვის - მისი რედაქტირების გვერდით)
- $ შინაარსი- მიმდინარე გვერდის შინაარსი
- $ უფლება- რეგიონი. შეიცავს html კოდს მარჯვენა სვეტისთვის. თუ ინფორმაციის ფაილში რომელიმე რეგიონს მიუთითებთ, ის ქრება
ქვედა არე / დაფარვის მონაცემები
- $ feed_icon- ხაზი ყველა ხატებით უკუკავშირიმიმდინარე გვერდისთვის
- $ footer_message- შეტყობინება გვერდის ბოლოში. კონფიგურირებადია mysite.ru/admin/settings/site-information-ზე
- $ ქვედა კოლონტიტული- რეგიონი. შეიცავს html კოდს გვერდის ბოლოსთვის. თუ ინფორმაციის ფაილში რომელიმე რეგიონს მიუთითებთ, ის ქრება
- $ დახურვა- დახურვის ეტიკეტი ყველა მოდულისთვის, რომელმაც შეცვალა გვერდი. ეს ცვლადი უნდა იყოს ნაჩვენები მთელი დინამიური შინაარსის შემდეგ. საუკეთესოა BODY ტეგის დახურვამდე
ყველა ჩამოთვლილია აქ სტანდარტული ცვლადები... მაგრამ თქვენ შეგიძლიათ დაამატოთ თქვენი ცვლადები აქ ან რეგიონების მეშვეობით ინფორმაცია-ფაილი, ან ნებისმიერ სხვა როლში ფაილის მეშვეობით template.php(მის შესახებ ცოტა მოგვიანებით).
ახლა მე გაჩვენებთ რა კოდი უნდა იყოს page.tpl.phpდა რა კოდში ხდება მისი ინტერპრეტაცია ბრაუზერების მიერ. აქ არის კოდის ნაწილი page.tpl.php:
პირველი ხაზი ამოწმებს, აქვს თუ არა მიმდინარე გვერდს სათაური. თუ ის იქ არ არის, მაშინ დებუგერი უბრალოდ გამოტოვებს ამ კოდს და არ შეიყვანს მას. თუ სათაური არსებობს, მაშინ ტეგი დაემატება გვერდის html კოდს
, ამის შემდეგ დაიბეჭდება გვერდის სათაური და ეს ყველაფერი დაიხურება ტეგით
... თუ ბრაუზერში შეხედავთ ამ გვერდის კოდს, ის ასე გამოიყურება:
გაკვეთილი 4. საჭირო ფაილები შაბლონის შესაქმნელად. Page.tpl.php
საიტის თითქმის ყველა ცვლადი შეფუთულია ამ გზით. ეს კეთდება ისე, რომ ჩვენ შეგვიძლია შევქმნათ კონტენტის სტილი ისე, რომ წინასწარ არ ვიცოდეთ რა იქნება.
ასე გამოიყურება სტანდარტული ფაილი page.tpl.phpრომელიც მოყვება დრუპალს. შეცვალეთ კლასების სახელი, გადააწყვეთ ცვლადები - და ნახეთ რა მოხდება. ეს აუცილებელია იმისთვის, რომ "შეიგრძნო" როგორ მუშაობს და რა არის ნაჩვენები შედეგად.
"- // W3C // DTD XHTML 1.0 მკაცრი // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> "http://www.w3.org/1999/xhtml" xml: ენა = "ენა?>"ენა = "ენა?>"რეჟი = "რეჟ?>">
"title =" (! LANG:"rel =" მთავარი ">დაბეჭდე $ site_name; ?>
მონაცემთა მიღების ლოგიკის გამიჯვნა მათი ჩვენების ლოგიკისაგან არის ვებ განვითარების ძალიან მნიშვნელოვანი ნაწილი.
ნებისმიერი პროგრამისტი, რომელიც ოდნავ ავიდა "Hello world" დონეზე, იწყებს ასეთი განცალკევების საჭიროების გრძნობას. მაგრამ ყველა არ იღებს სწორ დასკვნებსა და გადაწყვეტილებებს.
აქედან გამომდინარე, აქ არის ყველაზე მნიშვნელოვანი წესები:
1. მიმღები კოდი და მონაცემთა ჩვენების კოდი უნდა იყოს გამოყოფილი.
2. ნებისმიერი გამომავალი უნდა დაიწყოს მხოლოდ მას შემდეგ, რაც ყველა მონაცემი მზად იქნება მისთვის.
3. შედეგად, ნებისმიერი სკრიპტი მხოლოდ მონაცემთა დამუშავებას უნდა ეხებოდეს. ამის შემდეგ, მას შეუძლია ან გაგზავნოს რაიმე სახის HTTP სათაური, ან დაურეკოს შაბლონს, გადასცეს მას მომზადებული მონაცემები, ან ორივე ერთად.
4. რომელი შაბლონის ძრავა გამოვიყენოთ არის მეათე. უმარტივესი და ყველაზე ხელმისაწვდომი არის თავად PHP, ამიტომ მასზე მოყვანილი იქნება მაგალითები.
ბოდვები
ალბათ არ არსებობს ვებ პროგრამირებაში ისეთივე აშკარა და გაუგებარი თემა, როგორც შაბლონები. ყველა, ადრე თუ გვიან, მიდის იმ დასკვნამდე, რომ აუცილებელია შაბლონების გამოყენება. მაგრამ ეს, რატომღაც, რაღაც ველური ილუზიებითა და ფანტაზიებით მოდის.
ყველაზე მარტივი და აშკარა მცდარი წარმოდგენა არის ის, რომ დამწყებთათვის შაბლონს უწოდებენ "დიზაინის" ფაილს, რომელიც არის საერთო html საიტის ყველა გვერდისთვის. და ამაზე დამშვიდდნენ. დინამიური ინფორმაცია, არაფერი უყოყმანოდ, აჩვენებს ძველ კარგ ექოს :-)
სინამდვილეში, შაბლონის ძრავა ძირითადად ეხება საიტის გვერდების ცვალებადი შინაარსის ჩვენებას. და "დიზაინის" დასკვნა მეორეხარისხოვანი ამოცანაა.
არსებობს ორი ძირითადი ფანტაზია:
1. „დიზაინერს“ სჭირდება შაბლონები, რათა შეძლოს მათი რედაქტირება PHP-ის გაგების გარეშე.
2. მაშასადამე, შაბლონები ემსახურება PHP-ს HTML-დან გამოყოფას.
შევეცადოთ ვიფიქროთ პირველ განცხადებაზე. რა არის დიზაინერი? ეს არის ადამიანი, რომელიც მუშაობს Photoshop-ში. ყველაზე ხშირად მან საერთოდ არ იცის HTML. და ან სპეციალური განლაგების დიზაინერი ან - ყველაზე ხშირად ... თავად პროგრამისტი - მუშაობს შაბლონზე! სასაცილოა, არა?
ახლა დასკვნა, PHP-ის HTML-დან გამოყოფის შესახებ. ჯარიმა. ჩვენ წინ გვაქვს განშორების წმინდა მიზანი. მაშასადამე, ჩვენ გამოვდივართ Smarty-ით და ვწერთ:
(foreach key = cid ელემენტი = con from = $ კონტაქტები)
($ con.name) - ($ con.nick)
(/ foreach)
კიდევ უფრო სასაცილო.
„დიზაინერი“, ვისთვისაც ყველაფერი დაიწყო, ბედნიერებისგან იკარგება.
თეორია
გამოდის, რომ ჩვენი მიზეზები, რის გამოც გადავწყვიტეთ შაბლონების გამოყენება არ ღირს. და რა ახლა - არ არის საჭირო, თურმე, ზოგადად შაბლონები? საჭიროა. მაგრამ ჯერ თქვენ უნდა უპასუხოთ კითხვას - "რატომ?" Რისთვისსჭირდება შაბლონები. და შეამოწმეთ პასუხი პრაქტიკით. ბევრჯერ დავუსვი ხალხს ეს კითხვა. მაგრამ თითქმის ვერავინ პასუხობს. რატომ სჭირდება მას შაბლონები. გამოდის, რომ ადამიანები რაღაცას აკეთებენ ისე, რომ არ იციან რატომ.
ეს ყველაზე სასაცილოა.
ვებ პროგრამისტად მუშაობის დროს, მე ჩამოვაყალიბე სამი მიზეზი, რის გამოც მე პირადად მჭირდება შაბლონები. სინამდვილეში, ორი მათგანია. და ბოლოს მივედით ერთ რამეზე:
ერთი კოდი - მრავალი ნახვა.
ხშირად ხდება, რომ ერთი ინფორმაციის ნაცვლად, საჭიროა მეორეს ჩვენება. მაგალითად, მონაცემთა ბაზასთან მუშაობის კოდი ახალი ამბების ტექსტის ნაცვლად იღებს შეცდომის შეტყობინებას. ამ შემთხვევაში, ახალი ამბების გვერდის ნაცვლად, თქვენ უნდა აჩვენოთ სრულიად განსხვავებული - ბოდიშის მოხდა და მოგვიანებით დაბრუნების თხოვნით. შაბლონებით ამის გაკეთება ძალიან მარტივია.
ხშირად ერთი და იგივე ინფორმაცია რამდენიმე ფორმით უნდა იყოს ნაჩვენები. მაგალითად, ჩვეულებრივი გვერდი და ბეჭდური გვერდი. ინფორმაცია იგივეა, ამოღების კოდი იგივეა და გამომავალი კოდი განსხვავებულია. ასეთი სიტუაციის წინაშე, თქვენ შეგიძლიათ ძალიან სწრაფად გაყოთ თქვენი კოდი ორ ნაწილად, რომელთაგან ერთი პასუხისმგებელია გამოსავალზე, ხოლო მეორე არ არის პასუხისმგებელი. კიდევ ერთი მაგალითი: ვთქვათ, გვინდოდა ინფორმაციის გამოტანა არა პირდაპირ HTML-ში, არამედ AJAX მოთხოვნის მეშვეობით, JSON ფორმატში. თუ ჩვენ ვიყენებდით შაბლონის ძრავას, მაშინ ჩვენ ვცვლით ზუსტად ერთ ხაზს ჩვენს კოდში - შაბლონის ძრავის გამოძახებით json_encode (). და თუ ჩვენი გამომავალი შერეული იყო მონაცემთა მიღების კოდთან, მაშინ მთელი კოდი უნდა გადაიწეროს!
სიტუაცია გარკვეულწილად მსგავსია: ვთქვათ, ჩვენი სკრიპტი ორ საიტზეა. პლუს ასლი ჩვენს ადგილზე. ასე რომ, სახლში დიდი შეცდომა აღმოვაჩინეთ. დახურეთ იგი. ახლა ჩვენ გვჭირდება საიტებზე კოდის განახლება. და აი, ეს არის - სიმართლის მომენტი: თუ შაბლონები სწორად იქნა გამოყენებული, მაშინ ჩვენ უბრალოდ ავტვირთავთ კოდს ორივე საიტზე და ყველაფერი აგრძელებს მუშაობას, თითქოს არაფერი მომხდარა! ეს სიტუაცია, ჩემი აზრით, იდეალური ტესტია შაბლონის არჩეული მიდგომისა.
კიდევ ერთი მნიშვნელოვანი მომენტი, რომელიც ბევრს გამოტოვებს (მათ თეორიულ მსჯელობაში, მაშინ როცა პრაქტიკაში მუდმივად ხვდებიან!) - სკრიპტის შესრულების თანმიმდევრობა ყოველთვის არ ემთხვევა შაბლონში გამოტანის თანმიმდევრობას... სახელმძღვანელოს მაგალითი - სტატიის სათაურის ჩვენება ტეგში
ასევე უნდა გვახსოვდეს, რომ PHP ტექსტის გარდა, სკრიპტები ასევე აჩვენებს HTTP სათაურებს. რომელიც უნდა იყოს ნაჩვენები ნებისმიერი ტექსტის წინ, ან თუნდაც ზოგადად ტექსტის ნაცვლად (თუ, მაგალითად, გვსურს მომხმარებლის გადამისამართება სხვა გვერდზე). თუ ჩვენ ჯერ განვახორციელებთ აპლიკაციის ლოგიკას, ერთდროულად არაფრის ჩვენების გარეშე, მაშინ საჭირო HTTP ჰედერის გაცემა არანაირ პრობლემას არ შეგვიქმნის.
თქვენ შეიძლება გქონდეთ შაბლონების გამოყენების საკუთარი მიზეზები. მაგრამ მხოლოდ ერთი პირობით - ეს მიზეზები რეალური, სასიცოცხლო აუცილებლობით უნდა იყოს გამოწვეული და არა „უფრო მაღალი მოსაზრებებით“ და ზოგიერთი უცნობი ადამიანის მიმართ ზრუნვით.
ივარჯიშე
ახლა მოდით გადავიდეთ თეორიიდან პრაქტიკაზე.
უმარტივეს შემთხვევაში, ნებისმიერი გვერდის ჩვენებაში, ყოველთვის გვექნება ორი შაბლონი: საიტის ზოგადი შაბლონი და კონკრეტული გვერდის შინაარსის შაბლონი.
ვთქვათ, გვინდა შევქმნათ გვერდი მეგობრების საიტებზე ბმულებით.
ამ შემთხვევაში, გამარტივებული კოდი ასე გამოიყურება:
თავად links.php ფაილი. გამოაქვს არაფერი. ის მხოლოდ ამზადებს მონაცემებს და შემდეგ უწოდებს შაბლონს.
// ჩართეთ პარამეტრები.
მოიცავს "settings.php";
// მონაცემთა ბაზიდან მიღება, ცვლადების განსაზღვრა
$ pagetitle = "(! LANG: ბმულები"
;!}
$ DATA = $ db -> getAll ("SELECT * FROM links");
// დააყენეთ გვერდის შაბლონი და გამოიძახეთ ზოგადი საიტის შაბლონი
$ tpl = "tpl_links.php";
მოიცავს "tpl_main.php";
ზოგადი შაბლონი (tpl_main.php):
include $tpl ?>
სწორ ადგილას, მასში შედის ჩვენი გვერდის შაბლონი (tpl_links.php):
=$pagetitle?>
- "target =" _blank ">=$row [ "name" ] ?>
foreach($DATA as $row ): ?>
endforeach ?>
უმარტივესი გზაა შაბლონების შექმნა HTML-ში უკვე ასახულ სტატიკურ გვერდებზე დაყრდნობით. მოდით განვიხილოთ შაბლონის შექმნა და დაკავშირება მაგალითის გამოყენებით. ვთქვათ, თქვენ უკვე გაქვთ HTML ფაილი შემდეგი შინაარსით:
<html> <თავი> <მეტა სახელი = "აღწერა"შინაარსი = /> <მეტა სახელი = "საკვანძო სიტყვები"შინაარსი = /> <სათაური>სათაური> <ბმული href = "style.css" rel = "სტილის ფურცელი"ტიპი = "ტექსტი / css" /> თავი> <სხეული>// საწყისი მენიუ<მაგიდის საზღვარი = "1" > <tr> <td><a href = "/" > <ბ>სახლშიბ>ა>td> tr> <tr> <td><a href = "/ დაახლოებით /"> Ჩემს შესახება>td> tr> <tr> <td><a href = "/ მე_და_მე /"> მე და მსოფლიო ბატონობაა>td> tr> <tr> <td><a href = "/ კონტაქტები /"> კონტაქტებია>td> tr> მაგიდა>// მენიუს დასასრული<h1>მთავარი გვერდიh1> <p> p> <p>ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ:p> <p>ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ:p> <p>ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ:p> სხეული> html>CMS-ში შაბლონის დასამატებლად, თქვენ უნდა შექმნათ ფაილი tpls / content დირექტორიაში, მაგალითად, test.tpl და ჩადეთ თქვენი HTML კოდი იქ. CSS ფაილი უნდა განთავსდეს css / cms საქაღალდეში და დაასახელოს style.css. სასურველია სურათები სურათების საქაღალდეში განთავსდეს. არ დაგავიწყდეთ ყველა სურათისა და CSS ფაილის ბილიკების შეცვლა.
კომენტარი
რუსული ასოები არ შეიძლება გამოყენებულ იქნას შაბლონის ფაილის სახელში!
იმისათვის, რომ სისტემამ „დაინახოს“ ახალი შაბლონი და დაიწყოს მისი გამოყენება გვერდების ჩვენებისთვის, თარგი უნდა დაემატოს სისტემას. ამისათვის გადადით "სტრუქტურის" მოდულის პარამეტრებზე, "თარგები" ჩანართზე ( http://yourdomain.ru/admin/content/config/ ). თქვენ იხილავთ უკვე დაინსტალირებული შაბლონების ჩამონათვალს თითოეულ დომენში, რომელიც არსებობს შერჩეული ენის ვერსიაში.
ახალი შაბლონის ფაილის დასაკავშირებლად, შეავსეთ ველების ქვედა თავისუფალი ხაზი " შაბლონის სახელი(მაგალითად, მიეცით რაიმე მნიშვნელოვანი სახელი) ჩემი ტესტის ნიმუში") და" ფაილის სახელი "(ჩვენს შემთხვევაში, test.tpl) და დააჭირეთ ღილაკს "შენახვა".
თუ გსურთ, რომ ეს შაბლონი ნაგულისხმევ შაბლონად იყოს გამოყენებული, მონიშნეთ მის გვერდით „მთავარი“. ეს შაბლონი ახლა შეირჩევა ნაგულისხმევად შაბლონის შერჩევის ჩამოსაშლელ სიაში. ის ასევე გამოყენებული იქნება სისტემის გვერდების საჩვენებლად, რომლებიც იყენებენ ნაგულისხმევ შაბლონს (რეგისტრაცია, პაროლის აღდგენა, საიტის რუკა).
შაბლონები გამოჩნდება ჩამოსაშლელ სიაში თითოეული გვერდის რედაქტირებისას:
ამრიგად, ერთ საიტზე შეგიძლიათ გამოიყენოთ მრავალი შაბლონი ერთდროულად, შეარჩიოთ შესაბამისი შაბლონი როგორც ერთი გვერდისთვის, ასევე გვერდების ჯგუფისთვის.
სცადეთ შექმნათ ახალი გვერდი (დარწმუნდით, რომ ახალი შაბლონი არჩეულია დიზაინის შაბლონის ოფციაში) და ნახეთ რა ხდება საიტზე.
თქვენი HTML შაბლონი უნდა გამოჩნდეს საიტზე. მაგრამ ახლა ის სტატიკურია. ახლა თქვენ უნდა გახადოთ ის დინამიური.
პირველ რიგში, თქვენ უნდა დაადგინოთ HTML კოდის რომელი ნაწილები შეიცვლება. ჩვენს შემთხვევაში შეიცვლება შემდეგი:
ფანჯრის სათაური
მეტა ტეგები საკვანძო სიტყვები და აღწერა;
ტექსტის სათაური
;
ფაქტობრივი ტექსტი;
საიტის მენიუ.
ეს ნიშნავს, რომ ცოტა უნდა ვიმუშაოთ HTML შაბლონთან და ცვალებადი სექციების ნაცვლად დავაყენოთ შესაბამისი მაკროები.
მაგალითად, HTML ფაილის დასაწყისში არის მეტა ტეგები და სათაური:
<მეტა სახელი = "აღწერა"შინაარსი = "ვასილი პუპკინის საიტის აღწერა" /> <მეტა სახელი = "საკვანძო სიტყვები"შინაარსი = "ვასია ვასილი პუპკინის ოფიციალური საიტი" /> <სათაური>ვასია პუპკინის ვებგვერდი: მთავარი გვერდისათაური>ჩვენ მათ ვცვლით შესაბამისი მაკროებით (მაკროების სია მოცემულია დანართში):
<მეტა სახელი = "აღწერა"შინაარსი = "% აღწერა%" /> <მეტა სახელი = "საკვანძო სიტყვები"შინაარსი = "% საკვანძო სიტყვა%" /> <სათაური>% სათაური%სათაური>ახლა, გვერდების გენერირებისას, სისტემა აიღებს თითოეული გვერდისთვის ინდივიდუალურად დადგენილ მეტატეგებს და სათაურს და ჩაანაცვლებს მათ შესაბამისი მაკროების ნაცვლად. მაკროების სახელების დამახსოვრება ძალიან ადვილია.
იგივე გავაკეთოთ ტექსტის სათაურთანაც. ეს იყო ასეთი:
<h1>მთავარი გვერდიh1>და ასეც გახდება. ტექსტის სათაური ნაჩვენებია % header% მაკროთი:
<h1>% სათაური %h1>იცვლება გვერდის ძირითადი ტექსტიც:
<p>ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ:p> <p>ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ:p> <p>ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ:p> <p>ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ: ტექსტი ჩემს შესახებ:p>არის მაკრო გვერდის ძირითადი ტექსტის საჩვენებლად % შინაარსი% :
% შინაარსი%ტეგებს შორის ფაილის დასაწყისამდე
დაჩადეთ მაკრო:ეს ხაზი იძლევა სწრაფ რედაქტირებას და სხვა სასარგებლო ფუნქციებს. მასთან ერთად შეგიძლიათ დაჭერით ცვლა +დ, სწრაფად გადადით საიტის მიმდინარე გვერდის ან მისი რომელიმე ფრაგმენტის რედაქტირებაზე.
შედეგად, თქვენ უნდა მიიღოთ შემდეგი:
<html> <თავი> <მეტა სახელი = "აღწერა"შინაარსი = "% აღწერა%" /> <მეტა სახელი = "საკვანძო სიტყვები"შინაარსი = "% საკვანძო სიტყვა%" /> <სათაური>% სათაური%სათაური> <ბმული href = "style.css" rel = "სტილის ფურცელი"ტიპი = "ტექსტი / css" /> % სისტემა მოიცავსQuickEditJs ()%თავი> <სხეული>// საწყისი მენიუ<მაგიდის საზღვარი = "1" > <tr> <td><a href = "/" > <ბ>სახლშიბ>ა>td> tr> <tr> <td><a href = "/ დაახლოებით /"> კომპანიის შესახება>td> tr> <tr> <td><a href = "/ პროექტები /"> პროექტებია>td> tr> <tr> <td><a href = "/ კონტაქტები /"> კონტაქტებია>td> tr> მაგიდა>// მენიუს დასასრული<h1>% სათაური %h1>% შინაარსი%სხეული> html>ასე რომ, ჩვენ ვინახავთ შაბლონის ფაილს და ვუყურებთ შედეგს. გვერდი ახლა თითქმის მთლიანად დინამიურია, მენიუს გარდა. აუცილებელია საიტის მენიუს „აღორძინება“. ვნახოთ, როგორ არის ჩამოყალიბებული მენიუ:
// საწყისი მენიუ<მაგიდის საზღვარი = "1" > <tr> <td><a href = "/" > <ბ>სახლშიბ>ა>td> tr> <tr> <td><a href = "/ დაახლოებით /"> Ჩემს შესახება>td> tr> <tr> <td><a href = "/ მე_და_მე /"> მე და მსოფლიო ბატონობაა>td> tr> <tr> <td><a href = "/ კონტაქტები /"> კონტაქტებია>td> tr> მაგიდა>// მენიუს დასასრულიმენიუ შედგება ნივთებისგან. თავად მენიუ რაღაცნაირად გაფორმებულია და ნივთებსაც აქვს დიზაინი. მაგალითად, მთელ მენიუს შეიძლება ჰქონდეს რაიმე სახის ჩარჩო ან ფონი, მენიუს მიმდინარე ელემენტი შეიძლება იყოს მონიშნული თამამად და ა.შ. ასევე, ერთსა და იმავე მენიუში შეიძლება იყოს სხვადასხვა დონე.
აირჩიეთ მენიუს ჩარჩო:
// საწყისი მენიუ<მაგიდის საზღვარი = "1" > მაგიდა>// მენიუს დასასრულიმენიუს ელემენტი შექმნილია შემდეგნაირად:
<tr> <td><a href = "/ კონტაქტები /"> კონტაქტებია>td> tr>მენიუს ამჟამინდელი ელემენტის სტილი განსხვავებულია:
<tr> <td><a href = "/" > <ბ>სახლშიბ>ა>td> tr>მენიუს ორიგინალური შაბლონი მდებარეობს /tpls/content/menu/default.tpl ფაილში და ასე გამოიყურება:
% ტექსტი%