Chuẩn template mới - LayoutHub Editor V4
Tiêu chuẩn và cú pháp mới cho việc xây dựng layout.

Sử dụng cấu trúc template của Vuejs

Từ phiên bản 4.0 LayoutHub Editor chuyển sang sử dụng bộ render của Vuejs 3.x. Điều đó đồng nghĩa các nhà phát triển layout có thể sử dụng hầu hết các cú pháp của Vuejs 3.x để xây dựng và phát triển các layout cho nền tảng LayoutHub. Ngoại trừ một số hạn chế về đăng ký và thực thi event trong template:
1
// LayoutHub Editor không hỗ trợ
2
<div @click="method">...</div>
Copied!
Chúng tôi không hỗ trợ đăng ký events trong template để đảm bảo chuẩn đầu ra tương thích với Shopify và các dữ liệu cũ của người dùng vẫn có thể hoạt động được.
Tất cả kịch bản javascript để thực thi cho layout cần viết thông qua phương thức @javascript hoặc trong file /script.js.
Dưới đây chúng tôi đề xuất một số các cú pháp chuẩn được dùng phần lớn trong quá trình xây dựng layout:
section.lh (Điều kiện)
1
<template>
2
<div v-if=" settings.layout == 'flat' " class="flat">
3
...
4
</div>
5
<div v-else-if=" settings.layout == 'column' " class="colum">
6
...
7
</div>
8
</template>
Copied!
section.lh (Vòng lặp)
1
<template>
2
<div class="items">
3
<div v-for="(item, index) in settings.items" :key="index">
4
...
5
</div>
6
</div>
7
</template>
Copied!
section.lh (In dữ liệu ra)
1
<template>
2
<div class="item">
3
4
// 1. In dữ liệu escaped mã HTML
5
<span v-text="settings.name"></span>
6
7
// 2. In dữ liệu HTML nguyên bản
8
<span v-html="settings.name"></span>
9
10
// 3. In dữ liệu hỗ trợ đa ngôn ngữ
11
<span v-text="lang(settings.name)"></span>
12
<span v-html="lang(settings.name)"></span>
13
14
</div>
15
</template>
Copied!
section.lh (Attribute động)
1
<template>
2
<div class="item">
3
4
// Chỉ có 1 attribute động
5
<img :src="settings.img" />
6
7
// Nhiều attributes động phải dùng v-bind
8
9
// Ưu tiên dùng computed khi không có payload
10
<img v-bind="img_attributes_computed" />
11
12
// Chỉ dùng methods đối với trường hợp cần truyền payload
13
<div v-for="(img, i) in settings.images" :key="i">
14
<img v-bind="img_attributes_method(img)" />
15
</div>
16
17
</div>
18
</template>
19
20
<script>
21
export default {
22
computed: {
23
img_attributes_computed() {
24
return {
25
src: this.settings.img.src,
26
alt: this.settings.img.alt ? this.settings.img.alt : 'Untiled',
27
class: 'featured-image '+this.settings.img.classes
28
}
29
}
30
},
31
methods: {
32
img_attributes_method( payload ) {
33
return {
34
src: payload.src,
35
alt: payload.alt ? payload.alt : 'Untiled',
36
class: 'featured-image '+payload.classes
37
}
38
}
39
}
40
}
41
</script>
Copied!
section.lh (Sử dụng liquid)
1
<template>
2
// In kết quả dạng html của code liquid đã được server xử lý
3
<div v-html="liquid('product-title')"></div>
4
5
// Sử dụng component Liquid để gọi code liquid (Đối với những code liquid không cần in gì ra)
6
<Liquid name="product-form" />
7
</template>
8
Copied!
/section.lh
/components/MyCom.lh
Gọi component và truyền giá trị tương tự Vuejs
1
<template>
2
<div class="my-section">
3
...
4
<MyCom static_prop="Hello" :dynamic_prop="your_data" />
5
...
6
</div>
7
</template>
Copied!
Tên component là tên các file *.lh bên trong thư mục /components/
1
<template>
2
<div class="my-component">
3
{{prop_one}}
4
</div>
5
</template>
6
7
<script>
8
export default {
9
props: ['static_prop', 'dynamic_prop']
10
}
11
</script>
Copied!
/section.lh
Đăng ký javascript cho section và components
1
<template>
2
<div class="my-section">
3
<a href="#">Click on me</a>
4
</div>
5
</template>
6
7
// Đây là kịch bản javascript được dùng để chạy khi export ra môi trường thực
8
// Khuyến khích viết các mã javascript cho layout ở file /script.js
9
// Hoặc viết trong cặp thẻ @javascipt ... @endjavascript của các component
10
11
@javascript
12
// Biến this đại diện cho root element <div class="my-section">
13
$(this).find('a').on('click', () => { ... });
14
@endjavascript
Copied!
Last modified 5mo ago
Copy link