Quên mật khẩu
 Đăng ký
Xem: 77|Trả lời: 0

Custom - BBCode sử dụng Regex cho SMM

[Lấy địa chỉ]

36

Chủ đề

7

Bài viết

172

Điểm

Administrator

Điểm
172
Đăng lúc 2024-9-6 19:28:17 | Xem tất |Chế độ đọc
Trước đây, khi xử lý bbcode với twig, mình có tham khảo code của @mrducz95, nhưng mình thấy tốc độ truy vấn của nó tốn khả nhiều thời gian, nhất là khi mình đưa nó qua một hàm custom description để lấy mô tả bài viết, thời gian tải trang RẤT LÂU. Nhận thức được vấn đề đó, mình và @Dai đã vận dụng và sử dụng Regex thay cho code cũ. Và tụi mình cũng có tham khảo cách xử lý hình ảnh danh sách smile của @tiaxgame, và thấy bó cũng rất dài dòng, nên tụi mình cũng đã thay thế chúng bằng cách sử dụng Regex để ràng buộc.


> SAU ĐÂY LÀ CODE


Tạo file _bbcode

  1. {% macro bb_img(nd) %}
  2. {% set pattern = '/\\[img\\](.*?)\\[\\/img\\]/' %}
  3. {% set loaderror = "https://i.imgur.com/806SpRu.png" %}
  4. {% set replacement = '<a href="$1" class="swipebox"><img loading="lazy" class="bb_img LoadImage" src="$1" border="2" onerror="this.onerror=null;this.src='~loaderror~'"/></a>' %}
  5. {{ nd|preg_replace(pattern, replacement)|replace({'https://i.imgur.com/': 'https://hwz.pages.dev/'})|raw }}
  6. {% endmacro %}
  7. {#================================================#}
  8. {% macro bb_url(nd) %}
  9. {% set pattern = '/\\[url=(.+?)\\](.*?)\\[\\/url\\]/' %}
  10. {% set replacement = "<i class='fa fa-link fa-spin'></i><a rel='nofollow' href='$1'>$2</a>" %}
  11. {{ nd|preg_replace(pattern, replacement)|raw }}
  12. {% endmacro %}
  13. {#================================================#}
  14. {% macro bb_vid(nd) %}
  15. {% set pattern = '/\\[vid\\](.*?)\\[\\/vid\\]/' %}
  16. {% set replacement = '<div class="video-wrapper" style="text-align: center;"><iframe loading="lazy" src="/video-embed?link=$1" height="315" width="560" scrolling="no" allowfullscreen="" frameborder="0"></iframe></div>' %}
  17. {{ nd|preg_replace(pattern, replacement)|raw }}
  18. {% endmacro %}
  19. {#================================================#}
  20. {% macro bb_simple(nd) %}
  21. {# định dạng văn bản #}
  22. {% set pattern = '/\\[(b|i|u|s|h1|h2|h3|h4|h5|h6|strong|em)\\](.*?)\\[\\/\\1\\]/' %}
  23. {% set replacement = '<$1>$2</$1>' %}
  24. {{ nd|preg_replace(pattern, replacement)|raw }}
  25. {% endmacro %}

  26. {% macro bb_align(nd) %}
  27. {# căn lề #}
  28. {% set pattern_align = '/\\[(center|left|right)\\](.*?)\\[\\/\\1\\]/' %}
  29. {% set replacement_align = '<div style="text-align:$1;">$2</div>' %}
  30. {{ nd|preg_replace(pattern_align, replacement_align)|raw }}
  31. {% endmacro %}

  32. {% macro bb_color1(nd) %}
  33. {# văn bản màu #}
  34. {% set pattern_color = '/\\[(red|blue|purple|green|orange|darkorange)\\](.*?)\\[\\/\\1\\]/' %}
  35. {% set replacement_color = '<span style="color:$1;">$2</span>' %}
  36. {{ nd|preg_replace(pattern_color, replacement_color)|raw }}
  37. {% endmacro %}

  38. {% macro bb_color2(nd) %}
  39. {% set pattern_color = '/\\[color=(.+?)\\](.*?)\\[\\/color\\]/' %}
  40. {% set replacement_color = '<span style="color:$1;">$2</span>' %}
  41. {{ nd|preg_replace(pattern_color, replacement_color)|raw }}
  42. {% endmacro %}

  43. {% macro bb_color3(nd) %}
  44. {% set pattern_color = '/\\[bcolor=(.+?)\\](.*?)\\[\\/bcolor\\]/' %}
  45. {% set replacement_color = '<span style="color:$1;font-weight:700">$2</span>' %}
  46. {{ nd|preg_replace(pattern_color, replacement_color)|raw }}
  47. {% endmacro %}

  48. {% macro bb_d(nd) %}
  49. {# tải xuống #}
  50. {% set pattern_d = '/\\[d\\](.*?)\\[\\/d\\]/' %}
  51. {% set replacement_d = '<center><a href="$1"><button class="btn btn-primary"><i class="fa fa-download"></i> Download</button></a></center>' %}
  52. {{ nd|preg_replace(pattern_d, replacement_d)|raw }}
  53. {% endmacro %}
  54. {#================================================#}
  55. {% macro smile(string) %}
  56. {% set arr_emo_name = ["ami", "anya", "aru", "aka", "dauhanh", "dora", "le", "menhera", "moew", "nam", "pepe", "qoobee", "qoopepe", "thobaymau", "troll", "dui", "firefox", "conan"] %}
  57. {% for emo_name in arr_emo_name %}
  58. {% if ":"~emo_name in string %}
  59. {% set pattern = '/[:]'~emo_name~'(\\d+)[:]/' %}
  60. {% set replacement = '<img loading="lazy" src="https://dorew-site.github.io/assets/smileys/'~emo_name~'/'~emo_name~'$1.png" alt="$1"/>' %}
  61. {% set string = string|preg_replace(pattern, replacement) %}
  62. {% endif %}
  63. {% endfor %}
  64. {{string|raw}}
  65. {% endmacro %}
  66. {#=======================================================================#}
  67. {% macro bbcode(nd) %}
  68. {% set nd = system_bb_code(nd) %}
  69. {% set nd = cancel_xss(nd) %}
  70. {% set nd = nd|nl2br %}
  71. {% set nd = _self.bb_img(nd) %}
  72. {% set nd = _self.bb_vid(nd) %}
  73. {% set nd = _self.bb_simple(nd) %}
  74. {% set nd = _self.bb_align(nd) %}
  75. {% set nd = _self.bb_color1(nd) %}
  76. {% set nd = _self.bb_color2(nd) %}
  77. {% set nd = _self.bb_color3(nd) %}
  78. {% set nd = _self.bb_d(nd) %}
  79. {% set nd = nd|replace({'<[>': '[','<:>': ':','<@>':'@','<=>':'=','[br]':'<br/>','<enter>' :'<br/>',' ,':','}) %}
  80. {% set nd = _self.bb_url(nd) %}
  81. {{_self.smile(html_decode(nd))|raw}}
  82. {% endmacro %}
Sao chép mã


Tạo file video-embed ngang hàng root/index

  1. {% macro checkExtension(one) %}
  2. {% if one|split('.')|last == 'jpg' or  one|split('.')|last == 'png' or one|split('.')|last == 'webp' or one|split('.')|last == 'psd' or one|split('.')|last == 'heic' %}file-image-o{% elseif one|split('.')|last == 'mp4' or  one|split('.')|last == 'mkv' or one|split('.')|last == 'webm' or one|split('.')|last == 'flv' or one|split('.')|last == '3gp' %}file-video-o{% elseif one|split('.')|last == 'mp3' or  one|split('.')|last == 'mkv' or one|split('.')|last == 'm4a' or one|split('.')|last == 'flac' or one|split('.')|last == 'wav' %}file-audio-o{% elseif one|split('.')|last == 'docx' or  one|split('.')|last == 'doc' or one|split('.')|last == 'txt' or one|split('.')|last == 'md' or one|split('.')|last == 'odt' %}file-text-o{% elseif one|split('.')|last == 'txt' or one|split('.')|last == 'md' %}file-text-o{% elseif one|split('.')|last == 'docx' or one|split('.')|last == 'doc' or one|split('.')|last == 'odt' %}file-word-o{% elseif one|split('.')|last == 'xls' or one|split('.')|last == 'xlsx' %}file-excel-o{% elseif one|split('.')|last == 'ppt' or one|split('.')|last == 'pptx' %}file-powerpoint-o{% elseif one|split('.')|last == 'pdf' %}file-pdf-o{% elseif one|split('.')|last == 'zip' or one|split('.')|last == 'rar' or one|split('.')|last == '7z' or one|split('.')|last == 'tar' %}file-archive-o{% elseif one|split('.')|last == 'cpp' or one|split('.')|last == 'cs' or one|split('.')|last == 'php' or one|split('.')|last == 'html' or one|split('.')|last == 'js' or one|split('.')|last == 'py' %}file-code-o{% elseif one|split('.')|last == 'sql' %}database{% else %}file-o{% endif %}
  3. {% endmacro %}

  4. {% set fullurl0 = api.r.get['link'] %}

  5. <style>body{margin:0}</style>

  6. {% if 'youtube' in fullurl0|lower or 'youtu.be/' in fullurl0|lower %}

  7. {% set vidUrl = get_youtube_id(fullurl0) %}
  8. <iframe id="ytplayer" type="text/html"allowfullscreen="" width="100%" height="100%" src="https://youtube.076.ne.jp/embed/{{ vidUrl }}" frameborder="0"></iframe>

  9. {% elseif _self.checkExtension(fullurl0) == 'file-audio-o' or _self.checkExtension(fullurl0) == 'file-video-o' %}

  10. <div id="dplayer"></div>
  11. <script src="https://cdn.statically.io/gh/kn007/DPlayer-Lite/00dab19fc8021bdb072034c0415184a638a3e3b2/dist/DPlayer.min.js"></script>
  12. <script>
  13. const dp = new DPlayer({
  14. container: document.getElementById('dplayer'),
  15. video: {
  16. url: '{{fullurl0}}',
  17. },
  18. });
  19. </script>

  20. {% else %}

  21. <div id="place"></div>
  22. <script>
  23. fetch("https://noembed.com/embed?url={{fullurl0}}")
  24. .then(x => x.json())
  25. .then(y => {
  26. document.getElementById("place").innerHTML = y.html;
  27. console.log(y.html)
  28. }
  29. );
  30. </script>

  31. {% endif %}
Sao chép mã


Cách sử dụng:
  1. {% from '_bbcode' import bbcode %}
  2. {{bbcode('nội dung')}}
Sao chép mã


Ngoài ra, các bạn có thể sử dụng danh sách smile có trong đoạn code trên bằng cách repo hoặc dùng link trực tiếp từ github:* https://github.com/dorew-site/do ... main/assets/smileys
Bạn phải đăng nhập mới được đăng bài Đăng nhập | Đăng ký

Quy tắc điểm

Lưu trữ|Danh sách ban|Diễn đàn Sắc màu

GMT+7, 2024-11-21 16:02 , Processed in 0.055176 second(s), 29 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

Trả lời nhanh Lên trên Trở lại danh sách