Putting this in page.html.twig
is a bad idea. Since this template will be used for every page rendered from Drupal using that theme.
Instead you should simply create a View. Views can be used to query a certain content type and to list nodes in a certain view mode or just certain fields of these nodes (the title and a color field for example). Then configure your view to provide a block and place that block in the region you wanna have the Flowers printed.
Views and block will take care of the caching. And you can use the block's visibility settings to have it displayed only on paths or nodes where you really need it.
If you still insist on coding this in a template (not recommended, too performance-heavy, too much logic in templates) you first have to pass all Flower nodes to the template.
/**
* Implements template_preprocess_page().
*/
function MYTHEME_preprocess_page(&$variables) {
$query = \Drupal::entityTypeManager()->getStorage('node')->getQuery();
// Get all Flower node IDs.
$nids = $query->condition('type', 'flower')->execute();
// Load all Flower nodes.
$nodes = \Drupal\node\Entity\Node::loadMultiple($nids);
// Pass them to page.html.twig.
$variables['flowers'] = $nodes;
}
Then in your page.html.twig
:
{% for flower in flowers %}
{{ flower.title.value }}
{{ flower.field_color.value }}
{% endfor %}
{{ kint() }}
in your template to see what you get 7 levels deep. Don't click the+
icon unless you have unlimited memory available.{{ kint() }}
but didn't found anything related to my custom Content Type. Is that normal? is there any alternative to get my content type without using an external module?{{ node.field_some_name.value }}
. And you don't loop. Drupal isn't WordPress. Normally you'd do all that in "Manage Display" of your content type from the admin UI. Printing node values on page level should be considered bad practice. At best you leave all templates untouched and manage rendering through Drupal's backend.