我使用hook_theme_suggestions_HOOK_alter()根据内容类型为 page.html.twig 添加主题挂钩建议:
function mytheme_theme_suggestions_page_alter(array &$suggestions, array $variables) {
$node = \Drupal::request()->attributes->get('node');
$suggestions[] = 'page--node--' . $node->getType();
}
Run Code Online (Sandbox Code Playgroud)
现在我的树枝调试模式发现了这一点:
<!-- FILE NAME SUGGESTIONS:
* page--node--case.html.twig (new suggestion based on content type 'case')
* page--node--3.html.twig
* page--node--%.html.twig
* page--node.html.twig
x page.html.twig
-->
Run Code Online (Sandbox Code Playgroud)
但是,当我创建一个名为 的文件时page--node--case.html.twig,它没有被渲染。相反,page.html.twig正在被使用。
有人知道发生了什么事吗?
我只是想知道是否可以将(仅)JQ 核心文件移动到网站顶部而不是</body>html 标签之前。我知道这不是最佳实践,但是如果在滑块脚本之前未加载 JQ,我正在使用的革命滑块将无法工作,我知道,这很奇怪,但我猜这是他们创建它的方式:p。
我已经修改了 core.libraries.yml(实际上我创建了一个补丁和反向补丁以在我更新 Drupal 时应用)并且我已经包含了一个header:true语句以便 JQuery 转到 . 这不是修改 drupal 核心的好主意,这就是为什么我正在寻找更好的解决方案。
或者也许实现我正在寻找的最好方法是用我自己的 JQuery 覆盖核心 JQuery,这样我就可以把它放在我想要的任何地方?我不知道是否有可能:)
谢谢!
我试图弄清楚如何从 Drupal 8 中的实体获取图像的路径。我原以为 get()->value 可以做到这一点,但这只返回一个空白字符串。
我有一个测试功能:
function getValueTest ($profile_id, $field)
{
$profile_storage = \Drupal::entityManager()->getStorage('profile');
$profile = $profile_storage->load($profile_id);
if ($profile != null)
{
if ($profile->hasField ($field))
{
return $profile->get ($field)->value;
}
}
return "No field" . $field;
}
Run Code Online (Sandbox Code Playgroud)
假设某个配置文件 ID 3 有两个字段 field_first_name 和 field_mugshot。如果我打电话:
dpm ($this->getValueTest (3, 'field_first_name'));
dpm ($this->getValueTest (3, 'field_mugshot'));
Run Code Online (Sandbox Code Playgroud)
第一个调用在消息区域中正确显示第一个名称,但第二个调用仅给出一个空白字符串。我需要图像的路径,以便我可以对其内容进行一些处理。
breadcrumb.html.twig 中有一个breadcrumb可用的变量
我有一个Page需要面包屑的节点类型,因为它必须位于我的内容之间。
但该变量breadcrumb不可用node--page.html.twig。
我怎样才能把它拿到那里?
我知道这是在预处理函数/挂钩某处完成的,但我不知道在哪里看。
我有一个服务于实体参考字段的视图。我需要它:(1)提取当前登录用户创作的内容,(2)除非当前登录用户具有“管理员”角色,在这种情况下提取所有内容。
目前,我将上下文过滤器设置为“作者”,这可以很好地满足要求 (1)。我想我需要它来绕过基于角色的过滤器。对于“块”或“页面”显示,我只需复制显示,根据角色为其设置权限,而且是无缝的。但因为这是一个实体引用字段,所以我只能在字段设置中指定一种显示。有任何想法吗?
如何直接在 page.html.twig 中呈现字段?
当我尝试渲染它时:
{{ node.field_my_field.value }}
Run Code Online (Sandbox Code Playgroud)
我得到:
Exception: Object of type Drupal\entity_reference_revisions\EntityReferenceRevisionsFieldItemList cannot be printed
Run Code Online (Sandbox Code Playgroud)
当我添加一个 .value 时,它仍然没有正确渲染(我使用带有子字段的段落)但出现以下错误:用户错误:“target_id”是无效的渲染数组键
Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
User error: "target_revision_id" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
User error: "_loaded" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
User error: "_accessCacheability" is an invalid render array key in Drupal\Core\Render\Element::children() (line 97 of core/lib/Drupal/Core/Render/Element.php).
Run Code Online (Sandbox Code Playgroud)
那么我该如何渲染它呢?
有一个 Datetime 对象如下,我想获取日期值
大批
(
[0] => 数组
(
[值] => Drupal\Core\Datetime\DrupalDateTime 对象
(
[formatTranslationCache:受保护] =>
[inputTimeRaw:受保护] =>
[输入时间调整:受保护] =>
[inputTimeZoneRaw:受保护] =>
[inputTimeZoneAdjusted:受保护] =>
[inputFormatRaw:受保护] =>
[输入格式调整:受保护] =>
[langcode:protected] => en
[错误:受保护] => 数组
(
)
[dateTimeObject:protected] => 日期时间对象
(
[日期] => 2018-01-05 01:30:00.000000
[时区类型] => 3
[时区] => UTC
)
[字符串翻译:受保护] =>
)
)
)
我不想通过以下方式获得这个值
$node->get("field_id")->value;
因为我需要动态值,这意味着在更改日期字段后该值应该更改。是否可以? 我正在使用 preprocess_views_view 来定义一些新变量并将它们传递给树枝模板。
为了定义这些变量,我需要访问公开的过滤器输入值,但我似乎无法弄清楚如何:
function my_modules_preprocess_views_view(&$variables) {
$view = $variables['view'];
// Here I would need to access the exposed filters value
$exposed_filter_value = "the_value";
$variables["foo"] = "Something based on the exposed filters value";
}
Run Code Online (Sandbox Code Playgroud)
我将非常感谢任何线索 - 干杯!
我已经阅读了很多资料,我geofield_compute_values()在尝试以编程方式在 Drupal 中保存坐标时应该使用该函数。
但是它对我不起作用,该函数在我使用的 Drupal 8.5.2 中未定义。
我已经使用 composer 安装了 geofield,我可以像往常一样在管理区域中使用它,并且在那里保存没有问题。
以下是我尝试过的一些示例,第一个示例给了我undefined function geofield_compute_values():
$geofield_data = geofield_compute_values([
'lat' => $lat,
'lon' => $lon,
], GEOFIELD_INPUT_LAT_LON);
$cbisProduct->set('field_koordinater', $geofield_data);
Run Code Online (Sandbox Code Playgroud)
我也尝试过,但没有成功,也没有错误:
$geofield = [
'geom' => "POINT (" . $lon . " " . $lat . ")",
'geo_type' => 'point',
'lat' => $lat,
'lon' => $lon,
'left' => $lon,
'top' => $lat,
'right' => $lon,
'bottom' => $lat,
];
$cbisProduct->set('field_koordinater', $geofield);
Run Code Online (Sandbox Code Playgroud) “网站遇到意外错误。请稍后再试。” 当我去清除 D8 中的缓存时,没有进一步的细节。我之前在另一个 drupal 站点上遇到过类似的问题,根据我的经验,“意外错误”似乎是 Drupal 给出的一般错误消息,而可能会有更详细的消息。
因此,为了进一步调查我$config['system.logging']['error_level'] = 'verbose';在 settings.php 中启用日志记录的问题 。
刷新网站后产生以下内容:
The website encountered an unexpected error. Please try again later.</br></br><em class="placeholder">Drupal\Core\Extension\InfoParserException</em>: Missing required keys (core) in modules/contrib/redirect/modules/redirect_404/redirect_404.info.yml in <em class="placeholder">Drupal\Core\Extension InfoParserDynamic->parse()</em> (line <em class="placeholder">29</em> of <em class="placeholder">core/lib/Drupal/Core/Extension/InfoParserDynamic.php</em>). <pre class="backtrace">Drupal\Core\Extension\InfoParser->parse('modules/contrib/redirect/modules/redirect_404/redirect_404.info.yml') (Line: 552)
我知道有时会在不清除 Drupal 缓存时出现问题。因此,由于 UI 不可用,我尝试通过截断缓存表来通过数据库刷新所有缓存。还运行了 composer install; 作曲家更新但无济于事。
我将不胜感激有关如何解决手头问题的任何解决方案。
谢谢
drupal-8 ×10
drupal ×6
twig ×2
coordinates ×1
datetime ×1
drupal-views ×1
geospatial ×1
jquery ×1
view ×1