PHP. დინამიური გვერდის შექმნა. დინამიური გვერდები PHP Ready php გვერდზე

PHP-ში დინამიური ვებსაიტის უმარტივესი მაგალითი, უფრო ადვილია, ვიდრე ერთი შეხედვით ჩანს.

ეს ნიმუში შაბლონი მუშაობს MSQL მონაცემთა ბაზების გარეშე, მაგრამ ეს წყდება განვითარების პროცესში და ამ ეტაპზე ყველაფერი იწერება HTML-ში და PHP-ში. სამომავლოდ უფრო რთული შაბლონის მაგალითს გაჩვენებთ, მაგრამ ახლა ყურადღებას გავამახვილებთ მარტივზე, რაც სავსებით საკმარისია შესანიშნავი ვებსაიტის შესაქმნელად.

თუ თქვენ გჭირდებათ ვებსაიტის შექმნა და პოპულარიზაცია შეკვეთით, მაშინ უნდა დაუკავშირდეთ დადასტურებულ ვებ სტუდიას ვებსაიტის პოპულარიზაციისთვის.

პირველ რიგში, თქვენ უნდა ისწავლოთ და გაიგოთ განსხვავება დინამიკასა და მარტივ html საიტს შორის, რომელიც აღწერილი იყო ბოლო გაკვეთილზე და რომლის საფუძველზეც აშენდება ეს პროექტი. ამიტომ მიზანშეწონილია შესწავლა, მაშინ ძალიან ადვილი იქნება ამ სტატიის გაგება.

და განსხვავება მარტივი ვებსაიტისგან მდგომარეობს ზუსტად სერვისის სიჩქარეში! ვინც უკვე იცნობს მარტივ HTML საიტს, იცის, რომ ბანერის შესაცვლელად საჭიროა მთელი საიტის, ყველა გვერდის გავლა... რასაც დიდი დრო სჭირდება. ხოლო დინამიურ რეჟიმში - ყველაფერი შეიძლება გაკეთდეს რამდენიმე წუთში, რამდენი გვერდიც არ უნდა ჰქონდეს საიტს, თუნდაც 1000, ეს არ მოქმედებს რედაქტირების დროზე! ვფიქრობ, ესეც საკმარისია ამ მაგალითის შესასწავლად!

მაგალითად, ჩვენ ავიღებთ ვებსაიტის შაბლონს, რომელიც დაწერილია ტეგის გამოყენებით

ასე რომ, შეხედეთ ჩვეულებრივი შაბლონის გვერდის მაგალითს, რომელსაც დავჭრით ცალკეულ ფაილებად.


































- აქ იქნება გაჭრა და შიგთავსი იქნება ცალკე ფაილი -



საიტის შინაარსი





- ყველაფერი ქვემოთ ასევე იქნება ცალკე ფაილი -

















ლამაზი ჩასმა
მენიუ საიტისთვის








































HTML შაბლონის დაჭრა PHP ბლოკებად.

პირველი ფაილი შეიცავს საიტის მთელ სათაურს, ბლოკის გახსნამდე

და დაერქმევა header და ყოველთვის php გაფართოებით!!!


































და ფაილის სახელი იქნება header.php


მეორე ფაილი იქნება მთავარი, რომელიც შეიცავს საიტის მთელ შინაარსს – კონტენტს, რომელიც არ შეიცვლება მომავალში ან ძალიან იშვიათად. სტატია, როგორც წესი, ერთხელ იდება და ცვლილებები ერთ გვერდზე არ არის პრობლემა. დიზაინზე პასუხისმგებელი დანარჩენი ფაილები მასთან იქნება დაკავშირებული. და მას დაერქმევა მაგალითად - title.php



საიტის შინაარსი



— აქ იქნება განყოფილება, შინაარსი ასევე იქნება ცალკე ფაილი —



და ფაილის სახელი იქნება title.php


ყველაფერი დანარჩენი - მარცხენა გვერდითი ზოლის ბლოკი და ქვედა კოლონტიტული - ჩამოყალიბებულია მესამე ფაილად - footer.php.




- ყველაფერი ქვემოთ ასევე იქნება ცალკე ფაილი -

















ლამაზი ჩასმა
მენიუ საიტისთვის








































და ფაილის სახელი იქნება footer.php


ახლა თქვენ შეგიძლიათ დაიწყოთ ჩვენი ვებსაიტის დიზაინერის მსგავსად აწყობა და გაიგოთ დინამიური ვებსაიტის შექმნის მთელი საიდუმლო. ამისათვის თქვენ უნდა დააკავშიროთ ორი ფაილი მთავარ ფაილთან, რომლებიც პასუხისმგებელნი არიან დიზაინზე და შეიცავს მარცხენა გვერდითა ზოლს. სწორედ აქ გვჭირდება PHP-ის საბაზისო ცოდნა, რომლის გარეშეც არაფერი გამოვა. და ამისთვის ჩვენ უნდა გამოვიყენოთ მოთხოვნა ფუნქცია, რომელიც უკვე ვიცით.




- header.php ფაილის დაკავშირება



საიტის შინაარსი








— აკავშირებს footer.php ფაილს


და ახლა ჩვენი გვერდი დასრულებულია! და ეს ფაილი - title.php იქნება შაბლონი, საიდანაც გენერირდება ახალი გვერდები.
და შევქმნათ მთავარი, რომლის სახელი იქნება index.php. ამისთვის უბრალოდ დააკოპირეთ title.php ფაილი და იმავე საქაღალდეში შენახვისას დაარქვით სახელი index.php. და ყველა ახალი გვერდი იქმნება იმავე პრინციპით. მხოლოდ კონტენტი იქნება განსხვავებული, დანარჩენი ყველაფერი საერთო იქნება და მყისიერად ადვილად შეცვლა!!!

და რაც არ უნდა პროგრამით გახსნას თქვენი php ფაილები, მე მაქვს დაყენებული PHP Expert Editor პროგრამა, რომლის მეშვეობითაც ძალიან მოსახერხებელია გვერდების ტრანსკოდირება, ისე უნდა გამოვიდეს როგორც სურათზე. საჭიროა ორი ფაილი და სამი გვერდი.

და შემდეგ შეგიძლიათ დაამატოთ თქვენი საკუთარი ცვლილებები, იმისდა მიხედვით, თუ რა გსურთ თქვენი საიტიდან. მაგალითად, თუ შეიყვანთ ცვლადს, რომელიც აჩვენებს თითოეული გვერდის სათაურს ცალკე,
შემდეგ თქვენ უნდა დაამატოთ ეს კოდი header.php ფაილში




<?php echo «$title»; ?>


და დაამატეთ კოდი შაბლონში, რომელიც შეიცავს თქვენს უნიკალურ გვერდის სახელს, რაც აუცილებელია სწორი .






$title ='დინამიური ვებსაიტის მაგალითი PHP-ში. ';


მოითხოვს 'header.php';


?>



საიტის შინაარსი



აქ შეგიძლიათ დაწეროთ ყველაფერი და ჩადოთ ნებისმიერი ინფორმაცია,


მნახველისთვის განკუთვნილი.






თქვენი ყურადღება მინდა გავამახვილო ერთ ძალიან მნიშვნელოვან საკითხზე. ეს ეხება ნებისმიერი სირთულის ვებსაიტის შემუშავებას - ახალი პროექტის შექმნამდე ძალიან ფრთხილად და მკაფიოდ განსაზღვრეთ პროექტის ყველა მომავალი ფუნქცია. მაგალითად, თუ არის ბლოგი, მაშინ საჭიროა კომენტარების ბლოკი და ამისთვის უნდა შეიყვანოთ ცვლადი, რომელიც განსაზღვრავს გვერდის უნიკალურ მისამართს და ა.შ. ერთი სიტყვით - ზოგადი უნდა დაფიქრდეს მანამდე..., რადგან შემდეგ - იქნება ბევრი ხარვეზი, რომელთა გამოსწორებას ძალიან დიდი დრო და მტკივნეული დრო დასჭირდება და ეს რჩევა ეხება როგორც მარტივ საიტებს, ასევე კომპლექსურ პროექტებს, რომლებიც აგებულია. სუპერ ახალი ძრავა!

ჩვენ ვისაუბრეთ მხოლოდ სტატიკურ გვერდებზე, ანუ მათზე, რომლებიც, როგორც არ უნდა ურთიერთობდეს მომხმარებელი მათთან, ყოველთვის უცვლელი რჩება და იმისათვის, რომ მათი შინაარსი ან დიზაინი შეიცვალოს, გვერდის მფლობელმა ხელით უნდა შეცვალოს კოდი.

დინამიური გვერდები და რა სჭირდებათ

სტატიკური გვერდების გარდა არის დინამიური გვერდებიც. ეს არის ინტერნეტში მყოფი ადამიანების უმრავლესობა. მათში არსებული ინფორმაცია იტვირთება გარე წყაროებიდან, როგორიცაა მონაცემთა ბაზა ან სხვა ფაილები. ასეთი გვერდების შინაარსი და ფორმატირება შეიძლება შეიცვალოს მომხმარებლის აქტივობიდან გამომდინარე. დინამიური საიტების რედაქტირებისთვის არ არის საჭირო მათ კოდში ჩარევა - საკმარისია კონტენტის შეცვლა სპეციალურად შემუშავებულ ფაილში ან მონაცემთა ბაზაში, რომელიც, სხვათა შორის, ასევე არის ფაილი, მხოლოდ გარკვეულწილად სტრუქტურირებული.

მხოლოდ HTML და CSS არ არის საკმარისი დინამიური ვებსაიტების შესაქმნელად. აქ ასევე გამოიყენება პროგრამირების ენები, ასევე მათთვის მონაცემთა ბაზები და შეკითხვის ენები. ყველაზე ხშირად, თანამედროვე დინამიური ვებსაიტები თავიანთ მუშაობაში იყენებენ HTML, CSS, PHP, JavaScript და SQL. პირველი ორი აბრევიატურა უკვე ნაცნობია თქვენთვის, SQL გამოიყენება მონაცემთა ბაზებზე წვდომისთვის, JavaScript არის კლიენტის ენა, რომლის ბრძანებები მუშავდება ბრაუზერის მიერ და ხშირად გამოიყენება ყველა სახის სილამაზის საჩვენებლად, როგორიცაა ფარდები ან შეუფერხებლად გახსნილი ფოტოები. , მაგრამ PHP არის სერვერის პროგრამირების ენა, რომელიც მუშაობს, სხვა საკითხებთან ერთად, საიტის შინაარსთან და ხდის მას დინამიურს, ჩვენ მას დღეს შევეხებით.

მოიცავს ბრძანების გამოყენების მაგალითი

წინა სტატიაში მე ვისაუბრე საიტის ბლოკის განლაგებაზე და მოვიყვანე მარტივი გვერდის (დოკუმენტი) მაგალითი index.htmlდა მასზე მიმაგრებული ფაილი სტილი.css).

ახლა ჩვენ დავყოფთ დოკუმენტს index.htmlრამდენიმე ფაილად, რომელთაგან თითოეული შეიცავს გვერდის საკუთარ ნაწილს, რაც ხელს შეუწყობს კოდის შემდგომ დაყოფას, შაბლონის სტრუქტურის გაუმჯობესებას და, ფაქტობრივად, გვერდის დინამიურს. ამ მიზნით გამოვიყენებთ PHP ენას, უფრო სწორად, მის მხოლოდ ერთ დირექტივას - ფუნქციას მოიცავს (), რომელიც მოიცავს ერთ ფაილს მეორეში.

1. ბლოკის განლაგების შესახებ სტატიაში შექმნილი ფაილის გარჩევადობის შეცვლა ინდექსითან .html on .phpისე რომ დოკუმენტი ე.წ index.php. ფაილის ტიპი .PHPმიუთითებს სერვერზე, რომ დოკუმენტი დაიწერა ან იყენებს ჩანართებს ამავე სახელწოდების პროგრამირების ენაზე.

2. გვერდის მქონე საქაღალდეში შექმენით დირექტორია ბლოკები.

3. ჩვენ განვათავსებთ ყველა დამხმარე ინფორმაციას (საიტის ზედა, ქვედა, ნავიგაცია და გვერდითი ზოლი) ცალკეულ ფაილებში, რომლებსაც განვათავსებთ საქაღალდეში. ბლოკები.

ასე რომ, შექმენით ოთხი ფაილი ბლოკების დირექტორიაში: header.php, ნავიგაცია.php, გვერდითი ზოლი.phpდა ძირი.php. შეავსეთ ფაილები კოდით.

4. შეამოწმეთ შაბლონის საქაღალდის სტრუქტურა. ფაილები უნდა იყოს root-ში index.php, სტილი.cssდა დირექტორია ბლოკები.

საქაღალდის სტრუქტურა ბლოკებიასეთი უნდა იყოს.

5. ფაილზე index.phpამოიღეთ არსებული კოდი და დაწერეთ ახალი:

ბლოკის განლაგება

მთავარი გვერდის შინაარსი



ბრაუზერში index.php ფაილი ზუსტად ისე გამოიყურება, როგორც ადრე, მაგრამ შაბლონის სტრუქტურა მთლიანად შეიცვალა. ჩვენ მოგვიანებით ვისაუბრებთ იმაზე, რაც მოხდა, მაგრამ ახლა ჩვენ ვუპასუხებთ კითხვას იდუმალი ბრძანებების შესახებ, როგორიცაა .

HTML კოდის მსგავსად, PHP კოდსაც აქვს თავისი დასაწყისი და დასასრული. ასე რომ თქვენ უნდა დაიწყოთ PHP ჩასმა ბრძანებით , და დასრულდება ხაზით ?> . ამ ბრძანებებს შორის იწერება მთავარი კოდი. ჩვენს შემთხვევაში, ეს მხოლოდ ერთი ბრძანებაა - მოიცავს.

ფუნქცია მოიცავს ()ათავსებს კოდს სხვა ფაილიდან ფაილში, რაც შესაძლებელს ხდის გვერდის სხვადასხვა ნაწილების სხვადასხვა დოკუმენტებში შენახვას, რითაც საიმედოდ გამოყოფს მათ ერთმანეთისგან.

შესრულებული მოქმედებების შედეგად მივიღეთ დინამიური გვერდი index.php, რომლის ნაწილები იტვირთება სხვადასხვა ფაილებიდან. ამის წყალობით, თქვენ შეგიძლიათ შექმნათ სხვა გვერდები, ჩატვირთოთ მათში დამხმარე ელემენტები საქაღალდის ფაილებიდან იმავე გზით. ბლოკები.

ეს მიდგომა კარგია, რადგან თუ გსურთ შეცვალოთ, ვთქვათ, მენიუს ელემენტის სახელი 20-30 გვერდიან ვებსაიტზე, მაშინ ახლად შექმნილი სტრუქტურის მქონე შაბლონში დაგჭირდებათ ცვლილებების შეტანა მხოლოდ ერთ ფაილში - ბლოკები/ navigation.php და მენიუ დაუყოვნებლივ შეიცვლება ყველა გვერდზე, რომელშიც ის შედის. თუ საიტი სტატიკური იყო, მაშინ მენიუს ერთი ელემენტის სახელის შესაცვლელად მოგიწევთ ცვლილებების შეტანა ყოველი 20-30 გვერდიდან. განსხვავება აშკარაა.

წინა გაკვეთილებიდან ვისწავლეთ, რომ GET მეთოდის გამოყენებით ჩვენ შეგვიძლია გადავიტანოთ რამდენიმე პარამეტრი პირდაპირ URL-ზე. თუმცა, არაფერი გვიშლის ხელს ამის გაკეთებაში ფორმების გარეშე, უბრალოდ ჩამოვთვალოთ ისინი URL-ში.

ჩვენ შეგვიძლია გადავიტანოთ პარამეტრები URL-ით. და ჩვენ შეგვიძლია მივიღოთ ეს პარამეტრები პირდაპირ სკრიპტში. მაშ, რა გვიშლის ხელს იმაში, რომ მომხმარებლისთვის სხვადასხვა გვერდების ჩვენება URL-ში მოცემული პარამეტრების მიხედვით?

დინამიური გვერდის შექმნა

მომხმარებლისთვის სხვადასხვა გვერდის საჩვენებლად საჭიროა კონტენტის მომზადება. დაე, ის მოთავსდეს მრავალგანზომილებიან მასივში:

"დინამიური გვერდების შექმნა", "კონტენტი" => "სტატიის ტექსტი დინამიური გვერდების შესახებ."

URL-ში დინამიურ პარამეტრს დაერქმევა id და ჩვენ მას დავიჭერთ $_GET["id"]-ში. ჩვენ შეგვიძლია დავამატოთ id ველი მასივის თითოეულ ელემენტს, მაგრამ შემდეგ ჩვენ უნდა გავიმეოროთ ყველა ელემენტი და მოვძებნოთ ქვემაივი სასურველი id-ით. აქედან გამომდინარე, ბევრად უფრო ადვილია ძირითადი მასივის კლავიშების ID-ებად გამოყენება.

მარტივად რომ ვთქვათ, ვიღებთ id-ს და ვცდილობთ ვიპოვოთ სტატია ამ გასაღებით $articles მასივში. ეს ასე გამოიყურება:

რჩება მხოლოდ მენიუს გამომავალი ესკიზის დახატვა და id-ის სისწორის შემოწმება. გამოდის, რომ ეს არის ნამდვილი PHP როუტერი!

"მთავარი გვერდი", "კონტენტი" => "სტატიის ტექსტი ჩვენი საიტის შესახებ" ], [ "სათაური" => "დინამიური გვერდების შექმნა", "კონტენტი" => "სტატიის ტექსტი დინამიური გვერდების შესახებ." ], [ "title" => "როგორ დავიჭიროთ კნუტი", "content" => "სტატიის ტექსტი კნუტების შესახებ."

] ];

# თუ ID გადაცემულია, დაწერეთ სტატია $article-ზე ან null თუ არ არის სტატია ამ ID-ით if(isset($_GET["id"])) $current_article = $articles[$_GET["id"]] ?? null;

# თუ ID არ არის გადაცემული, მაშინ ეს არის მთავარი გვერდი, ჩვენ შეგვიძლია ვაჩვენოთ გვერდი id = 0 else $current_article = $articles; ?>

$article): ?> ">

შეცდომა 404: გვერდი ვერ მოიძებნა

ახლა თქვენ შეგიძლიათ შექმნათ დინამიური საიტები, სადაც გვერდების რაოდენობა დამოკიდებულია მასივის ელემენტების რაოდენობაზე და არა PHP ფაილებზე. :) თუ საიტს უნდა ჰქონდეს სხვადასხვა ტიპის გვერდები, მაგალითად, სტატია და პროდუქტი, შეგიძლიათ მეორე პარამეტრად გადასცეთ გვერდის ტიპი: site.ru?type=article&id=5 .
ჩვენ ვქმნით ცხრილს ახალ მონაცემთა ბაზაში. მოდით ვუწოდოთ მას "გვერდები". ეს ცხრილი შეინახავს მომავალი საიტის სტატიკურ გვერდებს და მათ შესახებ ინფორმაციას. ცხრილი უნდა შეიცავდეს შემდეგ ველებს:

  • page_id - გვერდის იდენტიფიკატორი (SMALLINT, პირველადი გასაღები, auto_increment);
  • page_alias - გვერდის მეტსახელი CNC მისამართის ხაზისთვის (VARCHAR, 255);
  • page_title - გვერდის სათაური ბრაუზერის ფანჯარაში (VARCHAR, 255);
  • page_meta_d - გვერდის მეტა აღწერა მეტა აღწერილობის ტეგისთვის (VARCHAR, 255);
  • page_meta_k - მეტა საკვანძო სიტყვები მეტა საკვანძო სიტყვების ტეგისთვის (VARCHAR, 255);
  • page_h1 - გვერდის სათაური (VARCHAR, 255);
  • page_s_desc - მასალის მოკლე აღწერა, მაგალითად, თუ საიტის მასალები იქნება ბლოგის სახით (TEXT);
  • page_content - გვერდის მთავარი ტექსტი, რომელიც გამოჩნდება საიტის ცენტრალურ სვეტში (TEXT);
  • page_publish - შეიცავს "Y" - თუ გვერდი გამოქვეყნებულია, ან "N" - თუ ის დამალულია (CHAR, ნაგულისხმევი "Y").

ცხრილის შექმნისთანავე, მასში ჩავსვით მნიშვნელობები საიტის მთავარი გვერდისთვის. მთავარი გვერდის "page_alias" ველში, მე გთავაზობთ ჩადეთ მნიშვნელობა "home". მეტა ტეგები შეესაბამება მთელი საიტის თემას. ანალოგიურად, თქვენ შეგიძლიათ შექმნათ სხვა გვერდები, მაგალითად, „კომპანიის შესახებ“ მეტსახელით „შესახებ“ და საკუთარი მეტა თეგებით, ან „კონტაქტები“ ფსევდონიმით „კონტაქტები“ და ა.შ.

2. შექმენით საიტის კონფიგურაციის ფაილი

საიტის root საქაღალდეში, რომელიც ამ ეტაპზე ცარიელი უნდა იყოს, ვქმნით „cfg“ საქაღალდეს და მასში .htaccess-ის გამოყენებით ვხურავთ წვდომას „უარი ყველასგან“ დირექტივით. შექმენით core.php ფაილი შემდეგი შინაარსით:

// MYSQL
კლასი MyDB
{
var $dblogin = "root"; // თქვენი შესვლა მონაცემთა ბაზაში
var $dbpass = ""; // თქვენი პაროლი მონაცემთა ბაზაში
var $db = "mysite"; // საიტის მონაცემთა ბაზის დასახელება
var $dbhost="localhost";

Var $link;
var $query;
var $err;
var $ შედეგი;
var $data;
var $fetch;

ფუნქცია Connect() (
$this->link = mysql_connect($this->dbhost, $this->dblogin, $this->dbpass);
mysql_select_db($this->db);
mysql_query ("SET NAMES utf8");
}

ფუნქცია დახურვა() (
mysql_close($this->link);
}

ფუნქციის გაშვება ($query) (
$this->query = $query;
$this->result = mysql_query($this->query, $this->link);
$this->err = mysql_error();
}
ფუნქციის მწკრივი () (
$this->data = mysql_fetch_assoc($this-> შედეგი);
}
ფუნქცია fetch() (
ხოლო ($this->data = mysql_fetch_assoc($this-> შედეგი)) (
$this->fetch = $this->data;
დაბრუნება $this->fetch;
}
}
ფუნქცია გაჩერება () (
unset($this->data);
unset($this->result);
unset($this->fetch);
unset($this->err);
unset($this->query);
}
}

ეს ფაილი ამჟამად შეიცავს მხოლოდ მონაცემთა ბაზის კავშირის მარტივ კლასს, მაგრამ მომავალში თქვენ შეგიძლიათ დაამატოთ მას სხვადასხვა სასარგებლო ფუნქციები, რომლებიც ხელმისაწვდომი იქნება საიტის კოდის ნებისმიერი ადგილიდან. არ დაგავიწყდეთ თქვენი მონაცემთა ბაზის შესვლისა და პაროლის შეცვლა.

თუ თქვენ მუშაობთ Windows გარემოში, შემიძლია გირჩიოთ გამოიყენოთ . ამ რედაქტორს აქვს სტრიქონის ნუმერაცია და ადვილად გარდაქმნის ტექსტს ერთი კოდირებიდან მეორეზე. ყურადღება! თუ თქვენ მუშაობთ UTF-8 კოდირებით, გადააკეთეთ ფაილები UTF-8-ში BOM-ის გარეშე - ეს დაგეხმარებათ მომავალში პრობლემების თავიდან აცილებაში.

3. შექმენით index.php - საიტის მთავარი კონტროლერი

კონფიგურაციის ფაილი შეიქმნა. ახლა საიტის root საქაღალდეში ვქმნით index.php - ეს იქნება საიტის მთავარი სკრიპტი, ერთგვარი "მთავარი კონტროლერი". index.php ფაილის შინაარსი:

define("INDEX", ""); // მთავარი კონტროლერის მუდმივი დაყენება

Require_one ($_SERVER."/cfg/core.php"); // ბირთვის დაკავშირება

// DB-თან დაკავშირება
$db = new MyDB();
$db->connect();

// მთავარი კონტროლერი
შეცვლა ($_GET) (
საქმე "გვერდი":
მოიცავს($_SERVER."/com/page.php");
შესვენება;
ნაგულისხმევი:
მოიცავს($_SERVER."/com/home.php");
შესვენება;
}

Include($_SERVER."/template.php");
$db->close();

$_GET ცვლადი მთავარ კონტროლერს ეუბნება, რომელი საიტის კომპონენტი უნდა ჩატვირთოს მოთხოვნისას. ამჟამად, ჩვენს საიტს აქვს მხოლოდ ორი კომპონენტი: "გვერდი" და "მთავარი გვერდი" (პრინციპში, თქვენ შეგიძლიათ მიიღოთ ერთი კომპონენტი ჩვეულებრივი გვერდის საჩვენებლად, მაგრამ ხშირად საიტის მთავარი გვერდის გარეგნობა განსხვავდება ჩვეულებრივი მენიუს ელემენტის გვერდებისგან) . მთავარი კონტროლერის ლოგიკა ასეთია: საჭირო კომპონენტის სახელი ამოღებულია URL სტრიქონიდან ($option ცვლადის მნიშვნელობა) და მისი მნიშვნელობიდან გამომდინარე, თავად კომპონენტის ფაილი შედის (შეიცავს /com საქაღალდე). კომპონენტის ფაილი ასრულებს ყველა საჭირო სამუშაოს, ამოიღებს მონაცემებს მონაცემთა ბაზიდან და წერს მას ცვლადებში დიზაინის შაბლონში გადასატანად. დასასრულს უკავშირდება საიტის დიზაინის ფაილი, რომელშიც გადადის კომპონენტებში ამოღებული ყველა ცვლადი და მონაცემი. ეს ბევრად უფრო რთულად ჟღერს, ვიდრე მუშაობს.

4. შექმენით რეგულარული გვერდის გამომავალი კომპონენტი

საიტის ძირში შექმენით "com" საქაღალდე - მასში შეინახება კომპონენტის ფაილები. საიტის კომპონენტი, ჩემი გაგებით, არის ფაილი, რომელშიც მონაცემები მუშავდება საიტის სხვადასხვა განყოფილებისთვის. მაგალითად, ჩვეულებრივი გვერდის კომპონენტი ამოიღებს მასალის სათაურს, აღწერას და ტექსტს მონაცემთა ბაზიდან და ჩაწერს მათ ცვლადებში $title, $meta_d, $meta_k, $content და ა.შ. ეს მონაცემები შემდეგ გადადის დიზაინის შაბლონში ( თქვენ შეგიძლიათ შექმნათ თქვენი საკუთარი დიზაინის შაბლონი თითოეული კომპონენტისთვის ) და ნაჩვენებია მომხმარებლისთვის HTML გვერდის სახით. მაგალითად, კატალოგის კომპონენტი, რომელიც მომავალში შეიძლება შეიქმნას, თითქმის იგივეს გააკეთებს, ოღონდ პროდუქტების შესახებ მონაცემებით - და მას აქვს საკუთარი სპეციფიკა, ცხრილის სხვა ველები და ა.შ. ამიტომ, საიტის თითოეული ფუნქციური განყოფილებისთვის ღირს ცალკე კომპონენტის შექმნა. MVC (Model-View-Controller) სქემაში კომპონენტი მოქმედებს როგორც მოდელი.

შექმენით ფაილი "page.php" "com" საქაღალდეში. ფაილის შინაარსი ასეთია:

/* გვერდის კომპონენტი */
$alias = $_GET;
$query = "SELECT * FROM pages WHERE page_alias="".$alias."" AND page_publish="Y" LIMIT 1";
$db->run($query);
$db->row();
// კომპონენტის ცვლადები
$id = $db->მონაცემები;
$alias = $db->მონაცემები;
$title = $db->მონაცემები;
$h1 = $db->მონაცემები;
$meta_d = $db->მონაცემები;
$meta_k = $db->მონაცემები;
$s_desc = $db->მონაცემები;
$კომპონენტი = $db->მონაცემები;
//თუ გვერდი არ არსებობს
თუ (!$id) (
header ("HTTP/1.1 404 ვერ მოიძებნა");
$component = "შეცდომა 404! ეს გვერდი არ არსებობს";
}
$db->stop();

5. შექმენით მთავარი გვერდის გამომავალი კომპონენტი

ჩვენი მონაცემთა ბაზის მთავარი გვერდი ინახება ფსევდონიმით "სახლი" და ჯერჯერობით მისი სტრუქტურა არ განსხვავდება ჩვეულებრივი საიტის გვერდებისგან - ეს მხოლოდ სტატიაა. მიუხედავად ამისა, ჩვენ შევქმნით მას ცალკე კომპონენტს - ასე ვთქვათ მომავლისთვის.


"com" საქაღალდეში "home.php" კომპონენტის შიგთავსი თითქმის იდენტურია ჩვეულებრივი გვერდის კომპონენტის შინაარსისა, გარდა მონაცემთა ბაზის შეკითხვის სტრიქონისა და კომპონენტის სახელისა. შეკითხვის სტრიქონი ახლა ასე გამოიყურება:

$query = "SELECT * FROM wx_pages WHERE page_alias="home" LIMIT 1";

6. შექმენით დიზაინის შაბლონი მთელი საიტისთვის

საიტის ძირში ვქმნით template.php ფაილს. არსებითად, ეს არის ჩვეულებრივი ვებ დიზაინის განლაგება HTML+CSS ფორმატში, მხოლოდ PHP ცვლადებით სწორ ადგილებში. სათაურის ტეგებს შორის ჩასმა, საიტის ცენტრალურ სვეტში არის ჩასმადა ასე მთელ შაბლონში ვათავსებთ აუცილებელ ცვლადებს, რომლებიც დეკლარირებულია კომპონენტებში.

root საქაღალდეში ასევე უნდა იყოს "css" და "images" საქაღალდეები დიზაინის ელემენტებისთვის. ფაილში /css/style.css - შეგიძლიათ სტილის მორგება თქვენი შეხედულებისამებრ.

7. გაასუფთავეთ ბმულები და .htaccess ფაილი

სუფთა ბმულების შესაქმნელად, მე ვიყენებ mod_rewrite-ს პირდაპირი ინსტრუქციებით თითოეული კომპონენტის წესებისთვის, რადგან მე მივიჩნევ მისამართების ზოლის ანალიზს თავად კონტროლერის გამოყენებით, არასაჭირო ფუნქციონირებად. .htaccess-ის შინაარსი ამ ეტაპზე არის:


RewriteEngine ჩართულია
RewriteBase /

RewriteCond %(REQUEST_FILENAME) !-d
RewriteCond %(REQUEST_FILENAME) !-f

# აკრძალული ფაილები
RewriteRule .htaccess - [F]
RewriteRule template.php - [F]

# RULES mod_rewrite
RewriteRule page/(+)([\/](0,1))\.htm$ index.php?option=page&alias=$1 [L]

სამომავლოდ დავამატებთ წესებს საძიებო კომპონენტებისთვის, კატალოგისთვის, სტატიების ბლოგისთვის და ა.შ. არსებობს მხოლოდ ერთი მომენტი: გადაიყვანეთ ბმულები, როგორიცაა “mysite.com/index.php?option=pages&alias=about” ბმულად, როგორიცაა “mysite.com/pages/about.htm” - ეს საკმაოდ ლამაზია. შეეცადეთ თავიდან აიცილოთ $_GET მასივი უსაფრთხოების მიზეზების გამო და არ დაეყრდნოთ მას. მიზანშეწონილია შეინახოთ მასში მხოლოდ ძირითადი კონტროლერის ($option ცვლადი) და კომპონენტისთვის ($alias ცვლადი) პარამეტრები.

ასევე, თითოეული საიტის საქაღალდეში, "ყოველ შემთხვევაში", შექმენით ცარიელი index.html ფაილი - ეს აუცილებელია ისე, რომ მისამართების ზოლის საშუალებით დირექტორიაში წვდომისას არაფერი გამოჩნდეს.

ტეგები: php, mysql, საიტის ძრავა, კონტროლერი, საიტის შექმნა, mvc

$article): ?> ">

შეცდომა 404: გვერდი ვერ მოიძებნა

ახლა თქვენ შეგიძლიათ შექმნათ დინამიური საიტები, სადაც გვერდების რაოდენობა დამოკიდებულია მასივის ელემენტების რაოდენობაზე და არა PHP ფაილებზე. :) თუ საიტს უნდა ჰქონდეს სხვადასხვა ტიპის გვერდები, მაგალითად, სტატია და პროდუქტი, შეგიძლიათ მეორე პარამეტრად გადასცეთ გვერდის ტიპი: site.ru?type=article&id=5 .
ჩვენ ვქმნით ცხრილს ახალ მონაცემთა ბაზაში. მოდით ვუწოდოთ მას "გვერდები". ეს ცხრილი შეინახავს მომავალი საიტის სტატიკურ გვერდებს და მათ შესახებ ინფორმაციას. ცხრილი უნდა შეიცავდეს შემდეგ ველებს:

  • page_id - გვერდის იდენტიფიკატორი (SMALLINT, პირველადი გასაღები, auto_increment);
  • page_alias - გვერდის მეტსახელი CNC მისამართის ხაზისთვის (VARCHAR, 255);
  • page_title - გვერდის სათაური ბრაუზერის ფანჯარაში (VARCHAR, 255);
  • page_meta_d - გვერდის მეტა აღწერა მეტა აღწერილობის ტეგისთვის (VARCHAR, 255);
  • page_meta_k - მეტა საკვანძო სიტყვები მეტა საკვანძო სიტყვების ტეგისთვის (VARCHAR, 255);
  • page_h1 - გვერდის სათაური (VARCHAR, 255);
  • page_s_desc - მასალის მოკლე აღწერა, მაგალითად, თუ საიტის მასალები იქნება ბლოგის სახით (TEXT);
  • page_content - გვერდის მთავარი ტექსტი, რომელიც გამოჩნდება საიტის ცენტრალურ სვეტში (TEXT);
  • page_publish - შეიცავს "Y" - თუ გვერდი გამოქვეყნებულია, ან "N" - თუ ის დამალულია (CHAR, ნაგულისხმევი "Y").

ცხრილის შექმნისთანავე, მასში ჩავსვით მნიშვნელობები საიტის მთავარი გვერდისთვის. მთავარი გვერდის "page_alias" ველში, მე გთავაზობთ ჩადეთ მნიშვნელობა "home". მეტა ტეგები შეესაბამება მთელი საიტის თემას. ანალოგიურად, თქვენ შეგიძლიათ შექმნათ სხვა გვერდები, მაგალითად, „კომპანიის შესახებ“ მეტსახელით „შესახებ“ და საკუთარი მეტა თეგებით, ან „კონტაქტები“ ფსევდონიმით „კონტაქტები“ და ა.შ.

2. შექმენით საიტის კონფიგურაციის ფაილი

საიტის root საქაღალდეში, რომელიც ამ ეტაპზე ცარიელი უნდა იყოს, ვქმნით „cfg“ საქაღალდეს და მასში .htaccess-ის გამოყენებით ვხურავთ წვდომას „უარი ყველასგან“ დირექტივით. შექმენით core.php ფაილი შემდეგი შინაარსით:

// MYSQL
კლასი MyDB
{
var $dblogin = "root"; // თქვენი შესვლა მონაცემთა ბაზაში
var $dbpass = ""; // თქვენი პაროლი მონაცემთა ბაზაში
var $db = "mysite"; // საიტის მონაცემთა ბაზის დასახელება
var $dbhost="localhost";

Var $link;
var $query;
var $err;
var $ შედეგი;
var $data;
var $fetch;

ფუნქცია Connect() (
$this->link = mysql_connect($this->dbhost, $this->dblogin, $this->dbpass);
mysql_select_db($this->db);
mysql_query ("SET NAMES utf8");
}

ფუნქცია დახურვა() (
mysql_close($this->link);
}

ფუნქციის გაშვება ($query) (
$this->query = $query;
$this->result = mysql_query($this->query, $this->link);
$this->err = mysql_error();
}
ფუნქციის მწკრივი () (
$this->data = mysql_fetch_assoc($this-> შედეგი);
}
ფუნქცია fetch() (
ხოლო ($this->data = mysql_fetch_assoc($this-> შედეგი)) (
$this->fetch = $this->data;
დაბრუნება $this->fetch;
}
}
ფუნქცია გაჩერება () (
unset($this->data);
unset($this->result);
unset($this->fetch);
unset($this->err);
unset($this->query);
}
}

ეს ფაილი ამჟამად შეიცავს მხოლოდ მონაცემთა ბაზის კავშირის მარტივ კლასს, მაგრამ მომავალში თქვენ შეგიძლიათ დაამატოთ მას სხვადასხვა სასარგებლო ფუნქციები, რომლებიც ხელმისაწვდომი იქნება საიტის კოდის ნებისმიერი ადგილიდან. არ დაგავიწყდეთ თქვენი მონაცემთა ბაზის შესვლისა და პაროლის შეცვლა.

თუ თქვენ მუშაობთ Windows გარემოში, შემიძლია გირჩიოთ გამოიყენოთ . ამ რედაქტორს აქვს სტრიქონის ნუმერაცია და ადვილად გარდაქმნის ტექსტს ერთი კოდირებიდან მეორეზე. ყურადღება! თუ თქვენ მუშაობთ UTF-8 კოდირებით, გადააკეთეთ ფაილები UTF-8-ში BOM-ის გარეშე - ეს დაგეხმარებათ მომავალში პრობლემების თავიდან აცილებაში.

3. შექმენით index.php - საიტის მთავარი კონტროლერი

კონფიგურაციის ფაილი შეიქმნა. ახლა საიტის root საქაღალდეში ვქმნით index.php - ეს იქნება საიტის მთავარი სკრიპტი, ერთგვარი "მთავარი კონტროლერი". index.php ფაილის შინაარსი:

define("INDEX", ""); // მთავარი კონტროლერის მუდმივი დაყენება

Require_one ($_SERVER."/cfg/core.php"); // ბირთვის დაკავშირება

// DB-თან დაკავშირება
$db = new MyDB();
$db->connect();

// მთავარი კონტროლერი
შეცვლა ($_GET) (
საქმე "გვერდი":
მოიცავს($_SERVER."/com/page.php");
შესვენება;
ნაგულისხმევი:
მოიცავს($_SERVER."/com/home.php");
შესვენება;
}

Include($_SERVER."/template.php");
$db->close();

$_GET ცვლადი მთავარ კონტროლერს ეუბნება, რომელი საიტის კომპონენტი უნდა ჩატვირთოს მოთხოვნისას. ამჟამად, ჩვენს საიტს აქვს მხოლოდ ორი კომპონენტი: "გვერდი" და "მთავარი გვერდი" (პრინციპში, თქვენ შეგიძლიათ მიიღოთ ერთი კომპონენტი ჩვეულებრივი გვერდის საჩვენებლად, მაგრამ ხშირად საიტის მთავარი გვერდის გარეგნობა განსხვავდება ჩვეულებრივი მენიუს ელემენტის გვერდებისგან) . მთავარი კონტროლერის ლოგიკა ასეთია: საჭირო კომპონენტის სახელი ამოღებულია URL სტრიქონიდან ($option ცვლადის მნიშვნელობა) და მისი მნიშვნელობიდან გამომდინარე, თავად კომპონენტის ფაილი შედის (შეიცავს /com საქაღალდე). კომპონენტის ფაილი ასრულებს ყველა საჭირო სამუშაოს, ამოიღებს მონაცემებს მონაცემთა ბაზიდან და წერს მას ცვლადებში დიზაინის შაბლონში გადასატანად. დასასრულს უკავშირდება საიტის დიზაინის ფაილი, რომელშიც გადადის კომპონენტებში ამოღებული ყველა ცვლადი და მონაცემი. ეს ბევრად უფრო რთულად ჟღერს, ვიდრე მუშაობს.

4. შექმენით რეგულარული გვერდის გამომავალი კომპონენტი

საიტის ძირში შექმენით "com" საქაღალდე - მასში შეინახება კომპონენტის ფაილები. საიტის კომპონენტი, ჩემი გაგებით, არის ფაილი, რომელშიც მონაცემები მუშავდება საიტის სხვადასხვა განყოფილებისთვის. მაგალითად, ჩვეულებრივი გვერდის კომპონენტი ამოიღებს მასალის სათაურს, აღწერას და ტექსტს მონაცემთა ბაზიდან და ჩაწერს მათ ცვლადებში $title, $meta_d, $meta_k, $content და ა.შ. ეს მონაცემები შემდეგ გადადის დიზაინის შაბლონში ( თქვენ შეგიძლიათ შექმნათ თქვენი საკუთარი დიზაინის შაბლონი თითოეული კომპონენტისთვის ) და ნაჩვენებია მომხმარებლისთვის HTML გვერდის სახით. მაგალითად, კატალოგის კომპონენტი, რომელიც მომავალში შეიძლება შეიქმნას, თითქმის იგივეს გააკეთებს, ოღონდ პროდუქტების შესახებ მონაცემებით - და მას აქვს საკუთარი სპეციფიკა, ცხრილის სხვა ველები და ა.შ. ამიტომ, საიტის თითოეული ფუნქციური განყოფილებისთვის ღირს ცალკე კომპონენტის შექმნა. MVC (Model-View-Controller) სქემაში კომპონენტი მოქმედებს როგორც მოდელი.

შექმენით ფაილი "page.php" "com" საქაღალდეში. ფაილის შინაარსი ასეთია:

/* გვერდის კომპონენტი */
$alias = $_GET;
$query = "SELECT * FROM pages WHERE page_alias="".$alias."" AND page_publish="Y" LIMIT 1";
$db->run($query);
$db->row();
// კომპონენტის ცვლადები
$id = $db->მონაცემები;
$alias = $db->მონაცემები;
$title = $db->მონაცემები;
$h1 = $db->მონაცემები;
$meta_d = $db->მონაცემები;
$meta_k = $db->მონაცემები;
$s_desc = $db->მონაცემები;
$კომპონენტი = $db->მონაცემები;
//თუ გვერდი არ არსებობს
თუ (!$id) (
header ("HTTP/1.1 404 ვერ მოიძებნა");
$component = "შეცდომა 404! ეს გვერდი არ არსებობს";
}
$db->stop();

5. შექმენით მთავარი გვერდის გამომავალი კომპონენტი

ჩვენი მონაცემთა ბაზის მთავარი გვერდი ინახება ფსევდონიმით "სახლი" და ჯერჯერობით მისი სტრუქტურა არ განსხვავდება ჩვეულებრივი საიტის გვერდებისგან - ეს მხოლოდ სტატიაა. მიუხედავად ამისა, ჩვენ შევქმნით მას ცალკე კომპონენტს - ასე ვთქვათ მომავლისთვის.


"com" საქაღალდეში "home.php" კომპონენტის შიგთავსი თითქმის იდენტურია ჩვეულებრივი გვერდის კომპონენტის შინაარსისა, გარდა მონაცემთა ბაზის შეკითხვის სტრიქონისა და კომპონენტის სახელისა. შეკითხვის სტრიქონი ახლა ასე გამოიყურება:

$query = "SELECT * FROM wx_pages WHERE page_alias="home" LIMIT 1";

6. შექმენით დიზაინის შაბლონი მთელი საიტისთვის

საიტის ძირში ვქმნით template.php ფაილს. არსებითად, ეს არის ჩვეულებრივი ვებ დიზაინის განლაგება HTML+CSS ფორმატში, მხოლოდ PHP ცვლადებით სწორ ადგილებში. სათაურის ტეგებს შორის ჩასმა, საიტის ცენტრალურ სვეტში არის ჩასმადა ასე მთელ შაბლონში ვათავსებთ აუცილებელ ცვლადებს, რომლებიც დეკლარირებულია კომპონენტებში.

root საქაღალდეში ასევე უნდა იყოს "css" და "images" საქაღალდეები დიზაინის ელემენტებისთვის. ფაილში /css/style.css - შეგიძლიათ სტილის მორგება თქვენი შეხედულებისამებრ.

7. გაასუფთავეთ ბმულები და .htaccess ფაილი

სუფთა ბმულების შესაქმნელად, მე ვიყენებ mod_rewrite-ს პირდაპირი ინსტრუქციებით თითოეული კომპონენტის წესებისთვის, რადგან მე მივიჩნევ მისამართების ზოლის ანალიზს თავად კონტროლერის გამოყენებით, არასაჭირო ფუნქციონირებად. .htaccess-ის შინაარსი ამ ეტაპზე არის:


RewriteEngine ჩართულია
RewriteBase /

RewriteCond %(REQUEST_FILENAME) !-d
RewriteCond %(REQUEST_FILENAME) !-f

# აკრძალული ფაილები
RewriteRule .htaccess - [F]
RewriteRule template.php - [F]

# RULES mod_rewrite
RewriteRule page/(+)([\/](0,1))\.htm$ index.php?option=page&alias=$1 [L]

სამომავლოდ დავამატებთ წესებს საძიებო კომპონენტებისთვის, კატალოგისთვის, სტატიების ბლოგისთვის და ა.შ. არსებობს მხოლოდ ერთი მომენტი: გადაიყვანეთ ბმულები, როგორიცაა “mysite.com/index.php?option=pages&alias=about” ბმულად, როგორიცაა “mysite.com/pages/about.htm” - ეს საკმაოდ ლამაზია. შეეცადეთ თავიდან აიცილოთ $_GET მასივი უსაფრთხოების მიზეზების გამო და არ დაეყრდნოთ მას. მიზანშეწონილია შეინახოთ მასში მხოლოდ ძირითადი კონტროლერის ($option ცვლადი) და კომპონენტისთვის ($alias ცვლადი) პარამეტრები.

ასევე, თითოეული საიტის საქაღალდეში, "ყოველ შემთხვევაში", შექმენით ცარიელი index.html ფაილი - ეს აუცილებელია ისე, რომ მისამართების ზოლის საშუალებით დირექტორიაში წვდომისას არაფერი გამოჩნდეს.

ტეგები: php, mysql, საიტის ძრავა, კონტროლერი, საიტის შექმნა, mvc



რაიმე შეკითხვა?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: