Làm cách nào tôi có thể thêm thẻ script và nội dung không thoát ra vào trang?


7

Tôi muốn thêm vào các trang của mình dữ liệu có cấu trúc trong JSON-LD ( https://developers.google.com/search/docs/guides/intro-structured-data )

Về cơ bản, những gì tôi cần làm là thêm một nơi nào đó vào HTML, giả sử một trang cơ bản, một đoạn như sau:

<script type="application/ld+json">
{  "@context":"http://schema.org",
   "@type":"WebSite",
   "name":"Site name",
   "alternateName":"Site alternatime name",
   "description":"Site description",
   "keywords":"list of keyword",
   "inLanguage":"en",
   "url":"http://www.example.eu/en",
   "potentialAction":{
   "@type":"SearchAction",
   "target":"http://www.example.com/en/find/{search_term_string}",
   "query-input":"required name=search_term_string"
   }
}
</script>

Tôi đã cố gắng sử dụng đầu vào HTML đầy đủ nhưng đoạn mã được (loại) thoát với CDATA và google không thể phân tích cú pháp.

Vì vậy, làm cách nào tôi có thể cung cấp đoạn trích đó mà không thoát được?


Bạn có biết rằng Drupal 8 đi kèm với hỗ trợ RDFa (là một thay thế cho hỗ trợ JSON-LD) không? Xem ví dụ: rdfui
unor

1
Chào mừng đến với câu trả lời của Drupal! Bạn có câu hỏi cụ thể nào không mà bạn có gợi ý nào không? Trang web này không dành cho các đề xuất, nhưng để trả lời các câu hỏi được xác định rõ ràng với một câu trả lời dứt khoát.
kiamlaluno

Câu hỏi cụ thể của tôi là: Tôi cần thêm vào HTML của trang (giả sử trang cơ bản) đoạn trích được cung cấp ở trên. Tôi đã cố gắng sử dụng đầu vào HTML đầy đủ nhưng đoạn mã được (loại) thoát với CDATA và google không thể phân tích cú pháp. Vì vậy, làm cách nào tôi có thể cung cấp đoạn trích đó mà không thoát được?
dùng3535189

Tôi nghĩ rằng theo một cách nào đó RDFa là một cách cũ để cung cấp siêu dữ liệu ngữ nghĩa về một trang web và nó sẽ được thay thế bằng dữ liệu có cấu trúc JSON-LD. Bây giờ google đang thúc đẩy JSON-LD như bạn có thể thấy ở đây: developers.google.com/search/docs/guides/intro-structured-da‌ ta.
dùng3535189

1
Có một mô-đun hộp cát cho D8 JSON-LD (lõi D8) . Vì đó là một dự án hộp cát, không nên sử dụng nó trong sản xuất vì nó không được kiểm tra đúng cách. Nhưng bạn có thể xem nó và thử tại địa phương nếu nó hoạt động. Bạn có thể tải về mã mô-đun từ đây . Nếu bạn thích làm việc với nó, bạn cũng có thể yêu cầu chủ sở hữu mô-đun thêm bạn làm người bảo trì để bạn có thể tiếp tục làm việc và làm cho mô-đun hoàn chỉnh và ổn định.
Yogesh

Câu trả lời:


3

Đây là một cách đơn giản để làm điều này mà không cần mô-đun bổ sung. Vì lợi ích của ví dụ này, tôi sẽ thêm trường này vào Basic pageloại nội dung đi kèm với Standardhồ sơ cài đặt.

Đầu tiên, hãy tạo một định dạng Văn bản mới. Đi đến admin/config/content/formatsvà nhấp vào Add text format. Tôi đặt tên cho định dạng Văn bản JSON-LD và làm cho nó chỉ có sẵn cho Quản trị viên. Hãy chắc chắn để trống tất cả các tùy chọn và đặt Text editorthành None, như vậy:

Bước 1

Sau đó, hãy thêm một trường mới vào Basic pageloại nội dung. Đi đến admin/structure/types/manage/page/fields/add-fieldvà chọn Text (formatted, long). Tôi đặt tên trường JSON-LD bằng tên máy tự động là field_json_ld.

Bước 2

Sau đó, hãy chắc chắn rằng chúng tôi ẩn nhãn của trường. Tới admin/structure/types/manage/page/displayvà chắc chắn để thiết lập Label để mới của chúng tôi JSON-LD trường để - Hidden -, như vậy:

Bước 3

Bây giờ là lúc để thêm tập lệnh vào một trang mới. Đi đến node/add/pagevà điền vào Tiêu đề và Cơ thể như bạn muốn. Dưới đây là các bit quan trọng: cho JSON-LD textarea, hãy chắc chắn để thiết lập Text formatđể JSON-LD , như vậy:

Bước 4

Bây giờ bấm vào Save and publish. Nút của bạn sẽ trông như thế này:

Bước 5

Không có gì đặc biệt, phải không? Bây giờ hãy xem mã nguồn của chúng tôi:

Bước 6

Chơi lô tô!


Xin chào, tôi hơi khó hiểu ở đây, trước tiên hãy hiểu mục đích của kịch bản này là gì. Từ nội dung của nó và từ các từ JSON-LD, có vẻ như nó phải được phát hiện bởi các thuyền công cụ Tìm kiếm. Do đó, nó phải có mặt trong phần <head> </ head> của trang web. Xin hãy sửa tôi nếu tôi sai. Cảm ơn
CodeNext

@CodeNext: có, nó phải ở trong thẻ head. Nhưng tôi nhận thấy rằng Google đang đọc nó ngay cả khi nó được đặt trong cơ thể. Có cách nào để chèn một số HTML tùy chỉnh vào thẻ head không?
dùng3535189

@ user3535189 Nếu bạn cần cách thêm phần đó, vui lòng xem câu trả lời của tôi TẠI ĐÂY , tôi đã biên soạn tất cả các cách để thêm mã vào <head> </ head>, tôi hy vọng nó sẽ giúp ích.
CodeNext

@CodeNext cảm ơn bạn đã gợi ý, nó tốt cho một cái gì đó như thẻ meta cho toàn bộ trang web. Nhưng tôi đã tìm kiếm một cái gì đó thông minh hơn, ý tôi là, nếu tôi có 20 trang, mỗi trang sẽ có một đoạn "JSON-LD" khác nhau. Vì vậy, có lẽ tôi sẽ cần một trường văn bản như trường được giải thích bởi Wim, sau đó được đặt trong thẻ "head2 thay vì" body ".
user3535189

@ user3535189, Hhmmm, trong trường hợp đó đây là cách thích hợp. Vui lòng sau khi thử nghiệm trong trang web trực tiếp của bạn, hãy cho tôi biết, nếu google xác định theo cách này đoạn trích này. Tôi cần thưởng tiền thưởng cho câu trả lời này, nếu bạn chấp nhận làm câu trả lời. Thx
CodeNext

1

Định dạng Full HTML mặc định sử dụng CKEditor, thực hiện chức năng lọc văn bản của chính nó và có khả năng là nguyên nhân gây ra sự cố của bạn. Bạn có thể tắt Bộ lọc nội dung nâng cao của CKEditor, nhưng điều tôi muốn giới thiệu là tạo định dạng văn bản mới mà không lọc và không có trình soạn thảo văn bản. Sau đó, tạo trường văn bản dài mới cho loại nội dung của trang của bạn và đặt định dạng văn bản mới làm mặc định.

Bạn sẽ có thể dán bất kỳ tập lệnh nào bạn cần trong trường mới.


-2

Nếu bạn muốn thêm tập lệnh vào trình soạn thảo thì hãy sử dụng bộ lọc mã PHP thay vì html đầy đủ, (mô-đun PHP trong drupal 8) sau đó thêm đoạn mã của bạn. Nó sẽ hoạt động tốt. Hy vọng nó giải quyết vấn đề của bạn. Xem ảnh chụp màn hình đính kèm:

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


Đây có thể là một cách, nhưng tôi nghĩ rằng câu trả lời của Wim là tốt hơn.
dùng3535189

Có Chắc chắn, nhưng theo cách này, không cần thêm định dạng văn bản mới.
Karuna

-3

sử dụng :

<pre> <code> your codes here </code> </pre>.

đây là cách tất cả các trang web hiển thị bất kỳ loại mã nào trong HTML.

và cách này viết mã trong thẻ mã, tôi nghĩ rằng mã sẽ không thoát.


2
Xoay, nhưng bỏ lỡ :) OP không muốn hiển thị tập lệnh trong các thẻ trước, họ muốn chèn tập lệnh vào một trang bình thường mà không cần Drupal thực hiện lọc XSS trên đó
Clive
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.