შაბლონების მემკვიდრეობა PHP-ში მესამე მხარის ბიბლიოთეკების გამოყენების გარეშე. მონაცემთა ბაზის კავშირი

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

საიტის ერთი ჰოსტინგიდან მეორეზე გადასატანად ან სატესტო ლოკალური აპარატიდან წარმოების სერვერზე, მიჰყევით ამ ნაბიჯებს:
1. დააკოპირეთ ყველა XOOPS ფაილის შიგთავსი, მათ შორის xoops_lib და xoops_data. უმჯობესია დაარქივოთ პირდაპირ სერვერზე ( ადგილობრივი მანქანა), უფრო ადვილი იქნება ჩამოტვირთვა/ატვირთვა;
2. შექმენით მონაცემთა ბაზის ნაგავსაყრელი ძველ/ლოკალურ სერვერზე;
2.1. გადადით phpMyAdmin-ზე და აირჩიეთ საჭირო მონაცემთა ბაზამონაცემები;
2.2. დააწკაპუნეთ ჩანართზე „ექსპორტი“ [სურ. 1]

ბრინჯი. 1

2.3. აირჩიეთ ექსპორტის მეთოდი "სწრაფი - მინიმალური პარამეტრების ჩვენება" დააწკაპუნეთ კარგიდა ჩამოტვირთეთ ნაგავსაყრელი [ნახ. 2]. ძველ ვერსიებში თქვენ უნდა მიუთითოთ "შენახვა როგორც ფაილი".

ბრინჯი. 2

3. ახალ სერვერზე ვქმნით საიტის მონაცემთა ბაზას. შექმნისას ჩვენ ვაზუსტებთ utf8 კოდირებას. [ბრინჯი. 3]

ბრინჯი. 3

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

3.1. გადადით შექმნილ მონაცემთა ბაზაში და აირჩიეთ ჩანართი "ოპერაციები". აქ უნდა მივუთითოთ შედარების კოდირება [ ბრინჯი. 4]. თქვენ შეგიძლიათ გამოტოვოთ ეს ნაბიჯი, თუ მონაცემთა ბაზის შექმნისას მიუთითეთ კოდირება.

ბრინჯი. 4

4. მეორე ეტაპზე შექმნილი მონაცემთა ბაზის ნაგავსაყრელის იმპორტი ახალ ჰოსტში.
4.1. გადადით phpMyAdmin-ზე და აირჩიეთ შექმნილი მონაცემთა ბაზა.
4.2. გადადით "იმპორტის" ჩანართზე, აირჩიეთ მონაცემთა ბაზის ნაგავსაყრელი ლოკალური კომპიუტერი, ფაილის კოდირება არის utf-8 და დააწკაპუნეთ OK. [ბრინჯი. 5]

ბრინჯი. 5

5. ატვირთვა ახალი სერვერიდაარქივეთ XOOPS ფაილებით და ამოალაგეთ იგი.
6. დააყენეთ ჩაწერის ნებართვები შემდეგ დირექტორიებზე (UNIX 777):
ატვირთვები/
ატვირთვები/ავატარები/
ატვირთვები/სურათები/
ატვირთვები/წოდებები/
ატვირთვები/სმაილები/
xoops_lib/modules/protector/configs/
xoops_data/ქეში
xoops_data/caches/xoops_cache
xoops_data/caches/smarty_cache
xoops_data/caches/smarty_compile
xoops_data/configs
xoops_data/data
7. კონფიგურაციის ფაილების რედაქტირება;
7.1. გახსენით ფაილი /mainfile.php და შეცვალეთ შემდეგი ხაზები:
7.1.1. სრული გზაახალ სერვერზე XOOPS საქაღალდეში: define("XOOPS_ROOT_PATH", "C:/xampp/htdocs/xoops");
7.1.2. სრული გზა ახალ სერვერზე xoops_lib საქაღალდეში (უსაფრთხოების მიზეზების გამო, ის უნდა გადავიდეს არა-root საიტზე): define("XOOPS_PATH", "C:/xampp/htdocs/xoops/xoops_lib");
7.1.3. სრული გზა ახალ სერვერზე xoops_data საქაღალდეში (უსაფრთხოების მიზეზების გამო, ის უნდა გადავიდეს არა-root საიტზე): define("XOOPS_VAR_PATH", "C:/xampp/htdocs/xoops/xoops_data");
7.1.4. HTTP მისამართი site: define("XOOPS_URL", "http://site");
7.2. გახსენით ფაილი /xoops_data/data/secure.php და შეცვალეთ შემდეგი ხაზები:
7.2.1. მონაცემთა ბაზის სერვერის ჰოსტი (შეამოწმეთ თქვენი ჰოსტინგის პროვაიდერთან): define("XOOPS_DB_HOST", "localhost");
7.2.2. შექმნილი მონაცემთა ბაზის მომხმარებელი: define("XOOPS_DB_USER", "xoops_user");
7.2.3. შექმნილი მონაცემთა ბაზის პაროლი: define("XOOPS_DB_PASS", "xoops_pass");
7.2.4. შექმნილი მონაცემთა ბაზის დასახელება: define("XOOPS_DB_NAME", "xoops_2.5.5_new");
8. დააყენეთ ფაილები /mainfile.php და /xoops_data/data/secure.php მხოლოდ წაკითხვის ნებართვებზე (UNIX 444)
9. გახსენით საიტი ბრაუზერში, ჩვენს შემთხვევაში ასეა

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

ჩვენს cms საქაღალდეში ვქმნით კლასების დირექტორიას. კლასების საქაღალდეში ჩვენ ვქმნით ახალი ფაილისახელწოდებით Article.php და დააკოპირეთ მასში შემდეგი კოდი:

id = (int) $data["id"]; */ საჯარო ფუნქცია insert() ( // აქვს თუ არა სტატიის ობიექტს ID? if (!is_null($this->id)) trigger_error ("Article::insert(): სცადეთ ჩასვათ მუხლის ობიექტი, რომელსაც უკვე აქვს თავისი ID თვისებების ნაკრები ($this->id).", E_USER_ERROR); // სტატიის ჩასმა $conn = ახალი PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); $sql = "INSERT INTO სტატიებში (პუბლიკაციის თარიღი, სათაური, რეზიუმე, შინაარსი) VALUES ( FROM_UNIXTIME(:publicationDate), :title, :summary, :content)"; $st = $conn->prepare ($sql); $st->bindValue(":publicationDate", $this->publicationDate, PDO :: PARAM_INT (":title", $this->title, $st->bindValue(":summary", $this->summary, PDO::PARAM_STR) ; სტატიის მიმდინარე ობიექტი მონაცემთა ბაზაში */ public ფუნქცია update() ( // აქვს თუ არა სტატიის ობიექტს ID? if (is_null($this->id)) trigger_error ("Article::update(): სცადეთ განაახლოთ სტატიის ობიექტი, რომელსაც არ აქვს მისი ID თვისებების ნაკრები.", E_USER_ERROR);

ფაილი საკმაოდ გრძელია, მაგრამ კოდი ძალიან მარტივია. მოდით შევხედოთ მას დეტალურად:

1. კლასის და მისი თვისებების განმარტება

პირველ რიგში, მოდით განვსაზღვროთ სტატიების კლასი:

კლასის სტატია (

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

კლასის განსაზღვრის შემდეგ ვაცხადებთ კლასის თვისებებს: $id , $publicationDate და ა.შ. თითოეული მუხლის ობიექტი, რომელსაც ჩვენ ვქმნით, შეინახავს მონაცემებს დეკლარირებულ თვისებებში. გაითვალისწინეთ, რომ ქონების სახელები შეესაბამება ველების სახელებს სტატიების ცხრილში.

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

2. კონსტრუქტორი

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

პირველი მეთოდი, __construct() არის კონსტრუქტორი. ეს სპეციალური მეთოდირომელიც ავტომატურად იწოდება PHP სისტემაყოველ ჯერზე, როდესაც იქმნება ახალი მუხლის ობიექტი. ჩვენი კონსტრუქტორი იღებს არასავალდებულო $data მასივს, რომელიც შეიცავს მონაცემებს ახალი ობიექტის თვისებებისთვის. შემდეგ ჩვენ ვაძლევთ მონაცემებს კონსტრუქტორის სხეულში არსებულ თვისებებს. ასე გამოდის მოსახერხებელი გზაობიექტის შექმნა და ინიციალიზაცია ერთ მოქმედებაში.

$this->propertyName ნიშნავს: "ამ ობიექტის თვისება სახელად "$propertyName".

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

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

ჩვეულებრივ, ასეთი ადგილები შეიძლება იყოს უსაფრთხოების ხვრელი, რადგან მომხმარებელს შეუძლია მავნე ჩასმა JavaScript კოდიან მასალები სტატიის შინაარსში შეცდომით. თუმცა, როგორც ჩვენ გვჯერა. რომ ერთადერთი ადამიანი, ვისაც შეუძლია კონტენტის რედაქტირება, არის სისტემის ადმინისტრატორი, რომელსაც აქვს შეუზღუდავი ნდობა, მაშინ კონტენტის დაუცველობის საკითხი ჩვენს ყურადღების მიღმა რჩება. თუ საქმე გაქვთ მომხმარებლის მიერ გენერირებულ კონტენტთან, როგორიცაა კომენტარები ან ფორუმის პოსტები, მაშინ უფრო ფრთხილად უნდა იყოთ და მხოლოდ „უსაფრთხო“ HTML კოდის გამოყენების უფლებას აძლევთ. ასეთი პრობლემების გადასაჭრელად შესანიშნავი ინსტრუმენტია HTML Purifier, რომელიც აანალიზებს HTML კოდის შეყვანას და შლის ყველა პოტენციურ საფრთხეს.

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

3. storeFormValues()

შემდეგი მეთოდი, storeFormValues(), კონსტრუქტორის მსგავსია იმით, რომ ის ინახავს მონაცემთა მიღებულ მასივს ობიექტის თვისებებში. მთავარი განსხვავება ისაა, რომ storeFormValues()-ს შეუძლია მონაცემების დამუშავება ახალი მუხლის და სტატიის რედაქტირების ფორმებში გამოყენებული ფორმატით (ამას მოგვიანებით შევქმნით). კერძოდ, მას შეუძლია გაუმკლავდეს გამოქვეყნების თარიღს YYYY-MM-DD ფორმატში, გარდაქმნის მას UNIX დროის ფორმატში, რომელიც შესანიშნავია ობიექტში შესანახად.

UNIX დროის ფორმატი არის მთელი რიცხვი, რომელიც შეიცავს წამების რაოდენობას 1970 წლის 1 იანვრის შუაღამედან ძიების თარიღამდე. ამ ფორმატის თარიღი მარტივი გამოსაყენებელია და მოსახერხებელი შესანახად.

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

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

4. getById()

ახლა მოდით გადავიდეთ მეთოდებზე, რომლებიც ახორციელებენ მონაცემთა ბაზაში წვდომას MySQL მონაცემები. პირველი არის getById(). ის არგუმენტად იღებს სტატიის ID-ს ($id) და აბრუნებს ჩანაწერს მითითებული ID-ით სტატიების ცხრილიდან, ინახავს მონაცემებს ახალ მუხლის ობიექტში.

როგორც წესი, მეთოდის გამოძახებისას ჯერ უნდა შექმნათ ობიექტი და შემდეგ გამოიძახოთ მეთოდი, რომელიც ეკუთვნის ობიექტს. მაგრამ რადგან getById() აბრუნებს ახალ მუხლის ობიექტს, სასარგებლო იქნება მისი პირდაპირ გამოძახება და არა არსებული ობიექტის მეშვეობით. წინააღმდეგ შემთხვევაში, თქვენ მოგიწევთ შექმნათ ახალი stub ობიექტი ყოველ ჯერზე, როდესაც გჭირდებათ მეთოდის გამოძახება და სტატიის მიღება.

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

საჯარო სტატიკური ფუნქცია getById($id) (

მეთოდი იყენებს PDO მონაცემთა ბაზასთან დასაკავშირებლად, იღებს სტატიის ჩანაწერს SQL SELECT მოთხოვნის გამოყენებით და ინახავს მონაცემებს ახალ მუხლის ობიექტში, რომელიც უბრუნდება გამოძახების კოდს. PDO - PHP Data Objects - PHP-ში ჩაშენებული ობიექტზე ორიენტირებული ბიბლიოთეკა, რომელიც აადვილებს კომუნიკაციას PHP სკრიპტებიმონაცემთა ბაზებით.

მოდით შევხედოთ მეთოდს უფრო დეტალურად:

    მონაცემთა ბაზის კავშირი

    $conn = ახალი PDO (DB_DSN, DB_USERNAME, DB_PASSWORD);

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

    ჩვენ ვიღებთ სტატიის ჩანაწერს

    SELECT განცხადება აბრუნებს ყველა ველს (*) სტატიების ცხრილის ჩანაწერიდან, რომლებიც ემთხვევა მოცემული ველი id. PublicationDate ველის მნიშვნელობა ბრუნდება UNIX დროის ფორმატში, ნაცვლად MySQL თარიღის ფორმატისა, რაც ამარტივებს გამძლეობის პროცესს ჩვენს ობიექტში.

    იმის ნაცვლად, რომ ჩვენი $id პარამეტრი პირდაპირ SELECT ხაზზე დავაყენოთ, რაც ზრდის უსაფრთხოების დარღვევის რისკს, ვიყენებთ:id . ეს პარამეტრი ცნობილია როგორც ჩანაცვლების ადგილი. შემდეგ ჩვენ მოვუწოდებთ PDO მეთოდს $id მნიშვნელობის დასაკავშირებლად განთავსების მაჩვენებელთან.

    SELECT გამოხატვის სტრიქონში შენახვისთანავე ვამზადებთ მას $conn->prepare() ფუნქციის გამოყენებით, შედეგად მიღებული სახელური ვინახავთ $st ცვლადში.

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

    შემდეგ ჩვენ ვაკავშირებთ $id ცვლადის მნიშვნელობას (სასურველი სტატიის ID) განთავსების მაჩვენებელს:id bindValue() მეთოდის გამოძახებით.

    და ჩვენ მოვუწოდებთ execute() მეთოდს მოთხოვნის შესასრულებლად. შემდეგ ჩვენ ვიყენებთ fetch() მეთოდს, რათა მიღებული ჩანაწერი გადავიტანოთ ასოცირებულ მასივში ველების სახელებით და შესაბამისი მნიშვნელობებით, რომელიც ინახება $row ცვლადში.

    კავშირის დახურვა

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

    მუხლის ობიექტის დაბრუნება

    თუ ($row) დააბრუნეთ ახალი მუხლი ($row); )

    ჩვენი მეთოდის ბოლო ნაბიჯი არის Article ობიექტის შექმნა, რომელიც შეიცავს ჩანაწერს მონაცემთა ბაზიდან და დააბრუნებს მას დარეკვის კოდი. პირველ რიგში, ჩვენ ვამოწმებთ მონაცემების არსებობას $row ცვლადში fetch() მეთოდის გამოძახების შემდეგ. თუ არის მონაცემები, ჩვენ ვქმნით ახალ Article ობიექტს, რომელიც გადასცემს მას $row ცვლადს. გამოიძახება კლასის კონსტრუქტორი, რომელიც შეავსებს ობიექტს $row მასივის მონაცემებით. შემდეგ ვაბრუნებთ მზა ობიექტს და მეთოდი სრულდება.

5. getList()

შემდეგი getList() მეთოდი მრავალი თვალსაზრისით ჰგავს getById() მეთოდს. მთავარი განსხვავება ისაა, რომ getList() მეთოდი აბრუნებს რამდენიმე სტატიას ერთდროულად. იგი გამოიყენება მაშინ, როდესაც გჭირდებათ მომხმარებლის ან ადმინისტრატორისთვის სტატიების სიის ჩვენება.

getList() იღებს 2 არგუმენტს:

$numRows მაქსიმალური რაოდენობამიიღო სტატიები. ნაგულისხმევი მნიშვნელობა არის 1,000,000 (ანუ თითქმის ყველა სტატია). ეს პარამეტრისაშუალებას გვაძლევს მივიღოთ მხოლოდ პირველი 5 სტატია ამისთვის მთავარი გვერდი. $order მიღებული სტატიების დალაგების თანმიმდევრობა. ნაგულისხმევი პარამეტრია "publicationDate DESC", რაც ნიშნავს "დახარისხება გამოქვეყნების თარიღის მიხედვით, ჯერ ახალი სტატიები".

მეთოდის კოდის უმეტესი ნაწილი მსგავსია getById() მეთოდის. მოდით გადავხედოთ რამდენიმე სტრიქონს:

$sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(პუბლიკაციის თარიღი) როგორც გამოქვეყნების თარიღი სტატიებიდან ORDER BY " . mysql_escape_string($order) . "LIMIT:numRows";

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

ასევე დამატებულია ORDER BY პუნქტი დაბრუნებული ჩანაწერების კონკრეტული თანმიმდევრობით დასალაგებლად. გამოიყენეთ LIMIT გამოხატულება $numRows პარამეტრით (როგორც განლაგების მაჩვენებელი) მოძიებული ჩანაწერების რაოდენობის შესაზღუდად.

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

იმის ნაცვლად, რომ $order ცვლადის მნიშვნელობა შეკითხვაზე გადავიტანოთ განლაგების მაჩვენებლის საშუალებით, ჩვენ მას პირდაპირ გადავცემთ შეკითხვის სტრიქონზე mysql_escape_string() ფუნქციის გამოძახებით, რათა გაუქმდეს ნებისმიერი. სპეციალური პერსონაჟები(უსაფრთხოებისთვის). თუ იყენებთ განთავსების მახასიათებელს, PDO მოათავსებს ბრჭყალებს (") სტრიქონის გარშემო (მაგალითად, ORDER BY "publicationDate DESC"), რაც სინტაქსის შეცდომაა.

$list = მასივი(); while ($row = $st->fetch()) ( $article = ახალი მუხლი($row); $list = $article; )

ვინაიდან ჩვენ ვაბრუნებთ რამდენიმე რიგს, ჩვენ უნდა შევქმნათ $list მასივი შესაბამისი მუხლის ობიექტების შესანახად. შემდეგ ვიყენებთ ხოლო მარყუჟიმიიღოს შემდეგი ხაზი fetch()-ით ვქმნით ახალ Article ობიექტს, ვინახავთ სტრიქონს ობიექტში და ვამატებთ ობიექტს $list მასივში. როდესაც რიგები აღარ დარჩება, fetch() მეთოდი დააბრუნებს false-ს და ციკლი შეჩერდება.

// ახლა ვიღებთ სტატიების საერთო რაოდენობას, რომლებიც შეესაბამება კრიტერიუმს $sql = "SELECT FOUND_ROWS() AS totalRows"; $totalRows = $conn->query($sql)->fetch(); $conn = null; დაბრუნება (მასივი ("შედეგები" => $list, "totalRows" => $totalRows));

ბოლოს ჩვენ ვასრულებთ შეკითხვას, რომელიც იყენებს MySQL ფუნქცია FOUND_ROWS() რათა მიიღოთ დაბრუნებული მწკრივების რაოდენობა, როგორც გამოითვლება წინა SQL_CALC_FOUND_ROWS ბრძანებაში. ამჯერად ვიყენებთ PDO query() მეთოდს, რომელიც საშუალებას გაძლევთ სწრაფად შეასრულოთ მოთხოვნა, თუ არ არის შემცვლელი მაჩვენებლები. ჩვენ მოვუწოდებთ fetch() მეთოდს შედეგის მისაღებად. შემდეგ ჩვენ ვაბრუნებთ სტატიების ობიექტების სიას ($list) და მწკრივების მთლიან რაოდენობას ასოცირებული მასივის სახით.

6. ჩასმა ()

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

insert() ამატებს ახალი სტატიასტატიების ცხრილში, მიმდინარე მუხლის ობიექტის მნიშვნელობების გამოყენებით:

  • მეთოდი ჯერ ამოწმებს, რომ ობიექტს არ გააჩნია $id თვისებების ნაკრები. თუ ობიექტს აქვს ID, მაშინ სტატია ალბათ უკვე არის მონაცემთა ბაზაში და არ საჭიროებს დამატებას.
  • შემდეგ მეთოდი შესრულდება SQL შეკითხვა INSERT ჩანაწერის ჩასასმელად სტატიების ცხრილში, ჩანაცვლების ველების გამოყენებით ქონების მნიშვნელობების მონაცემთა ბაზაში გადასატანად. გთხოვთ გაითვალისწინოთ, რომ ჩვენ ვიყენებთ MySQL FROM_UNIXTIME() ფუნქციას გამოქვეყნების თარიღის MySQL ფორმატში გადასაყვანად.
  • მოთხოვნის შესრულების შემდეგ მეთოდი აბრუნებს ID-ს ახალი სტატია PDO lastInsertId() ფუნქციის გამოყენებით და ინახავს მნიშვნელობას $id თვისებაში. ჩვენ დავაყენეთ auto_increment თვისება id ველისთვის სტატიების ცხრილში, ასე რომ MySQL წარმოქმნის უნიკალური ღირებულება ID ყოველი ახალი ჩანაწერისთვის.

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

7. განახლება()

ეს მეთოდი ჰგავს insert() მეთოდს, გარდა იმისა, რომ ის აახლებს მონაცემთა ბაზაში ჩანაწერს ახალი ჩანაწერის შექმნის ნაცვლად.

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

8. წაშლა ()

delete() მეთოდი იყენებს SQL DELETE გამოხატვას სტატიის ცხრილიდან სტატიის წასაშლელად, რომელიც ინახება ობიექტში. ჩანაწერის იდენტიფიცირებისთვის გამოიყენეთ ობიექტის $id თვისება. უსაფრთხოების მიზნით, მხოლოდ ერთი ჩანაწერის წაშლის შეზღუდვის მოთხოვნას დავამატეთ LIMIT 1.

შემდეგ გაკვეთილში ჩვენ შევქმნით სკრიპტებს ჩვენი აპლიკაციის კლიენტისა და სერვერის ნაწილებისთვის.

მესამედან დაწყებული wordpress-ის ვერსიებიჩვენს განკარგულებაშია ისეთ საინტერესო ინსტრუმენტს, როგორიცაა პირადი პოსტის ტიპები (aka custom, aka taxonomies). დიახ, ავტორმა იცის, რომ ამის შესახებ უკვე დაიწერა მრავალი სტრიქონი, მათ შორის რუსულ ენაზეც, თუმცა, როდესაც რეალურად ტაქსონომიების წინაშე ვდგავართ, ყოველთვის არ არის შესაძლებელი იპოვოთ დეტალური მაგალითებიმათი გამოყენება (რა თქმა უნდა, არ ჩავთვლით მიზერულ აღწერილობას WordPress-ის ოფიციალურ ვებსაიტზე). და ამიტომ... ისე, როგორც ყოველთვის, ვწერ ისე, რომ არ დამავიწყდეს, რადგან იშვიათად ვინახავ ძველ პროექტებს, რომლებიც შეიცავს ყველა კოდს.

როგორ შევქმნათ?

ზოგადად, (გაგიკვირდებათ) wordpress უკვეშეიცავს რამდენიმე ტიპის პოსტის მაგალითს. ესენია:

  • პოსტი (პოსტი -> single.php)
  • გვერდი (გვერდი -> page.php)
  • დანართები ასევე არის მედია ფაილები (დანართები)
  • გადასინჯვები
  • მენიუს ელემენტები (nav_menu_item)

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

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

/* ** მორგებული ტიპები ** ხატები ტიპისთვის: ** https://developer.wordpress.org/resource/dashicons/ */// ახალი ამბების ფუნქცია create_news () ( register_post_type ( "news" , array ( "labels" => array ( "name" => __ ("News" ), "singular_name" => __ ("News" ), "add_new" => __ ("ახალი ამბების დამატება"), "add_new_item" => __ ("ახალი ამბების დამატება"), "რედაქტირება" => __ ("ახალი ამბების რედაქტირება"), "edit_item" => __ ("ახალი ამბების რედაქტირება") , "new_item" => __ ("Single news"), "all_item" => __ ("All_item"), "View" => __ ("New_item"), "view_item" => __ ("Single-ის ნახვა" ახალი ამბები" ), "search_items" => __ ( "ახალი ამბების ძიება" ), "not_found" => __ ("სიახლეები ვერ მოიძებნა" ), "public" => true, // ნაჩვენებია ადმინისტრაციულ პანელში? "menu_position" => 5 , "supports" => მასივი ("სათაური", "რედაქტორი", "მინიატურა", "ამონარიდი", "მორგებული ველები"), "ტაქსონომიები" => მასივი ("" ), "has_archive" => true, "capability_type" => "პოსტი" , "menu_icon" => "dashicons-admin-site" , "rewrite" => მასივი ("slug" => "ახალი"), ) ) add_action ("init" , "create_news" );

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

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

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

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

და ბოლოს, ჩვენი ამბებისკენ მიმავალ ბილიკებს ექნებათ მისამართი, როგორიცაა mydomain.com/news/my-first-news. დიდი. ჩვენ ვაკეთებთ ახალი პოსტის ტიპის ინიციალიზებას add_action-ის გამოყენებით და გადავდივართ ადმინისტრაციულ პანელზე: განაახლეთ მარშრუტი (შეინახეთ ცვლილებები), წინააღმდეგ შემთხვევაში wordpress ვერ იპოვის გვერდებს ახალი ამბებით.

სხვათა შორის, Google მოითხოვს, რომ ახალი ამბები დასრულდეს არა ლამაზი სათაურით, არამედ პირადობის მოწმობით. ამიტომ, ზოგჯერ თქვენ უნდა იცოდეთ როგორ გადალახოთ სტანდარტული ბილიკები მათკენ. ამის გაკეთება შეგიძლიათ functions.php-ში ამ რთული გზით:

/* ახალი ამბების პოსტის ტიპის ბმულების შეცვლა */ფუნქცია news_permalink ($permalink, $post = 0)( if ($post -> post_type == "news" )( return $permalink . $post -> ID . "/" ; ) else ( return $permalink ; ) ) add_filter ("post_type_link" , "news_permalink" , 1 , 3 ); ფუნქცია news_rewrite_init ()( add_rewrite_rule ( "news/.+?/(+)?$" ,"index.php?post_type=news&p=$matches"

, "ზედა");

) add_action ( "init" , "news_rewrite_init" );

როგორ დავამატო დამატებითი ინფორმაცია?

  • ზოგჯერ, პოსტის ტიპის დამატების გარდა, საჭიროა მისი პრეზენტაციის გაფართოება ადმინისტრაციულ პანელში. მაგალითად, თქვენ უნდა აჩვენოთ ინფორმაცია სიახლეების ორიგინალური წყაროს შესახებ. ამ შემთხვევაში, თქვენ მოგიწევთ მივმართოთ რამდენიმე მისტიკურ Wordpress-ის ერთეულებს, რომელთა სახელწოდება ცუდად არის თარგმნილი რუსულად (და, შესაბამისად, არ არის სურვილი მისი დამახინჯება ნეოლოგიზმების გამოგონებით) ეს მეტაბოქსებია.
  • წყარო -> ბლოკის სახელი
  • links_meta_callback -> გამოძახება
  • ახალი ამბები -> რა ტიპის პოსტზე მივმართო
  • გაფართოებული/ნორმალური -> სად უნდა გამოვიდეს
  • ნაგულისხმევი/სიმაღლე -> პრიორიტეტი სხვა ბლოკების კონტექსტში

რა ველებს მოიცავს ბლოკი? მოდით მივმართოთ გამოძახების ფუნქციას.

ორიგინალური სიახლეების ბმული:

" ); wp_nonce_field (ბაზის სახელი (__FILE__), "links_nonce"); $links_stored_meta = get_post_meta ($post -> ID); ?>


" />

მოდი ილუსტრაციულად ვაჩვენოთ ნათქვამი:

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

/** * ინახავს მორგებულ მეტა შეყვანას */ფუნქცია links_meta_save ($post_id) (// ამოწმებს შენახვის სტატუსს $is_autosave = wp_is_post_autosave ($post_id); $is_revision = wp_is_post_revision ($post_id); $is_valid_nonce = (isset ($__POST) &nce" [ "links_nonce" ], საბაზისო სახელი (__FILE__) ) "true" : "false" ; // გამოდის სკრიპტიდან შენახვის სტატუსის მიხედვით if ($is_autosave || $is_revision || ! $is_valid_nonce ) ( დაბრუნება ; ) // ამოწმებს შეყვანას და საჭიროების შემთხვევაში ასუფთავებს/დაზოგავს if (isset ($_POST ["ბმულები-ახალი-ორიგინალი" ) ) (update_post_meta ($post_id, "links-news-original", sanitize_text_field ($_POST ["links-news-original"]) ) ) add_action ( "save_post" , "links_meta_save" );

როგორ გამოვაჩინო ის გვერდზე?

არსებობს ორი ვარიანტი: შექმენით შაბლონი WordPress-ის წესების მიხედვით ან აჩვენეთ ის გვერდზე თქვენივე შაბლონით.

შაბლონისთვის, რომელიც აჩვენებს თითოეულ ინდივიდუალურ ჩანაწერს, შევქმნათ გვერდი სახელწოდებით single-news.php დაახლოებით შემდეგი შინაარსით:

// ამოიღებს შენახულ მნიშვნელობას მონაცემთა ბაზიდან$meta_url = get_post_meta (get_the_ID (), "links-news-original" , true );

"დაფუძნებული: . $meta_url . "" target="_blank">" . $meta_url. "" ;

) ?>

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

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


სცენარის შედეგი

როგორ მივიღოთ დასასრული /index.php Bitrix-ში

Bitrix არის ყველაზე პოპულარული კომერციული CMS და ჩვენც ვიყენებთ მას, ასე რომ, მოდით გადავხედოთ მის გამოყენებას. ბევრი ვებმასტერი ცდილობს მსგავსი პრობლემის გადაჭრას PHP-ის საშუალებით კოდის ჩაწერით init.php-ში. მაგრამ აქ ხდება 2 შეცდომა:

  • გადამისამართება არ იმუშავებს კომპოზიტთან, რადგან კომპოზიტი არ იტვირთება Bitrix ბირთვს;
  • სერვერზე მძიმე დატვირთვა, იმიტომ Apache გაშვებულია გადამისამართებისთვის.

ზოგადად, სწორია ასეთი გადამისამართების გაკეთება ექსკლუზიურად .htaccess ფაილის საშუალებით. მოდით გავხსნათ .htaccess ფაილი, რომელიც არის Bitrix-ის ძირში და უბრალოდ დავამატოთ კოდის 2 ხაზი. RewriteBase / უნდა დაემატოს RewriteEngine On-ის შემდეგ და ყველა წესის ბოლოს დავამატებთ RewriteRule ^(.*)index\.php$1. ბუნებრივია, ყველაფერი დიზაინშია უნდა დაწოლილიყო. კოდი:

ოფციები +FollowSymLinks RewriteEngine On #Added RewriteBase / RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-l RewriteCond %(REQUEST_FILENAME) !-d RewriteUESTPh/$rix! წერის წესი ^(. *)$ /bitrix/urlrewrite.php [L] RewriteRule .* - #დამატებულია RewriteRule ^(.*)index\.php$1

გადაიღეთ ბოლო /index.php .htaccess-ის საშუალებით

თუ არ გაქვთ Bitrix, მაშინ საიტის ძირში .htaccess ფაილში (თუ არ არსებობს, შექმენით) თქვენ უნდა დაამატოთ შემდეგი კოდი:

RewriteEngine RewriteBase / RewriteRule-ზე ^(.*)index\.php$1

იმედია მოაგვარე შენი პრობლემა!

და Linux Systems-ზე მყოფებს შეუძლიათ გამოიყენონ LAMP ან MAMP Mac OS მომხმარებლებისთვის. ამ ყველაფრის არსებობის კიდევ ერთი გზაა ვირტუალური ვებ სერვერის ქონა. თქვენ შეგიძლიათ დააინსტალიროთ ერთი VMware ან Oracle VM VirtualBox-ის გამოყენებით. მათთვის, ვინც დაწინაურებულია ვებ სერვერების პროდუქტებში, მე მჯერა, რომ Vagrant საუკეთესო იქნება თქვენთვის.

დღის ბოლოს, მთავარია გქონდეთ გაშვებული სერვერი, რომელსაც აქვს php და მონაცემთა ბაზა, რომელთანაც შეგიძლიათ დაკავშირება.

ვინაიდან PHP 5.5.0, mysql გაფართოება მოძველებულია, მე გამოვიყენებ PDO-ს. ასე რომ, თუ არ გაქვთ გააქტიურებული PDO გაფართოება, შეგიძლიათ ამის გაკეთება ახლავე. ან თუ შეგიძლიათ გამოიყენოთ ასევე Mysqli. მე გადავწყვიტე გამოვიყენო PDO, რომ გაკვეთილი უფრო უნივერსალური გავხადო, რადგან მის პირველ ვერსიაში ბევრს ჰქონდა პრობლემები mysql-თან. და იყო უამრავი შეცდომა.

საიტის სტრუქტურა

აქ მე შევქმნი ძალიან მარტივ ვებსაიტს, რომელიც აჩვენებს ჩვენი ბოლო ახალი ამბების შეტყობინებების ჩამონათვალს თარიღის მიხედვით.

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

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

მონაცემთა ბაზის მოდელი და ცხრილების სტრუქტურა

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

ასე რომ შექმენით თქვენი მონაცემთა ბაზა და შექმენით მასში შემდეგი ცხრილი.

  • მაგიდის სტრუქტურა მაგიდისთვის info_news
შექმენით ცხრილი, თუ არ არსებობს "info_news" ("news_id" int(11) NOT NULL AUTO_INCREMENT, "news_title" varchar(255) NOT NULL, "news_short_description" ტექსტი NOT NULL, "news_full_content", ტექსტი "NOT_1uthor" ) NOT NULL, "news_published_on" int(46) NOT NULL, PRIMARY KEY ("news_id")) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

ეს არის მაგიდის მოდელი:

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

ფაილების და საქაღალდეების სტრუქტურა

ამ პროექტისთვის მე გამოვიყენებ ორ ძირითად ფაილს: index.phpდა read-news.php.

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

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

დასასრულს, ჩვენი საქაღალდის სტრუქტურა უნდა იყოს შემდეგი:

  • ახალი ამბები/
    • კონფიგურაცია/
      • dbconnect.php
    • მოიცავს/
      • ფუნქციები.php
    • დიზაინი/
      • სტილი.css
  • index.php
  • read-news.php

შეამოწმეთ ჩემი საკუთარი საქაღალდე ქვემოთ:

ფაილების შინაარსი (კოდები)

დასაწყებად, ჩვენ დაგვჭირდება db.connect.php in ფუნქციები.phpიმიტომ, რომ ჩვენს ფუნქციებში დავამატებთ მონაცემთა ბაზის მაგალითს. შემდეგ შიგნით index.phpდა read-news.phpჩვენ მოვითხოვთ ფუნქციები.phpრადგან ჩვენ დაგვჭირდება ეს ფუნქციები მათში.

  • ფაილი config/dbconnect.php

setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);

  • ფაილი დაბრუნება $pdo;

) catch (PDOException $e)( $e->getMessage(); ) )

მოიცავს/ფუნქციებს.php

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

მომზადება(" SELECT news_id, news_title, news_short_description, news_author, news_published_on FROM info_news ORDER BY news_published_on DESC");

დაბრუნება $request->execute() ? $request->fetchAll() : false;

) ფუნქცია getAnArticle($id_article, $conn) ( $request = $conn->prepare(" SELECT news_id, news_title, news_full_content, news_author, news_published_on FROM info_news WHERE news_id = ? "); დაბრუნება $request->execute($ray($ray) id_article)) $request->fetchAll() : false ) ფუნქცია getOtherArticles($differ_id, $conn) ($request = $conn->prepare(" SELECT news_id, news_title, news_short_description, news_full_content, news_author_info REM != ? "); დაბრუნება $request->execute(array($differ_id)) ? $request->fetchAll() : false;)

PHP-ის გარეშე

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

უახლესი ამბები

პირველი ამბების სათაური აქ

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

უახლესი ამბები

ახალი ამბების მეორე სათაური აქ

ახალი ამბების ეს მოკლე აღწერა გამოჩნდება ამ კონკრეტულ ადგილას. ახალი ამბების ეს მოკლე აღწერა გამოჩნდება ამ კონკრეტულ ადგილას.



გამოქვეყნებულია 2015 წლის 12 იანვარს zooboole-ის მიერ read-news.phpწყურვილის სათაური აქ

მეოთხე სიახლე აქ

ახალი ამბების ეს მოკლე აღწერა გამოჩნდება ამ კონკრეტულ ადგილას. ახალი ამბების ეს მოკლე აღწერა გამოჩნდება ამ კონკრეტულ ადგილას.?= თარიღი("Y") ?> - ყველა უფლება დაცულია. შენიშვნა: თითოეულ სიახლეს აქვს კონკრეტული URL, რომელიც აკავშირებს მასგვერდი ასე:

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

The წარმოადგენს ამ კონკრეტული სტატიის უნიკალურ ID-ს. ასე რომ read-news.php?newsid=x

...

ეუბნება read-news.php გვერდს, რომ აჩვენოს სიახლე, რომელსაც აქვს ID

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

fetchNews (). ამისათვის მოდით შევცვალოთ ყველაფერი

შემდეგით:

$სტატია) :?>news_id ?>">ახალი ამბების_სათაური) ?>

  • ფაილი read-news.php

მომზადება(" SELECT news_id, news_title, news_short_description, news_author, news_published_on FROM info_news ORDER BY news_published_on DESC");

დაბრუნება $request->execute() ? $request->fetchAll() : false;

ახალი ამბები_მოკლე_აღწერა) ?> გამოქვეყნდა

news_published_on) ?> მიერ
0) (// Fecth news $article = getAnArticle($id_article, $dbh); $article = $article; )else( $article = false; echo " არასწორი სტატია!"; ) $other_articles = getOtherArticles ($id_article, $dbh); ?>

. ამისათვის მოდით შევცვალოთ ყველაფერი

$სტატია) :?>news_id ?>">ახალი ამბების_სათაური) ?>
news_full_content) ?>

სხვა სტატიები

$სტატია) :?>

fetchNews (). ამისათვის მოდით შევცვალოთ ყველაფერი

შემდეგით:

$სტატია) :?>news_id ?>">ახალი ამბების_სათაური) ?> - ყველა უფლება დაცულია.


  • ფაილი დიზაინი/სტილი.css

Html, ტექსტი ( font-family: verdana; შრიფტის ზომა: 16px; შრიფტის ზომა: 100%; შრიფტის ზომა: 1em; სიმაღლე: 100%; სიგანე: 100%; ზღვარი: 0; padding: 0; ფონის ფერი : #4DDEDF; : #ffffff; ;) .news-box ( სიგანე: 800 პიქსელი; ზღვარი: 0.5 ემ.; ბალიშები: 30 პიქსელი; ფონის ფერი: #ffffff; ) 0; ფერი: #e45; : #aaa; ) ძირი (შრიფტის ზომა: 10 პიქსელი; ფერი: #333; ტექსტის გასწორება: ცენტრში; სიგანე: 800 პიქსელი; ზღვარი: 2em ავტომატური; padding: 10px 30px; )

ოთახი გაუმჯობესებისთვის

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

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

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

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

დასკვნა

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

ეს არის ძალიან მარტივი სისტემა, მაგრამ მისი საშუალებით შეგიძლიათ გაიუმჯობესოთ თქვენი ცოდნა PHP/MYSQL აპლიკაციებში. ასევე იყო შესაძლებლობა გაგვეცნო, თუ როგორ გამოიყენოთ PDO.

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



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

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

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