Drupal 8自定义模块添加php类

时间:2016-06-05 19:46:00

标签: 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();

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

非常感谢任何帮助。

C

3 个答案:

答案 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>