it-swarm-vi.com

Làm cách nào tôi có thể sử dụng com_ajax để tải và dỡ bỏ mô-đun khác (đối với Thiết kế thích ứng)

Đây là phần tiếp theo của câu hỏi Làm thế nào một mô-đun có thể bị vô hiệu hóa dựa trên kích thước thiết bị hoặc khung nhìn trong Joomla 3 để tối ưu hóa hiệu suất cho thiết bị di động?

Làm cách nào tôi có thể sử dụng com_ajax để tải và dỡ bỏ mô-đun? Cuộc gọi có thể được thực hiện bằng cách sử dụng javascript hoặc jquery thuần túy và nó sẽ dựa trên kích thước khung nhìn (chúng tôi đang sử dụng mediacheck.js cho điều đó: https://github.com/sparkbox/mediaCheck ).

Tùy thuộc vào câu trả lời này đi đâu, chúng ta thậm chí có thể [đưa nhà phát triển của mình] đặt một thành phần lại với nhau để cho phép loại tải động này (chọn điểm dừng, chọn mô-đun để tải/dỡ tải).

Biện minh: Responsive/Adaptive (chọn hương vị của bạn) là điều cần thiết hiện nay và vì vậy việc giảm kích thước tải cho thiết bị di động (tốc độ 3G chậm nếu ở khu vực tiếp nhận tốt, ở Brazil). Nếu tôi có thể sử dụng 10 ~ 15k jQuery/Javascript để tránh tải 20 ~ 200k mô-đun (các mô-đun có thể chứa hình ảnh, vì vậy, vâng, có thể đạt kích thước khá lớn), tôi hoàn toàn dành cho nó. Giảm sự lộn xộn màn hình cũng là một điều bắt buộc trên một thiết kế di động tốt. Chúng tôi thậm chí có thể lập luận rằng đây là "di động đầu tiên", bởi vì chúng tôi thiết kế mà không có mô-đun, sau đó tải nó khi kích thước màn hình cho phép.

com_ajax chỉ thực sự được sử dụng nếu dữ liệu cho mô-đun được hỗ trợ (dựa trên JSON), mặc dù nó có các tính năng khác. Trong một số trường hợp, cách dễ nhất để "chỉ" tải một mô-đun, là tạo một tệp mẫu mới. Điều này có thể được thực hiện bằng cách tạo một cái gì đó như "module.php" trong thư mục mẫu. Sau đó sử dụng một cái gì đó như thế này bên trong.

<?php
$jinput = JFactory::getApplication()->input;
$module = $jinput->get('module_pos', 'default_value', 'get');
?>
<jdoc:include type="modules" name="<?php echo $module; ?>"/>

Điều này sẽ chỉ tải mô-đun trong một trang, bằng cách sử dụng một url như index.php?tmpl=module&module_pos=foo Trong yêu cầu ajax, bạn sẽ có thể nhận được "chỉ" dữ liệu mô-đun. Điều này sẽ tải tất cả các mô-đun được gán cho vị trí được gọi bởi module_pose.

Điều này tuy nhiên có một vấn đề, javascript. Các mô-đun thêm javascript vào thẻ đầu thông qua API của Joomla. Để chống lại điều này, bạn thực sự cần phải thêm nhiều hơn vào tệp module.php để tìm hiểu những gì trong thẻ head, những gì chưa có trong trang hiện tại và thực tế là tìm và thêm những gì cần thiết. Quá trình này sẽ khá khó khăn nhưng nếu bạn biết các mô-đun thực hiện việc này, bạn có thể thêm nhiều hơn vào lệnh gọi ajax để tự động thực hiện việc này tùy thuộc vào mô-đun.

Điều này sẽ giúp bạn "tải" mô-đun, sau khi tải qua ajax, chỉ cần sử dụng jquery để thêm html vào trang mà bạn cần, để "dỡ" nó, chỉ cần xóa nó khỏi dom.

có thể được thực hiện với jQuery(ROOT_ELEMENT_OF_MODULE).remove(); để xóa và jQuery(PARENT_ELEMENT_TO_INSERT_MODULE).html(MODULE_HTML);. Tất nhiên có những biến thể có thể được thực hiện, nhưng đó là lời giải thích đơn giản.

5
Jordan Ramstad