2012-11-14 31 views
7

Theo mặc định parent::display($tpl); tải components/com_my_component/views/my_component/tmpl/default.php, nhưng trong một số trường hợp, tôi cần tải tệp php khác nằm trong cùng một thư mục gần default.php (ví dụ: components/com_my_component/views/my_component/tmpl/lol.php). Cách thực hiện việc này từ view.html.php.Cách thay đổi bố cục tải trong chế độ xem Joomla?

P.S.

Đã thử tải loadTemplatesetLayout các phương pháp không có may mắn.

+0

Tôi nghĩ đó là layout = lol. – Irfan

+0

@ Irfan cùng một shit, nhưng bây giờ tải mặc định – user1692333

+0

bạn có thể vui lòng dán url đầy đủ mà bạn đang đi qua? – Irfan

Trả lời

10

Giải quyết vấn đề một mình. Cần phải sử dụng các phương pháp setLayout và chú ý đến cú pháp đầu vào

$this->setLayout('dafault:lol'); 
parent::display($tpl); 
+0

Tôi gặp lỗi trong bộ điều khiển Lỗi nghiêm trọng: Gọi đến phương thức không xác định FcseController :: setLayout() trong /var/www/pygmaxia2.gr/components/com_fcse/controller.php trên dòng 33 và mã trong dòng này là $ this-> setLayout ('dafault: test'); Bất kỳ ý tưởng nào? – themis

+0

oh Tôi đã làm $ view = new JView(); \t \t \t \t $ view-> setLayout ('dafault: test'); và nó hoạt động :) – themis

+0

Mã này sẽ làm cho joomla bỏ qua tham số yêu cầu 'layout'. Vui lòng xem câu trả lời của tôi: http://stackoverflow.com/a/31833510/1031312 – Ozzy

2

Theo mặc định, joomla tìm kiếm từ khóa layout trong URL để quyết định bố trí để hiển thị. Nếu biến này trống hoặc không có thì bố cục tmpl/default.php sẽ được tải.

Bằng cách chỉnh sửa tệp view.html.php, bạn có thể đặt bố cục mặc định bằng cách sử dụng API JView, ví dụ: $this->setLayout('lol') sẽ làm cho URL example.com/yourview tương đương với example.com/yourview?layout=lol.

Tuy nhiên, thay đổi này một mình sẽ dẫn đến việc Joomla ghi đè hành vi mặc định là để yêu cầu layout sẽ bị bỏ qua. Điều này có nghĩa rằng yêu cầu example.com/yourview?layout=lmao cũng sẽ hiển thị example.com/yourview = example.com/yourview?layout=lol

Bạn có thể giải quyết việc này một cách dễ dàng bằng cách thêm một điều kiện xung quanh setLayout chức năng để chỉ nếu từ khóa layout là không có mặt thì bạn sẽ thiết lập cách bố trí mặc định để lol, ví dụ

<?php 
    # ... 

     function display($tpl = null) { 
     # ... 

     # Edit : Set the default layout to 'lol' 
     $layout = JRequest::getWord('layout', ''); 
     if (empty($layout)) $this->setLayout("lol"); 

     // Display the view 
     parent::display($tpl); 
     } 

    # ... 
0

Tôi tiếp tục quay lại điều này và tôi chưa tìm được giải pháp thỏa mãn.

gì không làm việc, từ J1.5 ngay lên đến J3.4, đối với tôi luôn luôn là để thiết lập các biến tpl $ trong view.html.php

Nếu $ tpl rỗng hoặc "" sau đó tmpl /default.php được hiển thị theo mặc định.

Nếu bạn thay đổi $ tpl thành chuỗi, ví dụ: $ tpl = "stacker" thì nó sẽ tìm và hiển thị tmpl/default_stacker.php

Tôi đã thấy nhiều lý thuyết khác nhau về việc thay đổi nó trước đó trong MVC sao cho nó không cần default_ pretext. ví dụ. tmpl/stacker.php Không ai làm việc cho tôi.

Các vấn đề liên quan