Điểm:0

Chỉ định chủ đề khi tạo nội dung/nhập nội dung qua Nguồn cấp dữ liệu

lá cờ cn

Tôi muốn buộc tất cả nội dung được tạo bằng chủ đề trang web chính của mình. Tôi muốn làm điều này bởi vì tôi đang sử dụng một trình kết xuất trong MYMODULE_node_presave() như thế này:

chức năng MYMODULE_node_presave(NodeInterface $node) {
  $renderer = \Drupal::service('renderer');

  $content_type = $node->getType();
  if ($content_type == 'trang') {
    $viewmode_render = $node->get('field_text_main_to_render')
      ->view('rendered_output');
    $processed_display = $renderer->renderPlain($viewmode_render);
    $node->set('field_text_main_display', "$processed_display");
    $node->field_text_main_display->format = 'đã xử lý';
}

Trang web của tôi sử dụng Bartik làm chủ đề chính và Seven làm chủ đề quản trị.

Trong Cài đặt giao diện (/admin/xuất hiện), tôi đã kiểm tra tùy chọn Sử dụng chủ đề quản trị khi chỉnh sửa hoặc tạo nội dung. Điều này đảm bảo rằng các nút được hiển thị trong Bartik khi tạo trong giao diện người dùng.

Tuy nhiên, khi tôi lưu lại các nút trên /admin/nội dung, các nút được lưu lại bằng Seven, thay vì Bartik. Vì vậy, tôi đã thêm một chủ đềĐàm phán:

/**
 * Chọn chủ đề chính xác cho các tuyến đường khác nhau.
 */
class ThemeNegotiator thực hiện ThemeNegotiatorInterface {

  /**
   * {@inheritDoc}
   */
  áp dụng chức năng chung(RouteMatchInterface $route_match) {
    trả về $this->negotiateRoute($route_match) ? ĐÚNG SAI;
  }

  /**
   * {@inheritDoc}
   */
  hàm công khai xác địnhActiveTheme(RouteMatchInterface $route_match) {
    trả về $this->negotiateRoute($route_match) ?: NULL;
  }

  /**
   * Chọn chủ đề cho trường hợp đặc biệt.
   *
   * @param \Drupal\Core\Routing\RouteMatchInterface $route_match
   * Tuyến đường phù hợp hiện tại.
   *
   * @return bool|chuỗi
   * Tên chủ đề để sử dụng (chuỗi) hoặc sai (bool).
   */
  chức năng riêng đàm phánRoute(RouteMatchInterface $route_match) {
    $route_name = $route_match->getRouteName();
    // Trang nội dung quản trị phải sử dụng chủ đề kết xuất nút.
    // Tại sao: Hành động "Lưu nội dung" sẽ sử dụng chủ đề của trang này.
    if ($route_name === 'system.admin_content') {
      trả về 'bartik';
    }
    khác {
      trả về SAI;
    }
  }

}

Bây giờ, khi tôi chạy lưu nút hàng loạt trên /admin/nội dung, các nút được hiển thị chính xác với Bartik.

Tiếp theo, tôi đã cài đặt nguồn cấp dữ liệu mô-đun. Bây giờ, khi tôi nhập các nút qua CSV bằng Nguồn cấp dữ liệu, chúng được hiển thị bằng Seven chứ không phải Bartik. Tôi muốn buộc các nút này cũng được hiển thị bằng Bartik, nhưng tôi không biết cách thực hiện. (Ví dụ, nếu có một cách để sử dụng đàm phánLộ trình bên trong chủ đềĐàm phán, điều đó sẽ ổn, nhưng tôi không biết cách thiết lập.) Bạn có ý kiến ​​gì không?

4uk4 avatar
lá cờ cn
Tôi sẽ sử dụng trình đàm phán chủ đề trong yêu cầu phụ, trong đó trình điều khiển trả về phản hồi với nút được hiển thị. Xem đây là ví dụ về cách tạo yêu cầu phụ và cả cách tránh lỗi cốt lõi: https://drupal.stackexchange.com/questions/303396/making-an-http-subrequest-causes-currentroutematch-to-have- sai-lộ trình
Điểm:0
lá cờ de

Nội dung có thể được hiển thị trong bất kỳ chủ đề nào và được hiển thị trong chủ đề hiện tại vào bất kỳ thời điểm nào. Bạn không lưu nội dung thuộc về một chủ đề. Thay vào đó, nếu bạn muốn các chủ đề khác nhau hiển thị nội dung, bạn có thể thử Mô-đun chủ đề trang chuyển đổi.

lá cờ cn
msgstr "Bạn không lưu nội dung thuộc về một chủ đề." Vâng, nói chung đây là trường hợp. Nhưng như đã nêu trong câu hỏi của tôi, tôi đang sử dụng `hook_node_presave()` để hiển thị một số trường và lưu kết quả được hiển thị, lưu nội dung thuộc về một chủ đề cụ thể. Vì vậy, tôi cần kiểm soát chủ đề nào được sử dụng để hiển thị nội dung cho lưu nội dung cụ thể này.
Jaypan avatar
lá cờ de
Các yếu tố đó sẽ được hiển thị trong chủ đề hiện tại tại thời điểm kết xuất. Trong trường hợp của bạn, đó có thể là trên đường dẫn mà quá trình nhập diễn ra, vì vậy bạn có thể sử dụng mô-đun ở trên để đặt chủ đề cho đường dẫn nguồn cấp dữ liệu. Điều đó nói rằng, có vẻ như không phải là một thiết kế kiến ​​trúc tuyệt vời để lưu trữ HTML đã kết xuất - điều gì sẽ xảy ra nếu bạn muốn thay đổi chủ đề của mình trong tương lai hoặc tìm kiếm trên trường đó. Thông thường, bạn sẽ muốn lưu trữ dữ liệu và kết xuất trên đầu ra, lưu vào bộ đệm đầu ra được kết xuất nếu đó là bản dựng tốn kém. Cá nhân tôi sẽ xem xét việc tái cấu trúc kiến ​​trúc thay vì thao túng chủ đề.

Đă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.