我正在Drupal 8中设计一个新模块.这是一个长期项目,至少几个月内不会上市,所以我用它来弄清楚什么是新的.
在这个模块中,我希望能够以编程方式创建节点.在Drupal 7中,我会通过创建对象,然后调用"node_submit"和"node_save"来完成此操作.
这些函数在Drupal 8中不再存在.相反,根据文档,"模块和脚本可以使用通常的表单API模式以编程方式提交节点." 我不知所措.这是什么意思?我已经使用Form API在Drupal 7中创建表单,但是我没有得到文档在这里说的内容.
我想要做的是基于不是直接从用户呈现的表单中获取的信息,以编程方式创建至少一个并且可能多个新节点.我需要能够:
1)指定内容类型
2)指定URL路径
3)设置以前已经过时的node_object_prepare()处理过的任何其他必要变量
4)提交新节点对象
我希望能够在一个独立的,高度抽象的函数中完成此操作,而不依赖于特定的块或形式.
那我错过了什么?
我想使用我的自定义模块在Drupal 8中创建一个实体引用字段.就像有人点击Drupal页面上的链接一样,将自动在页面节点类型中创建实体引用字段.
谁能帮我这个?
我正在尝试使用我在drupal 8主题中创建的图像样式打印图像.
我可以通过{{content.banner}}在模板中打印图像,但如何将图像样式应用于该图像?我试着找文件,但似乎没有任何东西.
Drupal \node\Entity\Node Object([in_preview] => [values:protected] => Array([vid] => Array([x-default] => 1)
[langcode] => Array
(
[x-default] => en
)
[field_destination] => Array
(
[x-default] => Array
(
[0] => Array
(
[target_id] => 2
)
)
)
Run Code Online (Sandbox Code Playgroud)
无法直接获取field_destination值.它是与内容类型相关的分类术语.任何帮助appriciated.
我一直在搞乱Drupal 8并且看到在状态报告中它建议我应该添加Twig C扩展,在添加它之后我开始在主题模板文件中使用Kint时出现以下错误.
Warning: file(/Users/jafacakes2011/Sites/site/recipe-hub/vendor/twig/twig/lib/Twig/Environment.php(403) : eval()'d code): failed to open stream: No such file or directory in Drupal\kint\Twig\KintExtension->kint() (line 78 of /Users/jafacakes2011/Sites/site/recipe-hub/modules/contrib/devel/kint/src/Twig/KintExtension.php).
Run Code Online (Sandbox Code Playgroud)
我使用自制软件安装PHP和Twig: brew install php56 php56-twig php56-mcrypt php56-opcache
该错误让我相信这是一个权限问题,但所有权限似乎都在供应商twig文件夹中.
所以我有一个已配置路由的控制器我的动作如下所示
/**
* List of brands
*
* @return array
*/
public function listAction()
{
$brandIds = \Drupal::entityQuery('node')
->condition('type', 'brand')
->sort('title', 'asc')
->execute();
return [
'addition_arguments' => [
'#theme' => 'page--brands',
'#brands' => is_array($brandIds) ? Node::loadMultiple($brandIds) : [],
'#brands_filter' => \Drupal::config('field.storage.node.field_brand_categories')->get()
]
];
}
Run Code Online (Sandbox Code Playgroud)
我想在我的树枝模板主题文件页面中使用#brands和#brands_filter - 品牌,但我从未看到它经历过.
有人可以帮忙吗?
谢谢
UPDATE
解决了这个问题
在您的模块my_module.module文件中添加以下内容
function module_theme($existing, $type, $theme, $path)
{
return [
'module.brands' => [
'template' => 'module/brands',
'variables' => ['brands' => []],
],
];
}
Run Code Online (Sandbox Code Playgroud)
在您的控制器中使用
return [
'#theme' => 'mymodule.bands', …Run Code Online (Sandbox Code Playgroud) 我在做一些我认为应该是相对简单的drupal 8视图的问题.
我有一个名为Countries的内容类型.我想在一个视图块中显示我主页上的3个最新国家节点.每个国家/地区都在容器div上显示"views-row"类.我正在使用视图 - 视图 - 未格式化 - 国家/地区 - block_1.tpl来模拟输出.
我想输出类似以下标记的内容:
<a class="view-row-1" href="/link/to/node">
<img src="source-of-teaser-image.png">
<h3>Title of node</h3>
</a>
<a class="view-row-2" href="/link/to/node">
<img src="source-of-teaser-image.png">
<h3>Title of node</h3>
</a>
<a class="view-row-3" href="/link/to/node">
<img src="source-of-teaser-image.png">
<h3>Title of node</h3>
</a>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是访问模板中的各个字段.如果我使用视图模式,我可以访问各个字段.如果我在视图中选择"显示字段",我可以为"查看结果计数器"和"路径"添加一个字段,这将允许我添加"view-row-N"类并将a标记链接到节点,但我无法单独访问这些字段.我有{{row.content}}变量,但任何进一步挖掘变量的尝试(例如row.content.field_name)都没有给我任何信息并且调用{{dump(row.content)}}会使网站崩溃.
由于两个原因,我无法将其输出为视图模式.我无法在视图模式下访问"查看结果计数器"或"路径"字段,即使我有这些变量,某些字段也会嵌套在其他字段中(图像和标题嵌套在其中)
我觉得这应该真的很简单
<a class="view-row-{{ row.content.view_result_counter }}" href="{{ row.content.path }}">
Run Code Online (Sandbox Code Playgroud)
等等,但我已经尝试了我能想到的一切.我完全走错了路吗?到目前为止,Twig和我相处得不好......
直截了当的问题:
是什么原因导致视频在使用Video Embed Field和Colorbox时响应?它是基于JavaScript库的正确加载顺序吗?或者也许它是在Video Embed Video模块中运行的东西?
关于我想要实现的目标的更长的解释/细节:
我正在构建一个Drupal 8站点,它有一个Media Bundle,我们称之为"卡片".卡片包含以下字段:
在默认状态下,用户可以看到标题和图像.悬停时,悬停文本覆盖在图像上.点击后,YouTube视频应启动到Colorbox模式.
我使用以下模块来解决这个问题:
我创建了Media Bundle w/Media实体和Media实体图像模块.我为YouTube视频字段的媒体包添加了视频嵌入字段.在Media Bundle的显示设置中,我将Video Embed Field设置为Colorbox并选中了Responsive Videos选项.
此时我确认我所有的田地都按照我的要求渲染.YouTube视频显示的是默认缩略图,而Colorbox模式工作正常 - 当可用宽度小于最大宽度配置时,它也会调整为更小.
现在我需要进行一些修改以获得标题,将文本和图像作为可点击区域的一部分来触发Colorbox.
我创建了一个自定义树枝模板来控制卡/媒体实体的显示.我注意到Video Embed Field能够基于类和"data-video-embed-field-modal"属性启动colorbox.所以我的计划是重新创建该结构并在div中嵌入我需要的其他字段.这是我的树枝模板:
<div{{ attributes }}>
{% if content %}
{#load libraries#}
{{ attach_library('colorbox/colorbox') }}
{{ attach_library('colorbox/init') }}
{{ attach_library('colorbox/default') }}
{{ attach_library('video_embed_field/colorbox') }}
{{ attach_library('video_embed_field/responsive-video') }}
<div class="{{ content.field_you.0['#attributes'].class.0 }}" data-video-embed-field-modal="{{ content.field_you.0['#attributes']['data-video-embed-field-modal'] }}">
<div class="card-title">{{ name }}</div>
<div class="hover-wrapper">
<div class="card-image">{{ content.field_card_image }}</div>
<div class="card-hovertext">{{ content.field_hover_text.0['#context'].value }}</div>
</div> …Run Code Online (Sandbox Code Playgroud) 我是Drupal 8的新手,想为IEF参考标题添加字段值。目前,我正在使用自动实体标签版本2.x-dev自动为我的实体生成标题,但是当涉及到IEF引用时,我希望获取父级的名称作为IEF的标题。作为示例,请参见下图
然后我要添加一个新的IEF实体,该实体使用“自动实体”标签自动生成标题
如您所见,它只说完成了15%,但我希望它可以完成堆栈溢出15%
这是我在“自动实体”标签中选择的标记,以在IEF参考中显示名称。
[entity-x:field_name] - [task:field_percent_complete] % Completed
Run Code Online (Sandbox Code Playgroud)
此令牌模式放置在Task实体中
注意:我Entity-x和Task是系统中的两个不同实体