Làm cách nào để tạo URL SEF trong mô-đun tùy chỉnh thay vì URL thực?


7

Trong mô-đun của tôi, mã này đang được sử dụng để tạo URL của trang:

JURI::base() . ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid )

Điều này hoạt động exaclty như nó cần và tạo ra một URL trông giống như:

http://example.com/index.php?option=com_content&view=article&id=83&catid=26&Itemid=162

Nhưng tôi muốn biết liệu có cách nào để mô-đun tạo URL SEF cho trang hiện tại không. Cái gì đó như:

http://example.com/resources/blog/83-illustration

Câu trả lời:


13

Sử dụng JRoute cho việc này:

rtrim(JUri::base(), '/') . JRoute::_(ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid ))

nhưng bạn không cần JUri :: base () nếu bạn không muốn liên kết đến một tên miền khác.


1
Điều này làm việc và tôi sẽ làm cho nó như là "trả lời" nhưng tôi đã tự hỏi tại sao mới, SEF URL có hai dấu gạch chéo sau tên miền bite-sized-joomla.com//our-work/illustration-photography/...
rleathers

3
lý do là bởi vì JUri :: base () trả về một uri đầy đủ với "/" ở cuối. và JRoute trả về một uri tuyệt đối với "/" ở đầu. Tôi sẽ chỉnh sửa câu trả lời.
Harald Leithner

1
Tôi tin rằng nên rtrim(JUri::base(), '/')...thay vào đó ltrim(JUri::base(), '/')...là lf vì dấu gạch chéo phụ nằm ở cuối đầu ra JUri :: base ().
Benjamin Ray

Tôi nghĩ bạn đúng Tôi đã cập nhật câu trả lời, thx.
Harald Leithner

4

Có một plugin hệ thống được gọi là System: SEF. Khi được bật, plugin này sẽ quét đầu ra HTML cuối cùng ngay trước khi nó được gửi tới trình duyệt và thay thế bất kỳ liên kết không phải SEF nào với các đối tác SEF của chúng bằng cách chạy qua JRoute::_($url);. Điều này chỉ hoạt động cho các liên kết nội bộ mặc dù bắt đầu bằng index.php, vì vậy nó sẽ không hoạt động nếu liên kết bắt đầu bằng http://.

Hãy thử xóa JUri::base()(và do đó xóa http: // khỏi liên kết) và nó sẽ hoạt động nếu plugin được bật.


3

Đây là một cách khác để có được URL gốc của trang web. Điều này cũng quan tâm nếu trang web của bạn nằm trong thư mục con

$rootURL = rtrim(JURI::base(),'/');
        $subpathURL = JURI::base(true);
        if(!empty($subpathURL) && ($subpathURL != '/')) {
            $rootURL = substr($rootURL, 0, -1 * strlen($subpathURL));
        }

Sau đó bạn có thể làm

$url = $rootURL.JRoute::_(ContentHelperRoute::getArticleRoute(  $article->id,  $article->catid ));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.