faqfield.module in FAQ Field 8
Same filename and directory in other branches
Defines a field for frequently asked questions.
File
faqfield.moduleView source
<?php
/**
* @file
* Defines a field for frequently asked questions.
*/
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Render\Markup;
use Drupal\field\FieldStorageConfigInterface;
use Drupal\Component\Utility\Html;
use Drupal\Core\Url;
/**
* Implements hook_help().
*/
function faqfield_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
case 'help.page.faqfield':
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('The FAQ Field module defines a field for storing frequently asked questions, for use with the Field module. See the <a href=":field_ui">Field module help page</a> for more information about fields.', [
':field_ui' => \Drupal::moduleHandler()
->moduleExists('field_ui') ? Url::fromRoute('help.page', [
'name' => 'field_ui',
])
->toString() : '#',
]) . '</p>';
return $output;
}
}
/**
* Implements hook_theme().
*/
function faqfield_theme() {
return [
// Simple text field formatter template.
'faqfield_simple_text_formatter' => [
'variables' => [
'question' => NULL,
'answer' => NULL,
'answer_format' => NULL,
'delta' => NULL,
],
'template' => 'faqfield-simple-text-formatter',
],
// Definition list field formatter template.
'faqfield_definition_list_formatter' => [
'variables' => [
'items' => [],
],
'template' => 'faqfield-definition-list-formatter',
],
// Anchor list field formatter template.
'faqfield_anchor_list_formatter' => [
'variables' => [
'items' => [],
'list_type' => 'ul',
],
'template' => 'faqfield-anchor-list-formatter',
],
// jQuery Accordion field formatter template.
'faqfield_jquery_accordion_formatter' => [
'variables' => [
'items' => [],
'id' => NULL,
],
'template' => 'faqfield-jquery-accordion-formatter',
],
// Details field formatter template.
'faqfield_details_formatter' => [
'variables' => [
'question' => NULL,
'answer' => NULL,
'answer_format' => NULL,
'delta' => NULL,
],
'template' => 'faqfield-details-formatter',
],
];
}
/**
* Prepares variables for the simple text field formatter template.
*
* @param array $variables
* An associative array containing:
* - question: Prefiltered question value by strip_tags.
* - answer: Answer value.
* - answer_format: Answer markup format.
* - delta: Delta of field element.
*/
function template_preprocess_faqfield_simple_text_formatter(array &$variables) {
$variables['question'] = Markup::create(trim(strip_tags($variables['question'])));
$variables['answer'] = check_markup($variables['answer'], $variables['answer_format']);
}
/**
* Prepares variables for the details field formatter template.
*
* @param array $variables
* An associative array containing:
* - question: fields.
* - question: Prefiltered question value by strip_tags.
* - answer: Answer value.
* - answer_format: Answer markup format.
* - delta: Delta of field element.
*/
function template_preprocess_faqfield_details_formatter(array &$variables) {
$variables['question'] = Markup::create(trim(strip_tags($variables['question'])));
$variables['answer'] = check_markup($variables['answer'], $variables['answer_format']);
}
/**
* Prepares variables for the definition list field formatter template.
*
* @param array $variables
* An associative array containing:
* - items: An array of objects with the following fields.
* - question: Prefiltered question value by strip_tags.
* - answer: Prefiltered answer value by field setting format.
* - answer_format: Answer markup format.
*/
function template_preprocess_faqfield_definition_list_formatter(array &$variables) {
foreach ($variables['items'] as &$item) {
$item['question'] = Markup::create(trim(strip_tags($item['question'])));
$item['answer'] = check_markup($item['answer'], $item['answer_format']);
unset($item);
}
}
/**
* Prepares variables for the definition list field formatter template.
*
* @param array $variables
* An associative array containing:
* - items: An array of objects with the following fields.
* - question: Prefiltered question value by strip_tags.
* - answer: Prefiltered answer value by field setting format.
* - answer_format: Answer markup format.
* - name: String to be used as anchor name.
* - list_type: The type of HTML list used for the anchor link list.
*/
function template_preprocess_faqfield_anchor_list_formatter(array &$variables) {
foreach ($variables['items'] as &$item) {
// Build string to be used as anchor name.
$item['name'] = 'faq-' . Html::escape(str_replace(' ', '-', $item['question']));
$item['question'] = Markup::create(trim(strip_tags($item['question'])));
$item['answer'] = check_markup($item['answer'], $item['answer_format']);
unset($item);
}
}
/**
* Prepares variables for the jQuery accordion field formatter template.
*
* @param array $variables
* An associative array containing:
* - items: An array of objects with the following fields.
* - question: Prefiltered question value by strip_tags.
* - answer: Prefiltered answer value by field setting format.
* - answer_format: Answer markup format.
* - id: Id to wrap the accordion markup in.
*/
function template_preprocess_faqfield_jquery_accordion_formatter(array &$variables) {
foreach ($variables['items'] as &$item) {
$item['question'] = Markup::create(trim(strip_tags($item['question'])));
$item['answer'] = check_markup($item['answer'], $item['answer_format']);
unset($item);
}
}
/**
* Implements hook_field_storage_config_create().
*
* Set the default cardinality to unlimited after a faqfield was created.
*/
function faqfield_field_storage_config_create(FieldStorageConfigInterface $field_storage) {
if ($field_storage
->getType() == 'faqfield') {
$field_storage
->setCardinality(FieldStorageConfigInterface::CARDINALITY_UNLIMITED);
}
}
Functions
Name | Description |
---|---|
faqfield_field_storage_config_create | Implements hook_field_storage_config_create(). |
faqfield_help | Implements hook_help(). |
faqfield_theme | Implements hook_theme(). |
template_preprocess_faqfield_anchor_list_formatter | Prepares variables for the definition list field formatter template. |
template_preprocess_faqfield_definition_list_formatter | Prepares variables for the definition list field formatter template. |
template_preprocess_faqfield_details_formatter | Prepares variables for the details field formatter template. |
template_preprocess_faqfield_jquery_accordion_formatter | Prepares variables for the jQuery accordion field formatter template. |
template_preprocess_faqfield_simple_text_formatter | Prepares variables for the simple text field formatter template. |