Score:0

Using dynamic templates in custom module

ธง 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
gr flag
สิ่งหนึ่งที่คุณสามารถทำได้อย่างแน่นอนคือส่ง `$name` ไปยังเทมเพลตและใช้ sth ในเทมเพลต เช่น `{{ รวม('เทมเพลต-' ~ ชื่อ ~ '.html.twig') }}`
neessen avatar
ro flag
ใช่คิดเกี่ยวกับวิธีแก้ปัญหานั้นด้วย แต่นั่นจะต้องมีไฟล์อยู่ แน่นอนฉันสามารถตรวจสอบคอนโทรลเลอร์ว่ามีไฟล์ twig อยู่หรือไม่ และส่งข้อมูลนั้นไปยังอาร์เรย์เรนเดอร์ และใช้ตรรกะนั้นในเทมเพลต twig
ru flag
AFAIK `pattern` [ไม่มีอยู่อีกต่อไป](https://www.drupal.org/project/drupal/issues/2063793) และเป็นเพียงสิ่งที่เหลืออยู่ในเอกสาร ใช้ [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) แทน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา