รับ Joomla Joomla ปัจจุบัน


25

รหัสต่อไปนี้ใช้งานได้ใน Joomla 1.6 แต่มันมีข้อผิดพลาดมาตรฐานที่เข้มงวดใน 3.x:

มาตรฐานที่เข้มงวด: ควรกำหนดตัวแปรโดยอ้างอิงเท่านั้น

    //Get the full URL for sharing purposes
    $uri = & JFactory::getURI();
    $absolute_url = $uri->toString();

    <?php echo $absolute_url; ?>

ฉันจะทำให้โค้ดทำงานโดยไม่มีข้อผิดพลาดใน Joomla 3.x ได้อย่างไร?


Btw มันไม่ได้ขึ้นอยู่กับรุ่น Joomla แต่ตามรุ่น PHP การกำหนดตัวแปรโดยการอ้างอิงถูกคัดค้านใน PHP
turson

3
เพียงโน้ตสำหรับทุกคนที่ต้องการคำตอบสำหรับสิ่งนี้เพื่อรับURL แบบเต็มอย่าใช้JUri::current()เพราะมันจะไม่ส่งคืนพารามิเตอร์เคียวรีใด ๆ ใช้สิ่งที่อธิบายไว้ในคำตอบที่ได้รับการยอมรับด้านล่าง: joomla.stackexchange.com/a/4295/168
Lodder

ดีที่สุดที่จะเห็น api doc api.joomla.org/cms-3/classes/Joomla.CMS.Uri.Uri.html
อนันต์

คำตอบ:


36

UPDATE

คำตอบสำหรับคำถามหลักคือ: JFactory :: getUri () เลิกใช้แล้วใช้ JUri โดยตรงเช่นนี้:

<?php 
$uri = JUri::getInstance(); 
echo $uri->toString();

// or simpler:

echo JUri::getInstance();
?>

มาตรฐานที่เข้มงวดข้อผิดพลาดเป็นเพราะก่อน& JFactory::getURI();คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับที่ด้านล่าง


คำตอบเดิม

ลบ&

//Get the full URL for sharing purposes
$uri = JFactory::getURI();
$absolute_url = $uri->toString();

<?php echo $absolute_url; ?>

ด้วย PHP5 newผู้ดำเนินการจะคืนค่าการอ้างอิงโดยอัตโนมัติดังนั้นไม่จำเป็นต้อง '&' อีกต่อไป

จากคู่มือ PHP อย่างเป็นทางการ:

ตั้งแต่ PHP 5 ตัวดำเนินการใหม่ส่งคืนการอ้างอิงโดยอัตโนมัติดังนั้นการกำหนดผลลัพธ์ใหม่โดยการอ้างอิงผลลัพธ์ในข้อความ E_DEPRECATED ใน PHP 5.3 และใหม่กว่าและข้อความ E_STRICT ในเวอร์ชันก่อนหน้า

แหล่งที่มา: http://php.net/manual/en/language.operators.assignment.php


ดูคำตอบของฉันที่นี่ -> stackoverflow.com/questions/23702983/…
ezcodr

8

ตามบทช่วยสอนของ Joomlaคุณจะได้รับ URL ปัจจุบันด้วยฟังก์ชั่นนี้:

JUri::current();

4
Juri :: ปัจจุบัน () ผลตอบแทน URI คำขอปัจจุบันโดยไม่ได้รับการสอบถามหรือชิ้นส่วน ตัวอย่างเช่นหากคุณไปที่ URL ต่อไปนี้: localhost / joomla3 / index.php / component / users /? view = เตือน JUri :: current () จะกลับมา: localhost / joomla3 / index.php / component / users
fruppel

5

UPDATE: JUriขณะนี้เลิกใช้แล้ว วิธีที่ถูกต้องตอนนี้เป็นดังนี้:

$uri = Joomla\CMS\Uri\Uri::getInstance();
echo  $uri->toString();

ข้อความเก่าที่เลิกใช้แล้วในขณะนี้:

JFactory::getURI();เลิกใช้แล้ว วิธีที่ถูกต้องในการรับ URL ปัจจุบันคือ:

$uri = JUri::getInstance();
echo  $uri->toString();

0

การtoStringใช้วิธีรับ URL ปัจจุบันไม่ถูกต้อง toStringวิธีการไม่ได้หมายความว่า ต่อไปนี้เป็นวิธีการพิสูจน์ที่ดีกว่าสะอาดขึ้นและในอนาคตเพื่อดึง URL ปัจจุบัน:

$objJURI = JFactory::getURI();
$strQuery = '';
if (!empty($objJURI->getQuery()))
    $strQuery = '?'.$objJURI->getQuery();
$strFragment = '';
if ((!empty($objJURI->getFragment())) && ($objJURI->getFragment() != '#'))
    $strFragment = $objJURI->getFragment();
$currentURL = $objJURI->current().$strQuery.$strFragment;

โปรดทราบว่าgetFragmentวิธีการควรส่งคืนชิ้นส่วนหลังเครื่องหมายหมายเลข แต่ดูเหมือนว่าจะมีข้อบกพร่องหลักที่ป้องกันไม่ให้ทำเช่นนั้น


นี่เป็นสิ่งที่ผิด index.php&option=com_foo&view=barมันจะแสดง มันควรจะเป็น?หลังจากindex.php
Lodder

2
มันถูกต้องตามกฎหมายที่จะใช้ toString มันเป็นวิธีการสาธารณะและใช้งานอย่างหนักโดยชั้น JUri เอง แม้แต่ความคิดเห็นของเมธอดก็บอกว่า "ส่งคืนสตริง uri แบบเต็ม" ใช้ JFactory :: getUri (); เลิกใช้แล้วและแน่นอน "ผิดพลาดมากขึ้น"
fruppel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.