Điểm:-1

Chèn đoạn mã PHP vào nội dung

lá cờ in

Drupal 9 không có mô-đun Bộ lọc PHP trong lõi. Tôi cần chèn đoạn mã PHP vào trình chỉnh sửa nội dung (ví dụ: biến Twig).

Có cách nào để chèn đoạn mã PHP vào nội dung Drupal không?

lá cờ ru
Không, bạn không thể, đây sẽ là một vấn đề bảo mật * LỚN *. Thay vào đó, hãy sử dụng [Bộ lọc mã thông báo](https://www.drupal.org/project/token_filter), mô-đun này cho phép những nội dung như ``
Kevin avatar
lá cờ in
Làm điều này với mã thông báo. Đây là thực hành đặc biệt xấu.
Điểm:1
lá cờ us

Mô-đun Bộ lọc PHP đã bị xóa khỏi lõi Drupal vì sử dụng không đúng cách sẽ gây ra sự cố bảo mật. Các vấn đề bảo mật đã được giảm thiểu từ thực tế là chỉ những người dùng có sử dụng PHP để cài đặt quyền có thể sử dụng bộ lọc đầu vào, nhưng điều đó không làm sạch mã do người chỉnh sửa nhập. Nếu sau đó quyền được trao vô điều kiện cho mọi biên tập viên, thì có nghĩa là quyền đó không tồn tại.

Mô-đun lõi Drupal hiện có sẵn dưới dạng PHP mô-đun, nhưng tôi sẽ không sử dụng nó.

tôi thà làm gì Hudri đề xuất, và sử dụng Bộ lọc mã thông báo mô-đun. Với mô-đun đó và thêm bộ lọc đầu vào của nó vào định dạng đầu vào được sử dụng cho các nút, người dùng có thể nhập mã thông báo sẽ được thay thế bằng giá trị của nó. Thay vì các đoạn mã PHP, tôi sẽ triển khai các mã thông báo tùy chỉnh được thay thế bằng giá trị được trả về từ mã PHP được thực thi trong hook_tokens(), một trong những hook cần thiết cho các mô-đun muốn triển khai mã thông báo tùy chỉnh.

hàm mymodule_token_info() {
  $loại = [
    'tên' => t('Mã thông báo tùy chỉnh'),
    'description' => t('Mã thông báo tùy chỉnh để sử dụng trong trường thân nút.'),
  ];

  // Mã thông báo toàn cầu tùy chỉnh.
  $custom['custom01'] = [
    'tên' => t("Tùy chỉnh 01"),
  ];
  $custom['custom02'] = [
    'tên' => t("Tùy chỉnh 02"),
  ];

  trở lại [
    'các loại' => [
      'tùy chỉnh' => $type,
    ],
    'mã thông báo' => [
      'tùy chỉnh' => $ tùy chỉnh,
    ],
  ];
}

function mymodule_tokens($type, $tokens, mảng $data, mảng $options, BubbleableMetadata $bubbleable_metadata) {
  $replacements = [];
  nếu ($type == 'tùy chỉnh') {
    foreach ($tokens as $name => $ original) {
      nếu ($name == 'custom01') {
        $replacements[$ original] = // Đặt giá trị của mã thông báo custom01.
      }
      otherif ($name == 'custom02') {
        $replacements[$ original] = // Đặt giá trị của mã thông báo custom02.
      }
    }
  }
  trả lại $replacements;
}

hook_tokens() cũng có thể trả về đánh dấu HTML được sử dụng cho trường thân nút. $bubbleable_metadata có thể được sử dụng để thêm các phụ thuộc bộ đệm.

Phương pháp này an toàn hơn vì nó không cho phép người dùng nhập mã PHP tùy ý, mã này có thể thay đổi mật khẩu cho bất kỳ tài khoản người dùng nào, xóa tất cả nội dung trang hoặc gửi thông tin người dùng đến các trang bên ngoài.
Ngay cả khi chỉ những người dùng đáng tin cậy mới được phép sử dụng bộ lọc đầu vào PHP, vẫn luôn có khả năng mã đã nhập gây ra sự cố.

Alfred Armstrong avatar
lá cờ cn
Có, ngay cả khi bạn thực sự, thực sự tin tưởng những người dùng có quyền chèn PHP, trang web của bạn có thể bị hỏng hoàn toàn do lỗi cú pháp.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.