Drupal 8自定义模块添加php类

Cyb*_*ell 5 php drupal-8

我已经创建了一个自定义Drupal 8模块,该模块与自定义块和块表单一起工作以收集一些信息.

这一切都很好.

我还有一个twig模板,我想用我买的php feed类渲染一个twitter feed.我只是不知道它是如何将它集成到模块中的.

这是该课程的设置:http://austinbrunkhorst.com/demos/twitter-class/#setup

它包含两个文件:

ultimate.twitter.feed.php

tmhOAuth.php

这是目前的一个require_once 'tmhOAuth.php';主管ultimate.twitter.feed.php

根据指令,我应该创建一个具有以下内容的php文件:

$options = array(
    'screen_name' => 'FeedTestUser',
    'consumer_key'  => '...',
    'consumer_secret' => '...',
    'user_token' => '...',
    'user_secret' => '...',
);

$twitter = new Twitter($options);

$twitter->PrintFeed();
Run Code Online (Sandbox Code Playgroud)

我猜这也是一个障碍因为twig文件不是php

非常感谢任何帮助.

C

acr*_*man 2

我会在您的模块中将该类设置为服务。然后,您的块将实现该服务并进行处理。如果可以避免的话,您实际上不想使用require_once()它,而是使用 Drupal 构造(部分原因是,如果您稍后重新组织内容,Drupal 将帮助在新位置找到文件)。

将该类放置在模块的 src 目录中,并将命名空间添加到文件的开头(假设那里还没有命名空间)。然后,在块的类文件中,您应该能够添加引用该名称空间的 use 语句(更好的是使用依赖项注入,但详细信息会妨碍您在这里)。

然后,在块类的build()方法中,您可以按照问题中的描述实例化该类,但您可能希望捕获该 HTML 并将其作为标记放入块中,而不只是让模块打印 HTML。如果该类允许您在不使用缓冲区的情况下执行此操作,那么您应该(但我在文档中没有看到任何支持这一点的内容),然后尝试对结构化数据进行主题化。如果没有,您可以使用PHP 的输出缓冲来捕获其打印尝试:

 ob_start();
 $twitter->PrintFeed();
 $content= ob_get_contents();
 ob_end_clean();
Run Code Online (Sandbox Code Playgroud)

然后将生成的标记放入渲染数组中:

return [ 
  'my_twitter_block' => [
    '#markup' => $content,
  ],
];
Run Code Online (Sandbox Code Playgroud)