Điểm:0

Using dynamic templates in custom module

lá cờ ro

I have created a custom Drupal 9 module, and I would like for this module to use different template files basing on a variable. I have looked at hook_theme() and I think the pattern return value might be what I am looking for, but I can't seem to make it work.

testpage.module

function testpage_theme() {
  return array(
    'testpage' => array(
      'template' => 'testpage',
      'variables' => array('items' => array(), 'title' => NULL),
      'pattern' => 'testpage__'
    )
  );
}  

### Controller file (Testpage.php)

```php
namespace Drupal\testpage\Controller;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\HttpFoundation\Response;

class Testpage extends ControllerBase {

  public function Render($name) {
    $result = "Lorem ipsum";
    $build = array(
      '#theme' => array('testpage__'.$name, 'testpage'),
      '#items' => $result,
      '#title' => 'Testpage',
      '#cache' => [
        'max-age' => 0
      ]
    );

    return($build);
  }
}

I created three template files in a "templates" folder.

  • testpage.html.twig
  • testpage--test.html.twig
  • testpage--test2.html.twig

Basing on $name, it should use the matching template file. However, it is always just using the markup from the testpage.html.twig. When $name is equal to "test", it should use the testpage--test.html.twig file; when $name is equal to "test2", it should use the testpage--test2.html.twig file. And it would be great if it would use the testpage.html.twig file as a fallback if a matching template does not exist. I thought this was possible with the pattern return value, but I can't seem to get it to work correctly. Am I missing something, or is this not possible?

john Smith avatar
lá cờ gr
một điều bạn chắc chắn có thể làm là chuyển `$name` vào mẫu và trong mẫu sử dụng sth. như `{{ bao gồm('mẫu-' ~ tên ~ '.html.twig') }}`
neessen avatar
lá cờ ro
Vâng, tôi cũng đã nghĩ về giải pháp đó, nhưng điều đó sẽ yêu cầu tệp phải tồn tại. Tất nhiên, tôi có thể kiểm tra bộ điều khiển nếu tệp twig tồn tại và chuyển thông tin đó đến mảng kết xuất và sử dụng logic đó trong mẫu twig.
lá cờ ru
AFAIK `pattern` [không tồn tại nữa](https://www.drupal.org/project/drupal/issues/2063793) và chỉ là phần còn lại trong tài liệu. Thay vào đó, hãy sử dụng [hook_theme_suggetions_alter](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21theme.api.php/function/hook_theme_suggestions_alter/8.8.x)

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