我想以编程方式创建自定义内容(通过管理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 ...:/
谢谢 !
我看过类似的问题,但找不到答案。
内容: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) 我已经为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) 在drupal 8中,我遇到了需要由Composer安装库的模块。但是,我想知道是否可以跳过作曲家部分,而只需手动安装库。
我能做到吗?
(我从来没有让作曲家上班)
我尝试修补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但安装或更新了所有软件包,但模块上没有任何更改。怎么了?
我正在尝试使用 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 可以做到这一点吗?
我想使用字段中设置的分类术语值来增强页面的标题。
所以标题看起来像这样:
为了修改标题,我覆盖了
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)
对我来说,这似乎是一项艰巨的工作,因此非常感谢更直接的方法。
我想从 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 更改上面的搜索表单和结果列表。
是否有我错过的预处理功能,或者我可以使用自定义模板文件吗?
我已经创建了一个这样的自定义块:
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)
我怎样才能获得参数?
我正在一个 Drupal 8 站点上工作,其中我有一个自定义模块/块,可以从另一台服务器获取内容并将其注入到 div 中。当用户单击注入内容中的链接(例如阅读更多内容)时,我需要提供内容(完整的 html 页面)(从服务器获取),而无需模板的页眉和页脚。
我的问题是如何在没有模板页眉和页脚的情况下提供页面?
感谢您。