我创建了一个自定义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();
我猜这也是一个障碍,因为 twig 文件不是 php
非常感谢任何帮助。
C
答案 0 :(得分:2)
我会在您的模块中将该类设置为服务。然后,您的块将实现该服务并进行处理。如果你可以避免使用require_once()
,你真的不想使用build()
,而是使用Drupal构造(部分使得如果你以后重新组织东西,Drupal将帮助在新位置找到文件)。
将类放在模块的src目录中,并在文件的开头添加一个命名空间(假设那里没有)。然后在你的块的类文件中你应该能够添加一个引用该名称空间的use语句(更好的方法是使用依赖注入,但是这里的详细信息会妨碍你)。
在您的块类 ob_start();
$twitter->PrintFeed();
$content= ob_get_contents();
ob_end_clean();
方法中,然后按照问题中的描述实例化该类,但不是只让模块打印HTML,您可以想要捕获该HTML并将其放入您的阻止作为标记。如果该类允许您在不使用缓冲区的情况下执行此操作,则应该(但我没有在文档中看到任何支持该内容的内容),然后尝试对结构化数据进行主题化。如果没有,您可以使用PHP's output buffering捕获其打印尝试:
return [
'my_twitter_block' => [
'#markup' => $content,
],
];
然后将生成的标记放入渲染数组中:
execute immediate
答案 1 :(得分:1)
创建自定义块并将PrintFeed()的结果添加到渲染数组中。就像任何通常的自定义块一样。在渲染数组中,您可以指定应该使用的模板(如果需要)。如果你想输出没有任何模板的纯HTML,你可以使用'#markup'键。
小例子:
您的块渲染数组:
return array(
'#theme' => 'name_of_your_theme',
'#some_twig_variable' => $twitter->PrintFeed();
);
your_module.module 文件(位于模块文件夹的根目录中):
function your_module_theme() {
return array(
'name_of_your_theme' => array(
'variables' => array(
'some_twig_variable' => some-default-value,
),
),
);
}
您的 name-of-theme.html.twig 模板(应位于your_module / templates下):
{{ some_twig_variable }}
至于使用类:我发现使用require_once没问题(在你的Block php文件中)。当然,如果您可以通过make文件或编辑器要求库/包然后使用自动加载器,它总是更好/更好,但如果这不可能只是把它放在例如在你的drupal根目录下/ libraries / twitter左右然后需要它。如果您这样做,您必须明确地将该库检入您的git存储库。
答案 2 :(得分:0)
你在TwitterBlock.php文件中使用ultimate.twitter.feed.php
如果没有,那么尝试在类块开始之前添加此行:
<a href="ledOn.php">
IGNITION ON
</a>