Help Trợ giúp về giá trị custom thread field trong widget khi view thread

Alexandra

Corporal
Tham gia
17/10/2017
Bài viết
100
Được Like
55
- Em có custom thread field dạng select với id là province chứa các giá trị:
+---------+---------------------------+
id.................| value........................................|
+---------+---------------------------+
hanoi.........| Hà Nội.....................................|
+---------+---------------------------+
hcm............| TP Hồ Chí Minh...................|
+---------+---------------------------+
hph.............| Hải Phòng.............................|
+---------+---------------------------+
- Em tạo thread với lựa chọn thread field là Hà Nội
- Em tạo 1 widget HTML với mục đích, khi view thread:
+ nếu id thread field là hanoi thì hiển thị giá trị A trên widget,
+ nếu id thread field là hcm thì hiển thị giá trị B trên widget,
+ nếu id thread field là hph thì hiển thị giá trị C trên widget.
Code cho widget HTML template là
Mã:
<xf:if is="{$thread.custom_fields.province} == 'hanoi'">
____hiển thị giá trị A____
<xf:elseif is="{$thread.custom_fields.province} == 'hcm'>
____hiển thị giá trị B____
<xf:else />
____hiển thị giá trị C____
</xf:if>
Nhưng không hiển thị kết quả.
Mong các cao thủ trợ giúp em.
 
Sửa lần cuối:

HungTQ

Sergeant
Tham gia
01/03/2016
Bài viết
428
Được Like
308
 

Win

MasterCorporal
Tham gia
15/02/2016
Bài viết
378
Được Like
171
Mã:
<xf:foreach loop="$thread.custom_fields" key="$fieldId" value="$fieldDefinition">
    <xf:if is="{$fieldId} == 'abcxyz'"> Nếu đúng </xf:if>
</xf:foreach>
Code trước dùng kiểu này, k nhớ có dạng gọi thẳng ngắn hơn không ?
Bác cứ dùng {{dump(var}} để biết biến đó có gì + hàm gì!
 

dcstylexf

Major
Tham gia
24/03/2015
Bài viết
2,005
Được Like
1,616
Mã:
<xf:foreach loop="$thread.custom_fields" key="$fieldId" value="$fieldDefinition">
    <xf:if is="{$fieldId} == 'abcxyz'"> Nếu đúng </xf:if>
</xf:foreach>
Code trước dùng kiểu này, k nhớ có dạng gọi thẳng ngắn hơn không ?
Bác cứ dùng {{dump(var}} để biết biến đó có gì + hàm gì!
Dùng code này cho ngắn gọn

PHP:
{$thread.custom_fields.getFormattedValue('field_id')}

VD: Field ID là hanoi sẽ hiển thị luôn giá trị Hà Nội
 

Win

MasterCorporal
Tham gia
15/02/2016
Bài viết
378
Được Like
171
bạn đọc kỹ chưa mà bảo k phải. đây là addon vị trí khi bạn click vào 1 thành phố sẽ ra quận tương ứng https://www.otosaigon.com/xe-cu/ click vào Tìm kiếm nâng cao
Chắc ý bác đó muốn sửa nhanh template syntax không chỉ áp dụng mỗi vị trí mà có thể là màu sắc khối lượng v..v
Góp ý tý site 1m TF của bác là cái link sau khi search: https://www.otosaigon.com/xe-cu/?thread_fields[city]=hanoi nên rewrite lại https://www.otosaigon.com/xe-cu/hanoi có thể để tự index hay thêm vào site map sẽ mạnh về seo ah.
Ah làm xong cho mình xin đoạn rewrite htacc hay nginx nha :D
 

dcstylexf

Major
Tham gia
24/03/2015
Bài viết
2,005
Được Like
1,616
Chắc ý bác đó muốn sửa nhanh template syntax không chỉ áp dụng mỗi vị trí mà có thể là màu sắc khối lượng v..v
Góp ý tý site 1m TF của bác là cái link sau khi search: https://www.otosaigon.com/xe-cu/?thread_fields[city]=hanoi nên rewrite lại https://www.otosaigon.com/xe-cu/hanoi có thể để tự index hay thêm vào site map sẽ mạnh về seo ah.
Ah làm xong cho mình xin đoạn rewrite htacc hay nginx nha :D
Cái phần sau là bác ấy code riêng lọc các params trên url để hiển thị kết quả.
Nếu sửa lại như trên thì sẽ không thể lấy nhiều fields được. Để cho dễ hiểu thì url gốc khi lọc nhiều fields mình đoán sẽ gần giống ntn

Mã:
https://www.otosaigon.com/xe-cu/?thread_fields[city]=hanoi&[field2]=abc&[field3]=xyz
 

Win

MasterCorporal
Tham gia
15/02/2016
Bài viết
378
Được Like
171
Cái phần sau là bác ấy code riêng lọc các params trên url để hiển thị kết quả.
Nếu sửa lại như trên thì sẽ không thể lấy nhiều fields được. Để cho dễ hiểu thì url gốc khi lọc nhiều fields mình đoán sẽ gần giống ntn

Mã:
https://www.otosaigon.com/xe-cu/?thread_fields[city]=hanoi&[field2]=abc&[field3]=xyz

Từ addons kia khi lọc sẽ sinh ra url dạng: ?thread_fields[job_type]=job_bat_dong_san&thread_fields[location]=loc_tpqn&thread_fields[type]=full_time
Thì dùng regex để tách ra và rewrite lại được: /job_type-job_bat_dong_san-location-loc_tpqn-type -full_time
Để đẹp với tiện SEO thì khi đặt tên fields cũng như với 1 query search là:

Mã:
/viec-lam-bat-dong-san

/viec-lam-bat-dong-san-tai-da-nang

/viec-lam-bat-dong-san-tai-da-nang-thoi-gian-toan-thoi-gian

Nếu cần dự án thực tế thì có thể thử xem link canonical có đổi không và cần tùy biến lại tiêu đề trang forum_view không?

(thread_fields(\[(.*?)\]=(.*?)(\&|$)))

1593851185019.png
 

Alexandra

Corporal
Tham gia
17/10/2017
Bài viết
100
Được Like
55
Dùng code này cho ngắn gọn

PHP:
{$thread.custom_fields.getFormattedValue('field_id')}

VD: Field ID là hanoi sẽ hiển thị luôn giá trị Hà Nội
Nếu đưa ra forum list thì code này okay bác ạ, nhưng để dùng trong widget thì lại không được.
 
Sửa lần cuối:

Alexandra

Corporal
Tham gia
17/10/2017
Bài viết
100
Được Like
55
bạn đọc kỹ chưa mà bảo k phải. đây là addon vị trí khi bạn click vào 1 thành phố sẽ ra quận tương ứng https://www.otosaigon.com/xe-cu/ click vào Tìm kiếm nâng cao
Em còn làm được nhiều hơn thế rồi bác, site của em còn filter đến quận huyện, phường xã và đến cả đường phố (4 mức chứ không phải 2 mức như trang web bác dẫn chứng).
Tuy nhiên cái em cần tìm là làm sao để đưa giá trị province ra widget (em nhấn mạnh là ra widget), để em đặt link tĩnh tốt cho SEO website.
Cụ thể, nếu khách click vào thread ở khu vực Hà Nội thì widget sẽ hiện lên gợi ý tất cả các phường của Hà Nội, và ở tên phường đó sẽ đặt link tĩnh sử dụng tag.
Em đã tìm được cách đưa custom user fields ra widget sử dụng code: {{ $xf.visitor.profile..... }} nhưng của custom thread fields thì em bị mắc kẹt.
 
Sửa lần cuối:

Win

MasterCorporal
Tham gia
15/02/2016
Bài viết
378
Được Like
171
Em còn làm được nhiều hơn thế rồi bác, site của em còn filter đến quận huyện, phường xã và đến cả đường phố (4 mức chứ không phải 2 mức như trang web bác dẫn chứng).
Tuy nhiên cái em cần tìm là làm sao để đưa giá trị province ra widget (em nhấn mạnh là ra widget), để em đặt link tĩnh tốt cho SEO website.
Cụ thể, nếu khách click vào thread ở khu vực Hà Nội thì widget sẽ hiện lên gợi ý tất cả các phường của Hà Nội, và ở tên phường đó sẽ đặt link tĩnh sử dụng tag.
Em đã tìm được cách đưa custom user fields ra widget sử dụng code: {{ $xf.visitor.profile..... }} nhưng của custom thread fields thì em bị mắc kẹt.
Thế bác dùng cái của mình như trên để custom cho từng fields.
 

dcstylexf

Major
Tham gia
24/03/2015
Bài viết
2,005
Được Like
1,616
Từ addons kia khi lọc sẽ sinh ra url dạng: ?thread_fields[job_type]=job_bat_dong_san&thread_fields[location]=loc_tpqn&thread_fields[type]=full_time
Thì dùng regex để tách ra và rewrite lại được: /job_type-job_bat_dong_san-location-loc_tpqn-type -full_time
Để đẹp với tiện SEO thì khi đặt tên fields cũng như với 1 query search là:

Mã:
/viec-lam-bat-dong-san

/viec-lam-bat-dong-san-tai-da-nang

/viec-lam-bat-dong-san-tai-da-nang-thoi-gian-toan-thoi-gian

Nếu cần dự án thực tế thì có thể thử xem link canonical có đổi không và cần tùy biến lại tiêu đề trang forum_view không?

(thread_fields(\[(.*?)\]=(.*?)(\&|$)))

View attachment 37334
Thanks bác. Em cũng chưa nghĩ đến làm kiểu này
 
  • Like
Reactions: Win

dcstylexf

Major
Tham gia
24/03/2015
Bài viết
2,005
Được Like
1,616
Em còn làm được nhiều hơn thế rồi bác, site của em còn filter đến quận huyện, phường xã và đến cả đường phố (4 mức chứ không phải 2 mức như trang web bác dẫn chứng).
Tuy nhiên cái em cần tìm là làm sao để đưa giá trị province ra widget (em nhấn mạnh là ra widget), để em đặt link tĩnh tốt cho SEO website.
Cụ thể, nếu khách click vào thread ở khu vực Hà Nội thì widget sẽ hiện lên gợi ý tất cả các phường của Hà Nội, và ở tên phường đó sẽ đặt link tĩnh sử dụng tag.
Em đã tìm được cách đưa custom user fields ra widget sử dụng code: {{ $xf.visitor.profile..... }} nhưng của custom thread fields thì em bị mắc kẹt.
Code widget bạn có biến $thread ở trong template không ? Nếu ở template sử dụng được biến $thread thì sẽ dùng được code của mình đưa.
 

Alexandra

Corporal
Tham gia
17/10/2017
Bài viết
100
Được Like
55
Code widget bạn có biến $thread ở trong template không ? Nếu ở template sử dụng được biến $thread thì sẽ dùng được code của mình đưa.
Nó không nhận biến $thread bác ạ.
Em test thì code này nhận được giá trị field 'location' trong user fields:
$xf.visitor.Profile.custom_fields.location
Nhưng với custom thread fields thì không có cách nào lấy ra được.
Em tạo widget HTML trong ACP - Appearance - Widgets ạ
 

Win

MasterCorporal
Tham gia
15/02/2016
Bài viết
378
Được Like
171
Nó không nhận biến $thread bác ạ.
Em test thì code này nhận được giá trị field 'location' trong user fields:
$xf.visitor.Profile.custom_fields.location
Nhưng với custom thread fields thì không có cách nào lấy ra được.
Em tạo widget HTML trong ACP - Appearance - Widgets ạ
Tối ưu nhất là code 1 template và chèn thread_view ở vị trí muốn chèn.

Chứ widget HTML trong ACP - Appearance - Widgets không nhận thread đâu.
Phải sử dụng: {{ dump($context.thread) }}
Hiển thị giá trị field: {{$context.thread.custom_fields.getFormattedValue('xxx')}}

1593876632435.png
 
Sửa lần cuối:

Alexandra

Corporal
Tham gia
17/10/2017
Bài viết
100
Được Like
55
Code trên bác chèn vào thread_view ở vị trí muốn chèn. Còn Xenforo_Tempate ( nếu bác có cái này trong chỗ widget nó sẽ hiện) Còn k tạo 1 mod + chèn widget = widget_key.
Code trên bác chèn vào thread_view ở vị trí muốn chèn. --> Cái này em đã làm được ạ
Còn Xenforo_Tempate ( nếu bác có cái này trong chỗ widget nó sẽ hiện) Còn k tạo 1 mod + chèn widget = widget_key. --> Em tự tạo 1 widget có key là location_key, trong đó em tìm cách lấy giá trị của custom thread fileds 'location' để đặt điều kiện:
Nếu location bằng hanoi thì hiển thị kết quả A
Nếu location bằng hcm thì hiển thị kết quả B
Nếu location bằng hph thì hiển thị kết quả C
Nhưng không lấy được giá trị của custom thread fields ấy ạ!
 

Win

MasterCorporal
Tham gia
15/02/2016
Bài viết
378
Được Like
171
Code trên bác chèn vào thread_view ở vị trí muốn chèn. --> Cái này em đã làm được ạ
Còn Xenforo_Tempate ( nếu bác có cái này trong chỗ widget nó sẽ hiện) Còn k tạo 1 mod + chèn widget = widget_key. --> Em tự tạo 1 widget có key là location_key, trong đó em tìm cách lấy giá trị của custom thread fileds 'location' để đặt điều kiện:
Nếu location bằng hanoi thì hiển thị kết quả A
Nếu location bằng hcm thì hiển thị kết quả B
Nếu location bằng hph thì hiển thị kết quả C
Nhưng không lấy được giá trị của custom thread fields ấy ạ!
Bạn xem lại bình luận trên nha. Mình test ok trên xf 2.1 không sử dụng thêm wiget ngoài.
 

Alexandra

Corporal
Tham gia
17/10/2017
Bài viết
100
Được Like
55
Bạn xem lại bình luận trên nha. Mình test ok trên xf 2.1 không sử dụng thêm wiget ngoài.
Đây, em viết như thế này mà nó không hiện lên cái gì cả. :(

PS: Em dùng {{ dump($context.thread) }} thì nó báo **** bác ạ!
xf 2.1.8 patch 2
 

Đính kèm

  • province.jpg
    province.jpg
    51.9 KB · Lượt xem: 46
Sửa lần cuối:

Top Bottom