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)


7

Đâ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 các 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 (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 đồng ý. 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.


1
Câu hỏi rất hay. Một cái gì đó tôi thực sự muốn làm cho mình nhưng không chắc chắn về cách tiếp cận tốt nhất vào lúc này. Bạn đã thực hiện bất kỳ nghiên cứu để xem nếu nó đã đạt được?
Lodder

Thậm chí không biết điều này là có thể. Quá nhiều để theo kịp với ngày nay. Câu hỏi hay.
Nestor Ledon

Câu trả lời:


5

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=footrong 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();để loại bỏ 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.


Cảm ơn bạn, nó hoạt động tốt và đó là một giải pháp đơn giản. Bạn có thể giải thích thêm một chút về cách bạn có thể thực hiện phần này không: "nếu bạn biết các mô-đun làm 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"? Trên thực tế, tôi bao gồm tất cả các tệp js theo cách thủ công (tôi biết nên thêm tệp nào)
Sébastien Gicquel

Bạn cần sử dụng một cái gì đó giống như jQuery('head').first().append('SCRIPT_TAG');và nên tải JS. Mặc dù vậy, nó sẽ không hoạt động vì một số có thể cần tải trực tiếp (mặc dù bạn có thể thử jQuery(document).trigger('readty');) Nhưng điều đó cũng phụ thuộc vào mức độ trang web của bạn có JS, kích hoạt tải hai lần có thể gây ra sự cố và tôi thậm chí không chắc liệu nó có hoạt động không .
Jordan Ramstad
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.