我想覆盖联系页面的模板 -- 8 领域 和 emails 领域 drupal 相关 的问题

I want to override the template of the contact page


1
vote

问题

中文

我在drupal 8中使用bootstrap作为主题,我创建了一个子主题。我想用自定义模板覆盖联系人页面。

我在services.yml中添加了 debug: true ,但我没有找到正确的模板来在子主题中重新创建它。

英文原文

I use bootstrap as theme in Drupal 8, and I created a sub-theme. I want to override the contact page with a custom template.

I added debug: true in services.yml, but I didn't find the right template to recreate it in the sub-theme.

     
 
 

回答列表

5
 
vote

联系页面是一种表单,因此您可以将其主题为任何常规形式:

  • 在您的主题中实现Hook_Theme以告诉Drupal您想要主题表单。
  • 创建模板文件

示例

  /**  * Implements hook_theme().  */ function <your theme>_theme($existing, $type, $theme, $path) {   return [     '<your form id here>' => [       'render element' => 'form',     ],     '<another form id, if you have multiple contact forms>' => [       'render element' => 'form',     ],   ]; }   

表单ID取决于您的联系人表格的机器名称。例如,如果您的联系人表单名为"反馈" ,则表单ID将为

  contact_message_feedback_form   

现在默认检查模板文件

  contact-message-feedback-form.html.twig   

将枝条文件放在drupal可以找到它的地方,即在主题中的模板文件夹下。

至少,您需要在该枝条模板文件中所需的是

  {{ form }}   

但您可以通过执行以下操作来控制打印的内容:

  <div class="from">   {{ form.mail }} </div>  <div class="message">   {{ form.message }} </div>  <div class="actions">   {{ form.actions }} </div>  {# Renders the rest of the form #} {{ form|without('mail','message','actions') }}   
 

The contact page is a form, so you can theme it like any usual form:

  • Implement hook_theme in your theme to tell drupal you want to theme the form.
  • Create the template file

Example

/**  * Implements hook_theme().  */ function <your theme>_theme($existing, $type, $theme, $path) {   return [     '<your form id here>' => [       'render element' => 'form',     ],     '<another form id, if you have multiple contact forms>' => [       'render element' => 'form',     ],   ]; } 

The form id depends on the machine name of your contact form. For example, if your contact form is named 'feedback', the form id will be

contact_message_feedback_form 

Now drupal will by default look for the template file

contact-message-feedback-form.html.twig 

Place the twig file in where Drupal can find it, i.e. under the templates folder in your theme.

At the minimum, what you need in that twig template file is

{{ form }} 

But you can control what is printed by doing so:

<div class="from">   {{ form.mail }} </div>  <div class="message">   {{ form.message }} </div>  <div class="actions">   {{ form.actions }} </div>  {# Renders the rest of the form #} {{ form|without('mail','message','actions') }} 
 
 
2
 
vote

您可以使用 hook_theme_sugbortions_hook 建议为您的表单使用新模板。目前我有这个,它将允许我为我在未来创建的表单创建模板,而无需每次添加它们:

  function MODULE_NAME_theme_suggestions_form($variables) {   // Specific templates for contact forms.   $suggestions[] = 'form__' . $variables['element']['#theme'][0]; // Machine name of form.   return $suggestions; }   
 

You could use hook_theme_suggestions_HOOK to suggest a new template to use for your form. Currently I have this which will allow me to create templates for forms that I create in the future without having to add them each time:

function MODULE_NAME_theme_suggestions_form($variables) {   // Specific templates for contact forms.   $suggestions[] = 'form__' . $variables['element']['#theme'][0]; // Machine name of form.   return $suggestions; } 
 
 
2
 
vote

@ Joekers的答案可能适用于模块;但是,这里是如何在主题中完成这一点的。首先,将其放在您的.theme文件中:

  function themename_theme_suggestions_form_alter(array &$suggestions, array $variables) {     $suggestions[] = 'form__' . $variables['element']['#form_id']; }   

一定要用主题的机器名称替换"themename" 。

第二,创建一个名为 form--machine-name-of-form.html.twig 的模板。例如, form--node-page-form.html.twig 将是一个有效的模板建议。

 

@joekers's answer may work for modules; however, here's how to accomplish this in themes. First, put this in your .theme file:

function themename_theme_suggestions_form_alter(array &$suggestions, array $variables) {     $suggestions[] = 'form__' . $variables['element']['#form_id']; } 

Be sure to replace "themename" with the machine name of your theme.

Second, create a template named form--machine-name-of-form.html.twig. For example, form--node-page-form.html.twig would be a valid template suggestion.

 
 
1
 
vote

您可以用两种方式覆盖:

  1. 将相关的枝条文件从(核心)模块目录中复制到主题目录并将其更改为。

  2. 从GUI的尽可能多地自定义表单。要自定义表单页面节点的常规外观,请使用像上下文,如外围设备中的块面板等模块 - 块,级别。

 

You could override it in two ways:

  1. Copy the relevant twig file from the (core) module directory to your theme directory and change it there.

  2. Customize the form as much as you can from the GUI. To customize the general appearance of the form page\node, Use GUI-level theming modules like Context and modules like Block\Panels in the peripheral - Block, level.

 
 
   
   
0
 
vote

我知道它和旧的问题,但到仍然需要解决方案的人, 打开您的Drupal模板.Theme文件并粘贴此代码

  function YOURTHEMENAME_form_contact_message_feedback_form_alter(&$form, DrupalCoreFormFormStateInterface $form_state, $form_id) {    // Name   $form['name']['#prefix'] = '<div class="row"><div class="col-md-12"><div class="form-group">';   $form['name']['#suffix'] = '</div>';   $form['name']['#attributes']['placeholder'][] = $form['name']['#title'].'*';   $form['name']['#attributes']['class'][] = 'form-control';   unset($form['name']['#title']);    // Mail   $form['mail']['#prefix'] = '<div class="form-group">';   $form['mail']['#suffix'] = '</div>';   $form['mail']['#attributes']['placeholder'][] = $form['mail']['#title'].'*';   $form['mail']['#attributes']['class'][] = 'form-control';   unset($form['mail']['#title']);     // Subject   $form['subject']['widget'][0]['value']['#attributes']['class'][] = 'form-control';   $form['subject']['widget'][0]['value']['#attributes']['placeholder'][] = $form['subject']['widget'][0]['#title'].'*';   $form['subject']['widget'][0]['#title'] = '';   unset($form['subject']['widget'][0]['value']['#title']);   $form['subject']['widget'][0]['#prefix'] = '<div class="form-group">';   $form['subject']['widget'][0]['#suffix'] = '</div></div>';    // Message   $form['message']['widget'][0]['value']['#attributes']['class'][] = 'form-control';   $form['message']['widget'][0]['value']['#attributes']['placeholder'][] = $form['message']['widget'][0]['#title'].'*';   $form['message']['widget'][0]['#title'] = '';   unset($form['message']['widget'][0]['value']['#title']);   $form['message']['widget'][0]['#prefix'] = '<div class="col-md-12"><div class="form-group">';   $form['message']['widget'][0]['#suffix'] = '</div></div></div>';    // Submit   $form['actions']['#prefix'] = '<div class="clearfix">';   $form['actions']['#suffix'] = '</div>';   $form['actions']['submit']['#attributes']['class'][] = 'btn';   $form['actions']['submit']['#attributes']['class'][] = 'btn-success';   $form['actions']['submit']['#attributes']['class'][] = 'pull-right';  }   

您的yourthemename是您的Drupal模板的真实姓名, 希望它帮助某人

 

I know its and old question,but to the ones who still needs a solution, open Your drupal template .theme file and paste this code

function YOURTHEMENAME_form_contact_message_feedback_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {    // Name   $form['name']['#prefix'] = '<div class="row"><div class="col-md-12"><div class="form-group">';   $form['name']['#suffix'] = '</div>';   $form['name']['#attributes']['placeholder'][] = $form['name']['#title'].'*';   $form['name']['#attributes']['class'][] = 'form-control';   unset($form['name']['#title']);    // Mail   $form['mail']['#prefix'] = '<div class="form-group">';   $form['mail']['#suffix'] = '</div>';   $form['mail']['#attributes']['placeholder'][] = $form['mail']['#title'].'*';   $form['mail']['#attributes']['class'][] = 'form-control';   unset($form['mail']['#title']);     // Subject   $form['subject']['widget'][0]['value']['#attributes']['class'][] = 'form-control';   $form['subject']['widget'][0]['value']['#attributes']['placeholder'][] = $form['subject']['widget'][0]['#title'].'*';   $form['subject']['widget'][0]['#title'] = '';   unset($form['subject']['widget'][0]['value']['#title']);   $form['subject']['widget'][0]['#prefix'] = '<div class="form-group">';   $form['subject']['widget'][0]['#suffix'] = '</div></div>';    // Message   $form['message']['widget'][0]['value']['#attributes']['class'][] = 'form-control';   $form['message']['widget'][0]['value']['#attributes']['placeholder'][] = $form['message']['widget'][0]['#title'].'*';   $form['message']['widget'][0]['#title'] = '';   unset($form['message']['widget'][0]['value']['#title']);   $form['message']['widget'][0]['#prefix'] = '<div class="col-md-12"><div class="form-group">';   $form['message']['widget'][0]['#suffix'] = '</div></div></div>';    // Submit   $form['actions']['#prefix'] = '<div class="clearfix">';   $form['actions']['#suffix'] = '</div>';   $form['actions']['submit']['#attributes']['class'][] = 'btn';   $form['actions']['submit']['#attributes']['class'][] = 'btn-success';   $form['actions']['submit']['#attributes']['class'][] = 'pull-right';  } 

where your YOURTHEMENAME is the real name of your Drupal template, hope it help someone

 
 

相关问题

1  问题上传文件和包含文件名中的空格的文件  ( Problem uploading files and images containing spaces in the filename ) 
在Drupal 8中,我有字段 File 和 Image ,内容类型和表单。这些字段存储"公共" 文件夹中的文件。 当我用名字包含空格时上传文件时,例如名为 "example with spaces.pdf" 的文件,该文件被正确上传,但一旦上传,它就没有更多可用。 下面的图像是在上传包含文件名中包含空格的图像之后。...

1  联系表单:来自节点电子邮件字段的收件人  ( Contact form recipient from nodes email field ) 
用例:企业目录。 描述:我需要创建一个动态联系人表单,将每个节点的(业务列表内容类型)单个电子邮件字段作为联系表单的主收件人,或者至少作为碳副本('cc') 。 我花了2天寻找模块以及网络周围的各种编码建议,没有成功。 示例: Drupal 8中的每个节点的联系人8? 这很容易在D7中完成 视图联系表格 模块...

0  如何从数据库显示SQL查询?  ( How can i display sql query from database ) 
我正在尝试在Drupal 8.2中的页面上显示SQL查询,但我收到错误: 控制器必须返回响应(给定对象(Drupal Core Render Markup))。 如何更改以下代码? if ($result = $mysqli->query("SELECT id, discipline, teacher ...

1  电子邮件地址已被拍摄  ( The email address is already taken ) 
我正在尝试编辑用户,但我继续收到以下错误: 电子邮件地址[他们的电子邮件]已被拍摄。 我没有编辑他们的电子邮件。实际上,我可以打开编辑页面,刚刚点击保存而不改变任何东西,我仍然会收到错误。 为什么我收到此错误消息? ...

1  如何从相同内容类型中获取所有节点ID [已关闭]  ( How to get all node ids from same content type ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,因此它仅拍摄了一个问题,只有编辑此帖。 关闭 1年前。 ...

2  如何使用Entity_Reference字段允许呈现我的自定义实体?  ( How do i allow my custom entity to be rendered using an entity reference field ) 
使用drupal 8,我创建了一个自定义实体,为它配置了几种视图模式,然后从另一个实体添加了一个Entity_Reference字段到我的自定义实体。 在我的Entity_Reference字段的显示配置中,我选择了"渲染实体" 并为我的实体选择了有效的视图模式,但是当我查看主机实体时,我没有得到任何内容。 我还在我...

3  8 - 如何从entityReferenceItem加载术语实体?  ( 8 how do i load a term entity from an entityreferenceitem ) 
我有一个具有分类学期的内容类型。我可以使用加载第一个 EntityReferenceItem $node->country->get(0) 然后我可以 tid 做 ->target_id (然后手动通过 Term::load 手动加载术语对象。 但是有一个entityReferenceItem的功能,我可以...

2  如何将表单作为桌子呈现?  ( How do i render a form as a table ) 
默认表单布局具有在单个div标签中包装的每个表单元素,带有标签和内部输入。我想整齐地展示一些东西,并为现场标签创建一个列,以及输入区域的另一列。 我可以看到这一点以两种方式之一完成: - 我可以使用表元素或div创建一个表,并将标签与输入分开。我会用枝条吗? - 或者,也许有一个创造性的方法可以使用CSS与默认结...

0  创建自定义块[已关闭]  ( Creating custom blocks ) 
此问题似乎在帮助中心中定义的范围内涉及Drupal。。 想要改进这个问题?更新问题,所以它是关于drupal答案的主题。 ...

1  我应该如何将字段的内容从内容类型放置到块中?  ( How should i go about placing the content of a field from a content type into a ) 
我的案子是: 我的内容类型称为"测试类型" ,具有2个字段:Body(文本区域),幻灯片(无限图像列表) 当我创建一个测试类型和它渲染的实例时,我的目标是将幻灯片字段的内容转到不同的区域,让我们说标题。首先想到是创建一个自定义块,该块将持有对字段内容的引用,但这似乎不是一个选项。这是否可以通过UI与某些设置执行,或者...

4  如何在自定义菜单项中将默认的“显示为adjoard”设置为true  ( How to set the default show as expanded to true in a custom menu item ) 
我正在自定义模块中创建一系列菜单。该网站还有自定义主题。有没有办法在主题或模块中,将菜单"显示为扩展" 到真实。这样,如果我移动我的网站,卸载,或者,它会回到框中的方式。 ...

1  仅显示匿名用户的菜单链接  ( Show menu links for anonymous users only ) 
我需要将用户注册链接显示为 998887665 菜单中的菜单项。我能够通过 links.menu.yml 添加菜单中的链接。 菜单链接显示匿名用户以及身份验证的用户,但不适用于管理员用户角色。 如何隐藏菜单项,以便与用户角色无关? ...

3  配置/安装目录的目的是什么?  ( What is the purpose of the config install directory ) 
我试图在omega / config /安装下使用omega主题并在很多文件下找到了很多文件。例如。 block.block.omega_account_menu.yml,block.block.omega_branding.yml,omega.layout.omega_default.yml。我想知道这些文件的功能...

2  如何找到正确的插件?  ( How do i find the correct plugin ) 
作为Drupal 7开发人员,我目前正在尝试进入Drupal 8。 我发现了一个问题找到了正确的插件。 例如,我很简单想要将节点链接的文本更改为"读取更多" 进入"阅读更多&gt; " 。 离开模板,我会谷歌为drupal 7像"drupal hook-what-all-all-all" 一样,发现了正确的钩子。如何...

12  如何修剪身体文本(Field_Body)?  ( How to trim body text field body ) 
我为一个节点创建了一个节点的视图,该节点显示了呈现实体的内容。其中,我在枝花模板中输出身体字段: {{ content.field_body }} 现在,我想将文本限制为200个字符并放三个点。我测试了三种不同的方式来做到这一点,但没有任何工作。问题是,每种方式都计算并修剪HTML字符。 1:我添加了"管...

5  将CSS / JS添加到特定视图?  ( Add css js to particular view ) 
我遇到了解如何将库视为查看。我希望我的资产包含在/ foo中但不包括在/酒吧。我在这个不止一次且从我的理解中读过文档,这是通过使用预处理来实现的,例如: function my_theme_preprocess_page(&$variables) { if($variables['is_front']){ ...

0  如何在同一实体表单上的另一个字段中引用字段值?  ( How can i reference field values in another field on the same entity form ) 
具有两个字段的示例内容类型: 文本字段 field_value 允许多个值。 自定义字段 field_error (使用字段类型插件定义),包含少量文本"属性" (类似于 alt 和 title 属性图像字段)。属性是: reference 和 message 。这也是多价值场。 我想通过音译其他字段值来实现与 ...

1  配置导出不适用于名称下划线的子主题  ( Configuration export not working for sub theme that has underscore in name ) 
今天有一个奇怪的问题,我有一个名为'rrre_theme'的子主题(bootstrap)。我可以在命名方面确认我在我的子主题中没有任何错误。我的位置块,一般都谈论笨拙的业务。当它发生导出我的配置时,我运行 drush cex vcs 其中,其中VCS是我 99887661 中定义的默认配置目录。到目前为止所以标准。但...

4  使用缓存标记对于特定节点列表  ( Using cache tags for a particular node list ) 
在drupal 8中缓存很大,但文件在Drupal 8中的渲染阵列中的渲染阵列上的缓存标签很薄(此时)。 我有一些代码基本上生成节点预告片列表,例如内容类型"书籍" 和"杂志" 。我正在缓存列表以加快速度。我每次添加/删除/编辑"书" 或"杂志" 时都会刷新列表。所以我有一个渲染数组,如下所示: $build =...

0  电子邮件不会发送到外部域名  ( Emails are not sent to outside domains ) 
我部署了一个drupal 8网站,在托管服务与cpanel上,域 mydomain.com 。 如果我在用户配置文件上设置此电子邮件地址: John.Smith @ example.com ,这是一个电子邮件地址,其中包含与 mydomain不同的域.com ,然后我去: mydomain.com/user...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.