标签: drupal-8

Drupal 8,以编程方式获取自定义内容的字段列表

我想以编程方式创建自定义内容(通过管理UI创建的自定义内容).但是,在创建之前,我想以编程方式检查自定义内容的字段类型

我的自定义内容包含字段"body"(类型文本),字段"description"(类型文本),int字段(类型int),附加文件字段(类型fid?)...

我用Drupal 8的新api测试了几种方法,我的最后一次尝试..

// I get the entity object "my_custom_content"
$entity_object = NodeType::load("my_custom_content");
dpm($entity_object); //Work perfectly


$test = \Drupal::getContainer()->get("entity_field.manager")->getFieldDefinitions("my_custom_content",$entity_object->bundle())
//The \Drupal::getConta... Return an error : The "my_custom_content" entity type does not exist.
Run Code Online (Sandbox Code Playgroud)

使用此$ entity_object,如何获取自定义内容的字段列表?我看到了EntityFieldManager类,FieldItemList类......但我仍然不明白如何玩drupal 8/class/poo ...:/

谢谢 !

drupal-8 drupal-fields drupal-nodes

5
推荐指数
1
解决办法
1万
查看次数

更新模块和核心ERROR文件名,目录名或卷标签语法不正确

我看过类似的问题,但找不到答案。

内容:Windows 10,XAMPP,Git,Composer,Drush 8和Drupal 8。

当我尝试使用时:

(对于模块和主题更新)drush pm-update

要么

(用于核心更新)加快Drupal

我收到以下错误:

Illegal string offset 'site' backend.inc:1037                        [warning]
The command could not be executed successfully (returned: The        [error]
filename, directory name, or volume label syntax is incorrect.
, code: 1)
pm-updatestatus failed.   
Run Code Online (Sandbox Code Playgroud)

但是我没有问题,例如使用Drush进行下载,启用,重建缓存等。

我也可以通过Drupal(extend> update)更新模块。

我尝试过

drush pm-update --debug --verbose

这是一个警告和两个错误的摘要。

Backend invoke:                                                        [command]
"C:\\Users\\Usuario\\AppData\\Roaming\\Composer\\vendor\\drush\\drush\\drush"
 --backend=2 --verbose --debug --root="C:\\xampp\\htdocs\\mysite"
--uri=http://default  pm-updatestatus 2>&1 [4.59 sec, 14.67 MB]
"C:\\Users\\Usuario\\AppData\\Roaming\\Composer\\vendor\\drush\\drush\\drush"   [notice]
 --backend=2 --verbose --debug --root="C:\\xampp\\htdocs\\mysite"
--uri=http://default  pm-updatestatus 2>&1 [4.59 …
Run Code Online (Sandbox Code Playgroud)

xampp drupal drush git-bash drupal-8

5
推荐指数
0
解决办法
569
查看次数

适用于PHP 7的Docker gd模块

我已经为Drupal 8配置了docker文件,但在我启动了"docker-compose up"后,一切顺利,但是在安装Drupal时,它显示我没有启用PHP的"gd"模块.

这是我的Dockerfile:

FROM php:7-fpm
# Install modules
RUN apt-get update

RUN apt-get install -y software-properties-common

RUN DEBIAN_FRONTEND="noninteractive" add-apt-repository ppa:ondrej/php

RUN apt-get update

RUN apt-get install -y vim curl wget build-essential software-properties-common git ca-certificates

RUN apt-get install -y \
    libbz2-dev \
    libfreetype6-dev \
    libjpeg62-turbo-dev \
    libpng12-dev \
    libxpm-dev \
    libvpx-dev \
    libmcrypt-dev \
    libmemcached-dev \
    && \

apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \

docker-php-ext-configure gd \
        --with-freetype-dir=/usr/lib/x86_64-linux-gnu/ \
        --with-jpeg-dir=/usr/lib/x86_64-linux-gnu/ \
        --with-xpm-dir=/usr/lib/x86_64-linux-gnu/ \
        --with-vpx-dir=/usr/lib/x86_64-linux-gnu/ \
    && \ …
Run Code Online (Sandbox Code Playgroud)

php drupal drupal-8 docker docker-compose

5
推荐指数
3
解决办法
7198
查看次数

如何在Drupal 8中安装没有Composer的库

在drupal 8中,我遇到了需要由Composer安装库的模块。但是,我想知道是否可以跳过作曲家部分,而只需手动安装库。

我能做到吗?

(我从来没有让作曲家上班)

drupal-8 composer-php

5
推荐指数
1
解决办法
1102
查看次数

应用Composer的Drupal 8 Patch修复Signature Field上的多个字段

我尝试修补Signature Field Drupal模块

我遵循了本教程(https://groups.drupal.org/node/518975),但没有任何改变。

我尝试的是:

1次: composer require cweagans/composer-patches

2-编辑 composer.json

"extra": {
    "installer-paths": {
    ...
    },
    "patches": {
        "drupal/signature_field": { //here my module is signature_field
            "Drupal Signature Field fix multi feilds": "https://www.drupal.org/files/issues/2019-02-21/signature_field-2993223-08.patch"     
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

3运行 composer install

问题:我运行composer install但安装或更新了所有软件包,但模块上没有任何更改。怎么了?

php patch drupal drupal-8 drupal-modules

5
推荐指数
1
解决办法
59
查看次数

Drupal 8 包含部分模板

我正在尝试使用 Drupal 8,有自己的主题,由于我的要求存在很大的结构差异,我有一个 page--front.twig.html 和 page.twig.html,我想创建模板部分,如普通 Symfony2 项目中的部分,例如 footer.html.twig 和 header.html.twig。这些模板保存在子目录/parts/下

但是我像平常一样调用这个模板,我只是收到一个带有模板名称的字符串。

例如:

{# in page.html.twig or page--front.html.twig #}
{% include 'parts/footer.html.twig' %} 
Run Code Online (Sandbox Code Playgroud)

以字符串形式返回文件名:

parts/footer.html.twig
Run Code Online (Sandbox Code Playgroud)

Drupal 8 可以做到这一点吗?

drupal drupal-theming drupal-8

4
推荐指数
1
解决办法
5618
查看次数

Drupal 8 树枝中的分类术语

我想使用字段中设置的分类术语值来增强页面的标题。

所以标题看起来像这样:

标题 - [分类术语值]

为了修改标题,我覆盖了

field--node--title--[content-type].html.twig
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,通过元素对象请求访问节点本身和其他字段:

element['#object'].get('field_my_field').get(0)
Run Code Online (Sandbox Code Playgroud)

获取第一个元素。

element['#object'].get('field_my_field').get(0)['target_id']
Run Code Online (Sandbox Code Playgroud)

返回分类术语的 tid。但

element['#object'].get('field_my_field').get(0)['name']
Run Code Online (Sandbox Code Playgroud)

返回一个空元素。

如何检索字段值?我无法想象这需要 php 代码。

更新: 我找到了一个方法,但看起来有点复杂:

由于#object 中未解析分类术语,因此我必须添加一个 hook_preprocess:field 函数来准备具有必要数据的变量:

function myTheme_preprocess_field(&$variables, $hook){
  if ($variables['field_name'] == 'title'){
    $variables['my_field'] = Term::load($variables['element']['#object']->get('my_field')->get(0)->getValue()['target_id']);
}
Run Code Online (Sandbox Code Playgroud)

现在可以在 twig 中访问该字段,如下所示:

{{ my_field.name.getValue()[0]['value'] }}
Run Code Online (Sandbox Code Playgroud)

对我来说,这似乎是一项艰巨的工作,因此非常感谢更直接的方法。

twig drupal-8

4
推荐指数
1
解决办法
2万
查看次数

核心搜索模块,更改标记

我想从 core/modules/search/src/Controller\SearchController.php 的第 119 行删除搜索页面中添加的搜索结果字符串。

if (count($results)) {
  $build['search_results_title'] = array(
    '#markup' => '<h2>' . $this->t('Search results') . '</h2>',
  );
}
Run Code Online (Sandbox Code Playgroud)

我可以使用搜索表单上的 preprocess_form 函数和搜索结果上的 preprocess_search_result 更改上面的搜索表单和结果列表。

是否有我错过的预处理功能,或者我可以使用自定义模板文件吗?

php drupal drupal-templates drupal-theming drupal-8

4
推荐指数
1
解决办法
2859
查看次数

获取自定义模块中的URL参数

我已经创建了一个这样的自定义块:

class HelloBlock extends BlockBase implements BlockPluginInterface{

  /**
   * {@inheritdoc}
   */
  public function build() {
    $config = $this->getConfiguration();
    $result = db_query('SELECT * FROM {test}');
    return array(
      '#theme' => 'world',
      '#test' => $result
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

我现在想以编程方式从URL获取一些参数.

例如:

如果URL是http://localhost/drup/hello/5569我想要获取5569我的模块内的值.

我试过arg(1),drupal_get_query_parameters()但我收到此错误消息:

Call to undefined function `Drupal\hello\Plugin\Block\arg()`
Run Code Online (Sandbox Code Playgroud)

Call to undefined function `Drupal\hello\Plugin\Block\drupal_get_query_parameters()`
Run Code Online (Sandbox Code Playgroud)

我怎样才能获得参数?

php drupal drupal-8

4
推荐指数
5
解决办法
3万
查看次数

Drupal 8 获取内容并提供无页眉/页脚的服务

我正在一个 Drupal 8 站点上工作,其中我有一个自定义模块/块,可以从另一台服务器获取内容并将其注入到 div 中。当用户单击注入内容中的链接(例如阅读更多内容)时,我需要提供内容(完整的 html 页面)(从服务器获取),而无需模板的页眉和页脚。

我的问题是如何在没有模板页眉和页脚的情况下提供页面?

感谢您。

templates fetch twig drupal-8

4
推荐指数
1
解决办法
3614
查看次数