ส่วนที่เหลือเว็บลิงค์ php.ini ลำดับการดำเนินการ (การดำเนินการ) ของส่วนประกอบ Joomla การปลอมแปลงแถบที่อยู่ใน Microsoft Internet Explorer

จุดเริ่มต้นสู่ Joomla! ส่วนประกอบจะคล้ายกันสำหรับส่วนประกอบส่วนใหญ่ สำหรับตัวอย่างนี้ เราจะใช้หนึ่งในองค์ประกอบหลักของ Joomla - เว็บลิงค์ ไฟล์แรกที่จะดำเนินการในส่วนหน้า: …/components/com_weblinks/weblinks.php

อันดับแรก เราจะเห็นการตรวจสอบความปลอดภัยที่ออกแบบมาเพื่อให้แน่ใจว่าไม่มีใครสามารถโทรหาเพจนี้ได้โดยตรง นี่คือมาตรฐานที่ควรใช้ในไฟล์ php ทั้งหมดของคุณ (แม้ว่าจะมีข้อยกเว้นบางประการ):

เราตรวจสอบสตริงการสืบค้นเพื่อดูว่ามีการส่งชื่อคอนโทรลเลอร์เฉพาะหรือไม่ หากเป็นเช่นนั้น เราต้องแน่ใจว่าเราสามารถโหลดไฟล์ที่ต้องการในไดเร็กทอรีคอนโทรลเลอร์ได้:

// จำเป็นต้องมีคอนโทรลเลอร์เฉพาะหากมีการร้องขอ if ($controller = JRequest:: getWord("controller" ) ) ( $path = JPATH_COMPONENT. DS. "controllers" . DS. $controller . ".php" ; if (file_exists ($path) ) ) ( need_once $path ; ) อื่น ๆ ( $controller = "" ; ) )

ตอนนี้เราสร้างอินสแตนซ์คลาสคอนโทรลเลอร์ของเราโดยใช้ชื่อที่เรากำหนดไว้ด้านบน:

ทันทีที่งานเสร็จสิ้น เราจะดำเนินการเปลี่ยนเส้นทาง หากจำเป็น:

// เปลี่ยนเส้นทางหากตั้งค่าโดยคอนโทรลเลอร์ $controller -> เปลี่ยนเส้นทาง () ;
คลาสคอนโทรลเลอร์

ตัวควบคุมทั่วไป (เฉพาะ) สำหรับส่วนประกอบลิงก์อยู่ที่นี่: .../components/com_weblinks/controller.php
คลาสทั้งหมดนี้กำหนดวิธีการแสดงผล ซึ่งเป็นวิธีการเริ่มต้นที่ใช้ เว้นแต่ผู้ใช้จะระบุงานอื่น

กำหนด ("_JEXEC" ) หรือ die ( "การเข้าถึงแบบจำกัด" ) ;

นำเข้า("joomla.application.component.controller" );
/** * Weblinks Component Controller * * @package Joomla * @subpackage Weblinks * @since 1.5 */ class WeblinksController ขยาย JController ( /** * วิธีการแสดงมุมมองเว็บลิงก์ * * @access public * @since 1.5 */ function display () ( // ตั้งค่ามุมมองเริ่มต้นหากไม่มีถ้า ( ! JRequest:: getCmd ( "view") ) ( JRequest:: setVar ( "view" , "categories" ) ; ) // อัปเดตจำนวนการเข้าชมสำหรับเว็บลิงก์ if (JRequest:: getCmd ("view" ) == "weblink" ) ( $model =& $this -> getModel ("weblink" ) ; $model -> hit () ; ) // ดูตรรกะแคช -- แบบง่าย ... เราเข้าสู่ระบบแล้วหรือยัง? $user = & JFactory::getUser() ; $view = JRequest::getVar("view"); " , "INT" ; if ($user -> get ("id" ) ||. ($view == "category" && $viewcache == 0 ) ) ( parent:: display (false) ; ) else ( parent :: display (true) ; ) )
ในวิธีนี้ เราตั้งค่ามุมมองเริ่มต้นให้แสดงหมวดหมู่ เว้นแต่จะส่งผ่านมุมมองอื่นเป็นพารามิเตอร์สตริงการสืบค้น หากมุมมองที่ต้องการคือเว็บลิงก์ เราจะเพิ่มตัวนับการดูลิงก์ จากนั้นเราตั้งค่าของตัวแปรมุมมองและเรียกใช้เมธอด diplay ของคลาส JController หลักของเรา
ควรให้ความสนใจเป็นพิเศษกับการเรียกเมธอด getModel มันโหลดโมเดลที่จำเป็นสำหรับส่วนประกอบ ในตัวอย่างนี้ เมธอดนี้จะโหลดโมเดลเว็บลิงก์ที่นี่: .../components/com_weblinks/models/weblink.php

ที่นี่เราจะยอมรับว่าเราไม่ได้ขอมุมมองที่เฉพาะเจาะจง ดังนั้นมุมมองของเราจะถูกกำหนดเป็นหมวดหมู่

ต่อไปเราจะเปิดคลาสมุมมอง

// ตรวจสอบให้แน่ใจว่าไฟล์นี้รวมอยู่ใน Joomla!< count ($categories ) ; $i ++ ) { $category =& $categories [ $i ] ; $category ->กำหนด("_JEXEC") หรือ die ("จำกัดการเข้าถึง");

ขอย้ำอีกครั้งว่านี่เป็นคลาสที่ง่ายมากพร้อมวิธีแสดงผลวิธีเดียว ตรรกะส่วนใหญ่ที่นี่เฉพาะกับส่วนประกอบของลิงก์ แต่ถ้าคุณมองอย่างใกล้ชิด คุณจะพบฟังก์ชันที่ใช้ในคลาสมุมมองส่วนประกอบส่วนใหญ่ ในตอนท้ายของวิธีการแสดง คลาสนี้จะเรียกวิธีการแสดงผลหลัก (JView) โดยส่งชื่อของเทมเพลตที่จะแสดง หากไม่ส่งชื่อของเทมเพลตการแสดงผล ระบบจะใช้เทมเพลต "เริ่มต้น"
และสุดท้าย เราเปิดคลาสเทมเพลต

คลาสเทมเพลต

เราตกลงกันว่าจะไม่ได้ส่งชื่อเทมเพลตเฉพาะ ดังนั้นจะใช้เทมเพลตเริ่มต้น ในกรณีนี้ ไฟล์ต่อไปนี้จะได้รับการพิจารณา: .../components/com_weblinks/views/categories/tmpl/default.php
-> หลบหนี ($ นี้ -> พารามิเตอร์ -> รับ ("page_title" ) ) ;

  • ( )

-

ตรรกะส่วนใหญ่ที่นี่มีความเฉพาะเจาะจงกับส่วนประกอบที่กำลังดำเนินการ จากโค้ดก็ชัดเจนว่าไฟล์นี้มี HTML ทั้งหมดที่ผสมกับ PHP - นี่คือคุณสมบัติและวัตถุประสงค์

ไฟล์อื่นๆ ที่ใช้ในส่วนประกอบ

  • ไฟล์ประเภทอื่นๆ หลายประเภทที่คุณอาจพบในส่วนประกอบ:
  • Helpers - ส่วนประกอบมักใช้ไฟล์ helper.php หรือไดเร็กทอรี helpers ที่มีไฟล์จำนวนมาก โดยทั่วไปไฟล์เหล่านี้จะมีเฉพาะฟังก์ชันการทำงานทั่วไปสำหรับส่วนประกอบเท่านั้น
  • ดูเหมือนว่าเนื้อหาจะเป็นโฟลเดอร์ที่รับทั้งหมดสำหรับไฟล์อื่นๆ ที่รวมอยู่ในคอมโพเนนต์
  • router.php - ไฟล์นี้ถูกใช้เมื่อเปิดใช้งานการตั้งค่า SEF URL เพื่อแปล URL ในทั้งสองทิศทาง (เป็นไฟล์ที่มนุษย์อ่านได้พร้อมนามแฝงและเป็นมุมมองระบบ Joomla พร้อมพารามิเตอร์)
  • ไฟล์ xml - โดยปกติแล้วจะกำหนดพารามิเตอร์และข้อมูลอื่นๆ เกี่ยวกับส่วนประกอบและภาพรวม พวกมันถูกใช้เมื่อสร้างรายการเมนูส่วนประกอบ
  • index.html - ควรมีไฟล์ index.html ว่างๆ ไว้ในไดเร็กทอรีทั้งหมดของคุณ นี่เป็นมาตรการรักษาความปลอดภัยแบบพาสซีฟ

css/images/js - โฟลเดอร์ที่มีไฟล์ต่างๆ เพื่อใช้การออกแบบและฟังก์ชันการทำงานในฝั่งไคลเอ็นต์ (ในเบราว์เซอร์)

ฉันยังคงแบ่งปันสคริปต์ไซต์เล็กๆ แต่มีประโยชน์มากกับคุณต่อไป ซึ่งจะช่วยปรับปรุงทัศนคติของเครื่องมือค้นหาที่มีต่อไซต์ของคุณ คราวนี้เราจะพูดถึงการเชื่อมโยงหน้าที่เหมาะสม

Page_address_1; Anchor_1, Anchor_2, Anchor_3,..., Anchor_n Page_address_2; ​​​​anchor_1, Anchor_1, Anchor_2, Anchor_3, ..., Anchor_n

อย่างที่คุณเห็น สามารถใช้สคริปต์เพิ่มเติมได้โดยใช้ที่อยู่หน้าและจุดยึดสำหรับสคริปต์เหล่านั้นจำนวนเท่าใดก็ได้ ที่อยู่หน้าเขียนโดยไม่มี http://www.site.ru/ เช่น ทันทีจากรูทโดยไม่ต้องสแลชแรก ที่อยู่จะถูกแยกออกจากจุดยึดด้วยเครื่องหมายอัฒภาค และจุดยึดจะถูกคั่นด้วยเครื่องหมายจุลภาค คุณสามารถเขียนที่อยู่แบบเต็มได้ซึ่งสะดวกกว่าสำหรับฉันเป็นการส่วนตัว แต่คุณสามารถเปลี่ยนการกรอกและผลลัพธ์ของผลลัพธ์ได้ด้วยตัวเอง ฉันคิดว่าคุณจะคิดออกเองโดยสัญชาตญาณ

ดังนั้นจึงมีการสร้างฐานข้อมูลของลิงก์และจุดยึดสำหรับพวกเขาด้านล่างฉันจะยกตัวอย่างโค้ด PHP สำหรับการแสดงลิงก์โดยตรงสำหรับการเชื่อมโยงบนเว็บไซต์:

เราวางโค้ดนี้ไว้ที่ใดก็ได้บนเว็บไซต์ ซึ่งจะแสดงลิงก์แบบสุ่ม 5 ลิงก์จากฐานข้อมูลและจุดยึดแบบสุ่ม เป็นการดีกว่าที่จะเจือจางพุกแทนที่จะเขียนเพียง 1 ลงในลิงก์ ด้วยการเชื่อมโยงที่เหมาะสมบนเว็บไซต์ของคุณ คุณจะเห็นปริมาณการเข้าชมที่เพิ่มขึ้นและการปรับปรุงตัวบ่งชี้เว็บไซต์อื่น ๆ ทันที

ฉันหวังว่าจะมีคำถามของคุณในความคิดเห็นในโพสต์นี้

วันที่เผยแพร่: 3 มีนาคม 2014
    บทวิจารณ์และความคิดเห็น:

    มิทรี:
    ขอบคุณสำหรับสคริปต์ ฉันจะนำไปใช้ เป็นไปไม่ได้ที่จะคัดลอกซอร์สโค้ดจากไซต์ แต่จะคัดลอกเป็นส่วนเล็ก ๆ เท่านั้นซึ่งจะสะดวกกว่าอย่างครบถ้วน

    คิริลล์:
    ขอบคุณสำหรับหมายเหตุเกี่ยวกับการคัดลอก ฉันเพิ่งเห็นมันแล้ว ฉันจะพยายามแก้ไขโดยเร็วที่สุด

    อเล็กเซย์ พาฟลอฟ:
    เกิดข้อผิดพลาดในบรรทัด $tex = explode(///,$sendlist[$count] คุณต้องมีอัฒภาค ไม่ใช่โคลอน ฉันเปลี่ยนโค้ดเล็กน้อยเพื่อให้ชัดเจนยิ่งขึ้น: