Skip to content

Commit 39ace36

Browse files
author
Ben Woods
committed
existing custom module codebase
1 parent df27315 commit 39ace36

7 files changed

Lines changed: 226 additions & 0 deletions

alternate_node_fields.info.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
name: Alternate Node Fields
2+
type: module
3+
description: 'Alternate Node Fields to replace default node fields'
4+
package : Fields
5+
core_version_requirement: ^10.0
6+
dependencies:

alternate_node_fields.module

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
<?php
2+
use Drupal\views\ViewExecutable;
3+
use Drupal\Core\Render\BubbleableMetadata;
4+
use Drupal\node\NodeInterface;
5+
use Drupal\node\Entity\Node;
6+
use Drupal\Core\Routing\RouteObjectInterface;
7+
8+
/**
9+
* Implements hook_views_pre_render().
10+
*
11+
* Replaces node title and summary field with Alternate field values, if they exist
12+
*/
13+
function alternate_node_fields_views_pre_render(\Drupal\views\ViewExecutable $view) {
14+
// Check if the current view is a node view and if it has results.
15+
if ($view->storage->get('base_table') === 'node_field_data' && !empty($view->result)) {
16+
foreach ($view->result as $row) {
17+
// Check if the row is a node entity.
18+
if (isset($row->_entity) && $row->_entity instanceof \Drupal\node\NodeInterface) {
19+
$node = $row->_entity;
20+
21+
// alternate title
22+
if ($node->hasField('field_alt_node_fields_title') && !$node->get('field_alt_node_fields_title')->isEmpty()) {
23+
$alternate_title = $node->get('field_alt_node_fields_title')->value;
24+
// Set the node title to the alternate field value.
25+
$node->setTitle($alternate_title);
26+
}
27+
28+
// alternate summary feed
29+
if ($node->hasField('field_alt_node_fields_feed_summa') && !$node->get('field_alt_node_fields_feed_summa')->isEmpty()) {
30+
$alternate_summary_feed = $node->get('field_alt_node_fields_feed_summa')->value;
31+
$node->field_summary_for_feed_1->value = $alternate_summary_feed;
32+
}
33+
}
34+
}
35+
}
36+
}
37+
38+
/**
39+
* Implements hook_tokens_alter().
40+
*
41+
* Replaces node title token for metatags with Alternate Title value, if it exists
42+
*/
43+
function alternate_node_fields_tokens_alter(array &$replacements, array $context, BubbleableMetadata $bubbleable_metadata) {
44+
// Check if we are dealing with a node context.
45+
if (isset($context['data']['node']) && $context['data']['node'] instanceof NodeInterface) {
46+
/** @var \Drupal\node\NodeInterface $node */
47+
$node = $context['data']['node'];
48+
49+
if ($node->hasField('field_alt_node_fields_title') && !$node->get('field_alt_node_fields_title')->isEmpty()) {
50+
$custom_value = $node->get('field_alt_node_fields_title')->value;
51+
$replacements['[node:title]'] = $custom_value;
52+
}
53+
54+
// Add cacheability metadata if your dynamic content relies on it.
55+
$bubbleable_metadata->addCacheableDependency($node);
56+
}
57+
}
58+
59+
/**
60+
* Implements hook_preprocess_node().
61+
*
62+
* Replaces node title and summary field with Alternate field values, if they exist
63+
*/
64+
function alternate_node_fields_preprocess_node(&$variables) {
65+
$node = $variables['node'];
66+
67+
// Check if the node has the alternate field and it's not empty.
68+
if ($node->hasField('field_alt_node_fields_title') && !$node->get('field_alt_node_fields_title')->isEmpty()) {
69+
$alternate_title = $node->get('field_alt_node_fields_title')->value;
70+
$variables['label'] = $alternate_title; // This replaces the node title in node.html.twig.
71+
}
72+
73+
// Check if the node has the alternate summary field and it's not empty.
74+
if ($node->hasField('field_alt_node_fields_feed_summa') && !$node->get('field_alt_node_fields_feed_summa')->isEmpty()) {
75+
$alternate_summary_feed = $node->get('field_alt_node_fields_feed_summa')->value;
76+
$variables['node']->field_summary_for_feed_1->setValue(['value' => $alternate_summary_feed]);
77+
// $variables['content']['field_summary_for_feed_1'] = $alternate_summary_feed; // This replaces the node title in node.html.twig.
78+
}
79+
}
80+
81+
/**
82+
* Implements hook_preprocess_search_result().
83+
*
84+
* Replaces node title with Alternate Title value, if it exists
85+
*/
86+
function alternate_node_fields_preprocess_search_result(&$variables) {
87+
// Get the result entity (e.g., node, user, etc.)
88+
$result_entity = $variables['result']['node']; // Adjust 'node' based on the entity type
89+
90+
// Check if the entity and the field exist
91+
if ($result_entity && $result_entity->hasField('field_alt_node_fields_title') && !$result_entity->get('field_alt_node_fields_title')->isEmpty()) {
92+
$field_value = $result_entity->get('field_alt_node_fields_title')->value;
93+
$variables['title'] = $field_value;
94+
}
95+
}
96+
97+
/**
98+
* Implements hook_preprocess_breadcrumb().
99+
*
100+
* Replaces node title with Alternate Title value, if it exists
101+
* !!!! needs to be fixed to work with easy breadcrumb !!!!!!
102+
*/
103+
function alternate_node_fields_preprocess_breadcrumb(&$variables){
104+
$variables['#cache']['max-age'] = 0;
105+
106+
$request = \Drupal::request();
107+
$title = '';
108+
if ($route = $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT)) {
109+
$title = \Drupal::service('title_resolver')->getTitle($request, $route);
110+
111+
// Replaces node title with Alternate Title value, if it exists
112+
// Get the current route match.
113+
$route_match = \Drupal::routeMatch();
114+
if ($node = $route_match->getParameter('node')) {
115+
116+
// Check if the entity and the field exist
117+
if ($node->hasField('field_alt_node_fields_title') && !$node->get('field_alt_node_fields_title')->isEmpty()) {
118+
$field_value = $node->get('field_alt_node_fields_title')->value;
119+
$title = $field_value;
120+
}
121+
}
122+
}
123+
124+
if($variables['breadcrumb']){
125+
foreach ($variables['breadcrumb'] as $key => &$value) {
126+
if($value['text'] == 'Node'){
127+
unset($variables['breadcrumb'][$key]);
128+
}
129+
}
130+
if(!empty($title)){
131+
$variables['breadcrumb'][] = array(
132+
'text' => ''
133+
);
134+
$variables['breadcrumb'][] = array(
135+
'text' => $title
136+
);
137+
}
138+
}
139+
}

config/.DS_Store

6 KB
Binary file not shown.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
uuid:
2+
langcode: en
3+
status: true
4+
dependencies:
5+
config:
6+
- field.storage.node.field_alt_node_fields_feed_summa
7+
- node.type.article
8+
module:
9+
- text
10+
id: node.article.field_alt_node_fields_feed_summa
11+
field_name: field_alt_node_fields_feed_summa
12+
entity_type: node
13+
bundle: article
14+
label: 'Alternate Node Fields Feed Summary'
15+
description: ''
16+
required: false
17+
translatable: false
18+
default_value: { }
19+
default_value_callback: ''
20+
settings:
21+
allowed_formats: { }
22+
field_type: text_long
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
uuid:
2+
langcode: en
3+
status: true
4+
dependencies:
5+
config:
6+
- field.storage.node.field_alt_node_fields_title
7+
- node.type.article
8+
id: node.article.field_alt_node_fields_title
9+
field_name: field_alt_node_fields_title
10+
entity_type: node
11+
bundle: article
12+
label: 'Alternate Node Fields Title'
13+
description: 'Use this field to override the node title.'
14+
required: false
15+
translatable: false
16+
default_value: { }
17+
default_value_callback: ''
18+
settings: { }
19+
field_type: string
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
uuid:
2+
langcode: en
3+
status: true
4+
dependencies:
5+
module:
6+
- node
7+
- text
8+
id: node.field_alt_node_fields_feed_summa
9+
field_name: field_alt_node_fields_feed_summa
10+
entity_type: node
11+
type: text_long
12+
settings: { }
13+
module: text
14+
locked: false
15+
cardinality: 1
16+
translatable: true
17+
indexes: { }
18+
persist_with_no_fields: false
19+
custom_storage: false
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
uuid:
2+
langcode: en
3+
status: true
4+
dependencies:
5+
module:
6+
- node
7+
id: node.field_alt_node_fields_title
8+
field_name: field_alt_node_fields_title
9+
entity_type: node
10+
type: string
11+
settings:
12+
max_length: 255
13+
case_sensitive: false
14+
is_ascii: false
15+
module: core
16+
locked: false
17+
cardinality: 1
18+
translatable: true
19+
indexes: { }
20+
persist_with_no_fields: false
21+
custom_storage: false

0 commit comments

Comments
 (0)