nhox49 Đăng lúc 2024-9-22 19:35:41

Hướng dẫn tạo nhiều giao diện cho SMM cho nhiều thiết bị

Đầu tiên, bạn cần tạo thư mục templates rồi trong nó bạn tạo tiếp cho mình 2 thư mục con đó là mobile và desktop cho mình .
Trong 2 thư mục con này bạn cần tạo những tập tin có tên tương tự tập tin ngoài index như:


[*]index (Đây là trang chủ)
[*]search (Tìm kiếm)
[*]article (Trang xem bài viết)
[*]category (Trang xem chuyên mục)


Tương tự cho các file khác nếu có, sau đó copy nội dung của các file này hoặc không tạo mà copy hết chúng nó vào 2 thư mục mobile và desktop nha.

Tương tự thì bạn cần tạo 2 file _block với các layout cần thiết vào đó thôi, ví dụ như tạo 2 file đó xong trong mỗi file thì bạn có header và footer trong nó.
Và trước khi tiếp tục thì bạn copy 2 layout này của file block chính vào 2 file block phụ vừa tạo nha, sau này chúng ta chỉnh sửa nó sau.

Giờ tạo cho mình file _functions.twig (Để chứa cái function mới này)
sau đó thì copy code này vào file function:

{% macro display_layout() %}
{% set ua = SERVER_HTTP_USER_AGENT %}
{% set arrUA = ua|lower %}
{% if arrUA|preg_match('/windows|ipod|ipad|iphone|android|webos|blackberry|midp/') and arrUA|preg_match('/mobile/') %}
    mobile
{% elseif arrUA|preg_match('/mobile/') %}
    mobile
{% else %}
    desktop
{% endif %}
{% endmacro %}


Cách sử dụng:
Bạn phải chắc chắn rằng bạn đã copy layout từ file block chính. Giả sử file đó là
Đầu tiên, bạn cần import macro từ file chứa nó. Giả sử file đó là , bạn thực hiện như sau:



{% block header %}
{% from '_functions' import display_layout %}
{% set display = display_layout()|trim %}
{% endblock %}


Làm tương tự với footer nha.

Gọi layout cho thiết bị:
Tiếp theo, bạn có thể sử dụng biến display để kiểm tra loại thiết bị và gọi layout tương ứng.

Bạn để code này ở dưới ngay chỗ trước {% endblock %} cho mình nha:

{% if display == 'desktop' %}
{% use '/templates/desktop/_block' %}
{% else %}
{% use '/templates/mobile/_block' %}
{% endif %}
{{block('header')}}

Làm tương tự với footer nhé.


Sử dụng trong các file khác:
Bạn có thể áp dụng tương tự trong các file khác như index, category, article, search...

Ví dụ với file index:

{% from '_functions' import display_layout %}
{% set display = display_layout()|trim %}
{% if display == 'desktop' %}
{% include '/templates/desktop/index' %}
{% else %}
{% include '/templates/mobile/index' %}
{% endif %}



Giải thích:
- /templates/mobile/index là đường dẫn tới thư mục templates và thư mục con mobile.
- index là file cần gọi. Bạn có thể thay đổi nó thành file khác mà bạn muốn.

Tùy chọn giao diện:
Nếu bạn muốn khách có thể lựa chọn giao diện bằng cookie, bạn có thể điều chỉnh hàm display_layout như sau:


{% macro display_layout() %}
{% set ua = SERVER_HTTP_USER_AGENT %}
{% set arrUA = ua|lower %}
{% if COOKIE['device'] == 'mobile' or COOKIE['device'] == 'desktop' %}{{COOKIE['device'] }}{% else %}
    {% if arrUA|preg_match('/windows|ipod|ipad|iphone|android|webos|blackberry|midp/') and arrUA|preg_match('/mobile/') %}
      mobile
    {% elseif arrUA|preg_match('/mobile/') %}
      mobile
    {% else %}
      desktop
    {% endif %}
{% endif %}
{% endmacro %}

Với hàm này, nếu có cookie device, nó sẽ trả về giá trị của cookie đó, cho phép người dùng chọn giao diện mà họ muốn.

Và tất nhiên là không thể thiếu đó là phần chọn giao diện mẫu cho cái trang chọn giao diện:
HTML
<div id="selectDevice" class="modal">
    <div class="modal-content">
      <h2 class="modal-header">Hãy chọn giao diện bạn muốn sử dụng:         <span class="close">&times;</span></h2>
      <div class="modal-body">
      <p>Giao diện mobile thích hợp cho các loại điện thoại di động, touch và điện thoại sử dụng wap.</p>
      <p>Giao diện Desktop là giao diện hiện đại hơn, dành cho các loại máy tính để bàn và laptop, macbook.</p>
      <p><b style="color: red">Lời khuyên</b>: Tuỳ chọn giao diện có thể dẫn đến giao diện không trực quan và khó sử dụng hơn đối với các thiết bị có màn hình nhỏ. Nên để hệ thống tự phân phát giao diện, như vậy bạn có thể dễ dàng sử dụng hơn.</p>
      </div>
      <div class="modal-footer">
      <button onclick="setDevice('desktop')" class="button">Giao Diện Desktop</button>
      <button onclick="setDevice('mobile')" class="button">Giao Diện Mobile</button>
      </div>
      </div>
    </div>
CSS
body{font-family:Arial,sans-serif;margin:50px}
.button { color: red;padding:10px 20px;font-size:16px;cursor:pointer;margin:10px;background:#fff;border:1px solid #ff2828}
#chooseLayoutBtn {padding:10px 20px;size:16px;cursor:pointer;margin:10px;background:#fff;border:1px solid #ff2828}
.modal{position:fixed;z-index:1;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4);padding-top:60px;display:none;opacity:0;animation:animatetop 0.1s;transform:translateY(-100%);transition:opacity 0.3s ease,transform 0.9s ease}
.modal.active{display:block;opacity:1;transform:translateY(0);animation:animatetop 0.1s}
.modal-content{background-color:#fefefe;margin:5% auto;border:2px solid #ff2828;border-radius:6px;width:80%}
.modal-header{background:#ff2828;border-radius:5px 5px 0 0;padding:10px;color:#fff;margin:0}
.modal-body{padding:25px}
.modal-footer{text-align:center;background:#f4f4f4;padding:15px;border-radius:0 0 5px 5px}
.close{color:#fff;float:right;font-size:28px;font-weight:bold}
.close:hover,.close:focus{color:black;text-decoration:none;cursor:pointer}
.menu {margin: 20px; padding: 16px 10px; background: #fff; color: #444; border: 1px solid #ff2828;}
.menu .title {text-align: center;}
@keyframes animatetop{from{top:-300px;opacity:0}to{top:0;opacity:1}}

Và quan trọng nhất đó là phần JS dùng để set cookie device:
    var modal = document.getElementById("selectDevice");
    var btn = document.getElementById("chooseLayoutBtn");
    var span = document.getElementsByClassName("close");
    btn.onclick = function() {
            modal.style.display = "block";
            modal.classList.add("active");
    }
    span.onclick = function() {
      modal.classList.remove("active");
      setTimeout(() => {
            modal.style.display = "none";
      }, 300);
    }
    window.onclick = function(event) {
      if (event.target == modal) {
            modal.classList.remove("active");
            setTimeout(() => {
            modal.style.display = "none";
      }, 300);
      }
    }
    function setDevice(device) {
      document.cookie = "devi=" + device + "; path=/; max-age=" + (60 * 60 * 24 * 30);
      alert("Bạn đã chọn giao diện: " + device);
      modal.classList.remove("active");
      setTimeout(() => {
            modal.style.display = "none";
      }, 300);
    }
Trang: [1]
Phiên bản đầy đủ: Hướng dẫn tạo nhiều giao diện cho SMM cho nhiều thiết bị