🇦🇹Austria @maxilein

Account created on 10 November 2010, over 14 years ago
#

Recent comments

🇦🇹Austria maxilein

It is still too short to reflect a naming convention that makes sense in a broader context on a complex site...
Not even windows is fixed to 255 limt anylonger...
And what does a table field size have to do with the filesystem anyway?

🇦🇹Austria maxilein

Thank you.
Let me explain my observation - an outside view so to say.

I added the field decimal, because I needed a place for huge numbers with not so many positions behind the comma.
Then I had to realize that a field called decimal is very much limited in comparison to what I expected, or from my experience with other decimal functionality in other system would have expected.
That was my confusion number one.

Then I learned I can configure the field upon its creation. And before this validation bug here - or better without realizing that again - it was not problem to set the gui to whatever I needed. A huge number with a few digits behind the comma.
Entering data caused numbers to be crunched ... we all know that story here.

Then you wonder what to do and how it all depends on each other.

The default database allows for much more digits before and after the comma than default Drupal.
In my opinion that is not good. It is confusion number one.
Then you realize that also php may have a limit inbetween. That is confusion number three.

In my opinion we should make that clear somehow.
I think Drupal should ask during install how the user wants it to be set.
e.g.
DB limit is ...
php limit is ...
Drupal default is ...
Would you like to use Drupal default precision/scale for decimal fields or would you like to increase the default to the php and DB limits.

Then at least it would be transparent what happens here.

The next problem is the intransparent limitation of this patch. I can set some precicion/scale during field creation and it may crash because of underlying system differences ... which were not obvious during field creation.

Why should this patch not be adjusted to system parameter settings? it does not make sence to me to keep an artificially limited number of digits before or after the comma it the system already provides for that bandwidth.

And btw: thank you all very much for your efforts!

The standard setting does not a

🇦🇹Austria maxilein

#372 I completely agree.
And I don't understand this from #370 "We shouldn't make this field value dependent on an environment specific setting. It needs to be distinct."

We have three layers:
Database - php - drupal/gui

Why should they be distinct from each other?!

if php sends something too large for the db -> error.
If drupal sends something wrongly scaled -> error.
...

In my opinion we should specify rules on how they need to be in sync to each other.

🇦🇹Austria maxilein

Everything is fine for me. You are the expert. I am not so deep in Drupal code in order to make these judgements.

🇦🇹Austria maxilein

And don't forget #17. It seems to be a rare trap.

🇦🇹Austria maxilein

Please someone check that code above and here are example cases.

// Example 1: Stage is a direct subdirectory
$stage1 = '/var/www/html/myproject/staging';
$active1 = '/var/www/html/myproject';
echo "Example 1: " . (isStageSubdirectoryOfActive($stage1, $active1) ? 'true' : 'false') . "\n"; // Output: true

// Example 2: Stage is nested deeper
$stage2 = '/var/www/html/myproject/staging/sub/folder';
$active2 = '/var/www/html/myproject';
echo "Example 2: " . (isStageSubdirectoryOfActive($stage2, $active2) ? 'true' : 'false') . "\n"; // Output: true

// Example 3: Paths are identical
$stage3 = '/var/www/html/myproject';
$active3 = '/var/www/html/myproject';
echo "Example 3: " . (isStageSubdirectoryOfActive($stage3, $active3) ? 'true' : 'false') . "\n"; // Output: false

// Example 4: Stage is a parent directory (or unrelated)
$stage4 = '/var/www/html';
$active4 = '/var/www/html/myproject';
echo "Example 4: " . (isStageSubdirectoryOfActive($stage4, $active4) ? 'true' : 'false') . "\n"; // Output: false

// Example 5: Unrelated paths
$stage5 = '/etc/nginx';
$active5 = '/var/www/html';
echo "Example 5: " . (isStageSubdirectoryOfActive($stage5, $active5) ? 'true' : 'false') . "\n"; // Output: false

// Example 6: Partial match, but not a directory boundary
$stage6 = '/var/www/html_extra';
$active6 = '/var/www/html';
echo "Example 6: " . (isStageSubdirectoryOfActive($stage6, $active6) ? 'true' : 'false') . "\n"; // Output: false

// Example 7: Windows-style paths
$stage7 = 'C:\\Users\\Test\\My Documents\\Stage';
$active7 = 'C:\\Users\\Test\\My Documents';
echo "Example 7: " . (isStageSubdirectoryOfActive($stage7, $active7) ? 'true' : 'false') . "\n"; // Output: true

// Example 8: Mixed separators
$stage8 = 'C:/Users/Test/My Documents/Stage/Sub';
$active8 = 'C:\\Users\\Test\\My Documents';
echo "Example 8: " . (isStageSubdirectoryOfActive($stage8, $active8) ? 'true' : 'false') . "\n"; // Output: true

// Example 9: Trailing slashes
$stage9 = '/var/www/html/myproject/staging/';
$active9 = '/var/www/html/myproject/';
echo "Example 9: " . (isStageSubdirectoryOfActive($stage9, $active9) ? 'true' : 'false') . "\n"; // Output: true

// Example 10: Root directory cases
$stage10a = '/var/log';
$active10a = '/';
echo "Example 10a (Root): " . (isStageSubdirectoryOfActive($stage10a, $active10a) ? 'true' : 'false') . "\n"; // Output: true

$stage10b = '/';
$active10b = '/';
echo "Example 10b (Root): " . (isStageSubdirectoryOfActive($stage10b, $active10b) ? 'true' : 'false') . "\n"; // Output: false


🇦🇹Austria maxilein

If you add this function to modules\contrib\automatic_updates\package_manager\src\PathLocator.php

 /**
 * Checks if a given path string ($stage) represents a subdirectory
 * of another path string ($active).
 *
 * This function compares absolute path strings, normalizes directory separators,
 * and handles edge cases like identical paths or root directories.
 * It does *not* check if the paths actually exist on the filesystem,
 * it purely performs a string comparison.
 *
 * @param string $stage The absolute path string that might be a subdirectory.
 * @param string $active The absolute path string that might be the parent directory.
 *
 * @return bool Returns true if $stage is a subdirectory of $active, false otherwise.
 */
    public function isStageSubdirectoryOfActive(string $stage, string $active): bool
    {
        // 1. Normalize directory separators to '/' for consistent comparison
        $stageNormalized = str_replace('\\', '/', $stage);
        $activeNormalized = str_replace('\\', '/', $active);

        // 2. If the normalized paths are identical, stage is not a *sub*directory.
        if ($stageNormalized === $activeNormalized) {
            return false;
        }

        // 3. Prepare the active path prefix for comparison.
        //    For a path to be a subdirectory, it must start with the parent path
        //    followed by a directory separator.
        //    We ensure the active path ends with a '/' for the check,
        //    unless the active path *is* the root directory itself ('/').
        $activePrefix = rtrim($activeNormalized, '/') . '/';
        if ($activeNormalized === '/') {
             // If active is the root, the prefix should just be '/'
            $activePrefix = '/';
        }

        // 4. Check if the normalized stage path *starts with* the active path prefix.
        //    Using strpos() === 0 is an efficient way to check for "starts with".
        //    Example 1: stage="/var/log/nginx", active="/var/log"
        //       -> stageNormalized="/var/log/nginx", activePrefix="/var/log/"
        //       -> strpos("/var/log/nginx", "/var/log/") === 0 -> TRUE
        //    Example 2: stage="/var/log", active="/var/log"
        //       -> Handled by check #2 -> FALSE
        //    Example 3: stage="/var/logs", active="/var/log"
        //       -> stageNormalized="/var/logs", activePrefix="/var/log/"
        //       -> strpos("/var/logs", "/var/log/") === false -> FALSE
        //    Example 4: stage="/var/log/nginx/error.log", active="/var/log"
        //       -> stageNormalized="/var/log/nginx/error.log", activePrefix="/var/log/"
        //       -> strpos("/var/log/nginx/error.log", "/var/log/") === 0 -> TRUE
        //    Example 5: stage="/home/user", active="/"
        //       -> stageNormalized="/home/user", activePrefix="/"
        //       -> strpos("/home/user", "/") === 0 -> TRUE

        if (strpos($stageNormalized, $activePrefix) === 0) {
            // It starts with the correct prefix, confirming it's inside the active directory.
            // The check in step 2 already ensured they aren't identical.
            return true;
        }

        // If the stage path doesn't start with the active prefix, it's not a subdirectory.
        return false;
    }

And then change ...modules\contrib\automatic_updates\package_manager\src\Validator\StageNotInActiveValidator.php to

  /**
   * Check if staging root is a subdirectory of active.
   */
  public function validate(PreOperationStageEvent $event): void {
    $project_root = $this->pathLocator->getProjectRoot();
    $staging_root = $this->pathLocator->getStagingRoot();
    
    if ($this->pathLocator->isStageSubdirectoryOfActive($staging_root, $project_root) == true )
    {
      $message = $this->t("Stage directory is a subdirectory of the active directory.");
      $currentconfiginfo = $message . " STAGE: " . $staging_root . " ACTIVE ROOT: " . $project_root;
      $event->addError([$currentconfiginfo]);
    }
  }

the error goes away.

And it seems that the comparison logic of paths does work. But I have not tested any other cases than mine.
I will post examples in the next comment. Can someone please convert them into test cases?

Attached is a patch to the 3.1.7 of automatic_updates contrib module.

🇦🇹Austria maxilein

Thinking about it ACTIVE ROOT: /var/www would correspond to my composer.json location ( see structure above #7)

That seems ok. But I wonder if it would be reliable in all cases because in modules\contrib\automatic_updates\package_manager\src\PathLocator.php the function

  public function getProjectRoot(): string {
    // Assume that the vendor directory is immediately below the project root.
    return realpath($this->getVendorDirectory() . DIRECTORY_SEPARATOR . '..');
  }

has a comment making an assumption about the vender directory being below ...
What if it is somewhere else? Should we check for this assumption also - and at least warn that this check will not work if that is not the case?

🇦🇹Austria maxilein

Ok. I have tried to make visible what the validator does by adding these lines (in bold):
...modules\contrib\automatic_updates\package_manager\src\Validator\StageNotInActiveValidator.php
lines 38+39

public function validate(PreOperationStageEvent $event): void {
$project_root = $this->pathLocator->getProjectRoot();
$staging_root = $this->pathLocator->getStagingRoot();
if (str_starts_with($staging_root, $project_root)) {
$message = $this->t("Stage directory is a subdirectory of the active directory.");
$currentconfiginfo = $message . " STAGE: " . $staging_root . " ACTIVE ROOT: " . $project_root;
$event->addError([$currentconfiginfo]);
}
}

The output gives:

Stage directory is a subdirectory of the active directory. STAGE: /var/www_tmp/.package_managerX...Y ACTIVE ROOT: /var/www

And that shows that str_starts_with just does not produce a proper result.

🇦🇹Austria maxilein

The error message is not understandable. It does not make sense to talk about a directory called staging when there is no such folder in real Drupal folder structure.
In oder to make it more easy to grasp and administer without deep knowledge add the path in question that should be moved.

I could not find any documentation on the prerequisites for the new update module. Can someone point into that directions please.

🇦🇹Austria maxilein

Moving the tmp directory out from beneath the composer.json file location does not make the error go away.

moving it from /var/www/tmp
up to a new folder
$settings['file_temp_path'] = '/var/www_tmp';

Any other from php reported tmp directories are in on the testsystem.
/tmp

So I do not understand the error message. The message or check must be wrong.

OR is the Stage directory something completely different. like the sync folder?!

🇦🇹Austria maxilein

Here is what I learned asking myself how I came to the conclusion it was the recommended place:

Drupal 11 was upgraded from a site I originally installed using Drupal 9 and then I adapted the folder structure with Drupal 10.

The drupal/recommended-project Composer template used to sets up the following general structure:

your-project-name/
├── composer.json # Defines project dependencies, scripts, etc.
├── composer.lock # Locks dependency versions.
├── config/ # Often used for configuration management (e.g., config/sync).
│ └── sync/ # Default location for configuration sync.
├── drush/ # Drush site aliases, commands, and configuration.
├── vendor/ # Composer-managed dependencies (core, contrib modules, themes, PHP libraries). Not committed to Git.
├── web/ # The web server's document root (sometimes called docroot, public_html, etc.).
│ ├── core/ # Drupal core files (managed by Composer).
│ ├── index.php # Drupal's front controller.

There isn't a predefined tmp folder in the standard drupal/recommended-project structure.
Its location is determined by the setting found in Admin > Configuration > Media > File system.  
But most of the recommendations derive from web server configuration: It's best practice to explicitly configure a path outside the web root (web/) that is writable by the web server.

So I always figured that the composer.json above all folders is a safe bet - if the web server's root location is below it.
In my case the web server cannot access the folder where the composer.json file is located, because it is above the permissions of the web folder.
So a /tmp folder which is on the same level as the /web should be safe.
Why is it a problem that the /tmp is below the composer.json?

BTW: Here they call the /web structures Base-Level Directories: https://www.drupal.org/docs/getting-started/understanding-drupal/directo... . But htere is no mention of a tmp folder in regards to the new update manager functionality.
Once this is cleared up we should not forget to add documentation there.

🇦🇹Austria maxilein

Thank you. For the example below I added /active_directory in the structure.

/../active_directory/composer.json

/../active_directory/web/ (= Drupal) index.php

/../active_directory/web/vendor
/../active_directory/web/tmp
/../active_directory/web/recipes
/../active_directory/web/private

wasn't this the recommended structure until Drupal 9 or 10?

🇦🇹Austria maxilein

Maybe these errors are connected to this long standing issue: https://www.drupal.org/project/drupal/issues/2230909 🐛 Simple decimals fail to pass validation Needs work

🇦🇹Austria maxilein

I don't know if aligning menus and text separately should be another feature with its own dropdown or if it the entire content should be right aligned.
The menu is right aligning if I uncheck display:flex; - but also other elements...

🇦🇹Austria maxilein

Thanks a lot again! Looks great thank you.
It right aligns all texts like "Powered by Drupal" or the headings of a Menu.

But the menu itself remains flexed and centered inside the block. Pls. see screenshot.

🇦🇹Austria maxilein

I just realized that this bug is only if Header region and Main Menu region are NOT flipped (=default).
If header and main menu are flipped (as in screenshot the bug is not happening).
Very interesting.
In the current dev. version from about an hour ago the bug is gone.
I'll test further.

🇦🇹Austria maxilein

Thank you. It works beautifully.
By the way: thank you for your quick responses. And I have rarely seen such a clean and well organized theme like yours!
it is really impressive.

🇦🇹Austria maxilein

Here is a step by step description showing settings + result on each page.

🇦🇹Austria maxilein

You don't read my text or I don't understand what you are saying:

You say: "The logo option has no relationship with the menu". And by the design you chose I think it should be that way.

BUT there is a bug: The logo options is the ONLY way to also move the menu to the right! The drop-down alone is dead.

🇦🇹Austria maxilein

it is fine for me as it is.
But someone else might think that the dropdown does nothing - if they don't tick the logo option

🇦🇹Austria maxilein

otherwise it stays left aligned even though right is selected

🇦🇹Austria maxilein

the menu only right aligns when the checkbox for the logo is ticked

🇦🇹Austria maxilein

Thanks for your feedback.
I am using latest Drupal CMS and latest solo.dev - both without customization and no extra modules enabled.

But your screenshots helped a lot to narrow the issue down:
There is a difference if a menu entry has children or not.
If it has no child the error occurs.
Please see screenshots.

🇦🇹Austria maxilein

Thank you. Fantastic!
I tried it of course right away. The result is exactly what I wanted (including this issue Logo and Main Menu in the same horizontal height 💬 Logo and Main Menu in the same horizontal height Active ): Logo left aligned, Main Menu to the right.

Perfect for me. This issue alone seems to solve both this issue and the one mentioned above.

But here is the catch for anintuitive understanding of the theme configuration: the dropdown by itself does not right align the menu. In fact it does not seem to do anything.
If you look at the attached screenshots: the menu only right aligns when the checkbox for the logo is ticked.

🇦🇹Austria maxilein

if I add

align-items: center;
to

@media (min-width: 62rem) {
.solo-inner .navigation__responsive {
display: flex !important;
flex-wrap: wrap;
align-items: center;
}
}

it is correctly aligned in the menu.
But I am not sure this is the right position to add it without breaking anything else ...
please check...

🇦🇹Austria maxilein

Thank you!
I would appreciate it very much if you could make the changes. I don't even have git installed ...

🇦🇹Austria maxilein

We are using it for years.
Please take the D11 patch from the issue 📌 Drupal 11 compatibility Active and make a new release. It is working on D11.1.5 just fine.

🇦🇹Austria maxilein

Following the https://www.drupal.org/node/3375748 API changes and therefore changing line 18 in SimplePercentageItem.php from

* category = @Translation("number"),

to

* category = "number",

fixes the issue.

🇦🇹Austria maxilein

How about some log messages?

"view xy about to be deleted by module xy uninstall."

"view xy's configuration export BEFORE changes: "

"view xy's configuration export BEFORE changes: "

"view xy deleted by module xy uninstall. see previous log messages for configuration changes made."

🇦🇹Austria maxilein

hm, ... it works if you just use

composer require 'drupal/views_dependent_filters

🇦🇹Austria maxilein

I had some left overs from this module. It was listed as unsupported, but was nowhere to be found in the file system or comopser.json...

composer remove drupal/eca_context-eca_context (as mentined above) helped me get rid of that finally...

🇦🇹Austria maxilein

Same here:

composer require 'drupal/views_dependent_filters:^1.3'
./composer.json has been updated
Running composer update drupal/views_dependent_filters
Gathering patches for root package.
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

Problem 1
- Root composer.json requires drupal/views_dependent_filters ^1.3 -> satisfiable by drupal/views_dependent_filters[1.3.0].
- drupal/views_dependent_filters 1.3.0 requires drupal/core ^8.8 || ^9 || ^10 -> found drupal/core[8.8.0, ..., 8.9.20, 9.0.0, ..., 9.5.11, 10.0.0, ..., 10.4.4] but the package is fixed to 11.1.3 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.

🇦🇹Austria maxilein

Could you please make a new release?

📌 | Warmer | Drush 13
🇦🇹Austria maxilein

Just installed the current dev on D11.1.
Works fine with drush 13 even without this patch.

🇦🇹Austria maxilein

drush was not affected. Only the cache clear calls from the UI.

🇦🇹Austria maxilein

Patch applies fine to the current dev version.

🇦🇹Austria maxilein

Sorry it applied to the dev version correctly.

🇦🇹Austria maxilein

The patch does not apply on the latest dev odr stable versions (as of 20 Jan 2024 at 20:16 CET)

🇦🇹Austria maxilein

Cannot apply it to the current or current dev version.
There seems to be a lot of new code in ckeditor_templates_ui.module that the patch requires ...

🇦🇹Austria maxilein

The patch does not apply to Version 1.0.0
Could you create a dev version that is compatible to D11?

🇦🇹Austria maxilein

Look at this patch: https://www.drupal.org/project/better_fields_report/issues/3428959 📌 Automated Drupal 11 compatibility fixes for better_fields_report Needs review
There is a comment to avoid New Lines at the end of the file

🇦🇹Austria maxilein

If I understand it correctly it is a long missing functionality! Thank you!
So it is like a configurable popup for links to selected content types?
Can it popup links to views also?

🇦🇹Austria maxilein

Thank you!
Will help adoption a lot.
And explains more than words.

🇦🇹Austria maxilein

It does make the error go away. Thank you. Sorry for the late response.

🇦🇹Austria maxilein

I think this is a good idea.
It is very hard to track down the source of the error.
(see this case https://www.drupal.org/project/clamav/issues/3328591 🐛 Dragging inline image: Problem with private:// file path ot permissions? Active )
It is not something the administrator would be able to fix ...

🇦🇹Austria maxilein

I have the same error and if you google it there are a view others.

Warning: Undefined array key "connect_nulls" in Drupal\charts\Plugin\views\style\ChartsPluginStyleChart->render() (line 336 of /...//modules/contrib/charts/src/Plugin/views/style/ChartsPluginStyleChart.php)

#0 /...//core/includes/bootstrap.inc(166): _drupal_error_handler_real()
#1 /...//modules/contrib/charts/src/Plugin/views/style/ChartsPluginStyleChart.php(336): _drupal_error_handler()
#2 /...//core/modules/views/src/Plugin/views/display/DisplayPluginBase.php(2177): Drupal\charts\Plugin\views\style\ChartsPluginStyleChart->render()
#3 /...//core/modules/views/src/ViewExecutable.php(1593): Drupal\views\Plugin\views\display\DisplayPluginBase->render()
#4 /...//core/modules/views/src/Plugin/views/display/Block.php(133): Drupal\views\ViewExecutable->render()
#5 /...//core/modules/views/src/ViewExecutable.php(1690): Drupal\views\Plugin\views\display\Block->execute()
#6 /...//core/modules/views/src/Element/View.php(81): Drupal\views\ViewExecutable->executeDisplay()
#7 [internal function]: Drupal\views\Element\View::preRenderViewElement()
#8 /...//core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(113): call_user_func_array()
#9 /...//core/lib/Drupal/Core/Render/Renderer.php(870): Drupal\Core\Render\Renderer->doTrustedCallback()
#10 /...//core/lib/Drupal/Core/Render/Renderer.php(432): Drupal\Core\Render\Renderer->doCallback()
#11 /...//core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#12 /...//core/lib/Drupal/Core/Template/TwigExtension.php(484): Drupal\Core\Render\Renderer->render()
#13 /...//sites/default/files/php/twig/67862c3a8fea6_viewfield-item.html.twig_K-GaYPZNWd_RyzYVAcCyBbYFE/jdIHjz7GsR44U3CXMdLcawygTY3-F3jzlkYV39vuJcE.php(94): Drupal\Core\Template\TwigExtension->escapeFilter()
#14 /var/www/vendor/twig/twig/src/Template.php(431): __TwigTemplate_2805eb420b5100c429475342ec366984->block_content()
#15 /...//sites/default/files/php/twig/67862c3a8fea6_viewfield-item.html.twig_K-GaYPZNWd_RyzYVAcCyBbYFE/jdIHjz7GsR44U3CXMdLcawygTY3-F3jzlkYV39vuJcE.php(77): Twig\Template->yieldBlock()
#16 /var/www/vendor/twig/twig/src/Template.php(387): __TwigTemplate_2805eb420b5100c429475342ec366984->doDisplay()
#17 /var/www/vendor/twig/twig/src/Template.php(343): Twig\Template->yield()
#18 /var/www/vendor/twig/twig/src/Template.php(358): Twig\Template->display()
#19 /var/www/vendor/twig/twig/src/TemplateWrapper.php(35): Twig\Template->render()
#20 /...//core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#21 /...//core/lib/Drupal/Core/Theme/ThemeManager.php(348): twig_render_template()
#22 /...//core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#23 /...//core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#24 /...//core/modules/views/src/Plugin/views/field/EntityField.php(974): Drupal\Core\Render\Renderer->render()
#25 /...//core/modules/views/src/Plugin/views/field/FieldPluginBase.php(1214): Drupal\views\Plugin\views\field\EntityField->render_item()
#26 /...//core/modules/views/views.theme.inc(238): Drupal\views\Plugin\views\field\FieldPluginBase->advancedRender()
#27 [internal function]: template_preprocess_views_view_field()
#28 /...//core/lib/Drupal/Core/Theme/ThemeManager.php(261): call_user_func_array()
#29 /...//core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#30 /...//core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#31 /...//core/modules/views/src/Plugin/views/field/FieldPluginBase.php(1796): Drupal\Core\Render\Renderer->render()
#32 /...//core/modules/views/src/Plugin/views/style/StylePluginBase.php(769): Drupal\views\Plugin\views\field\FieldPluginBase->theme()
#33 [internal function]: Drupal\views\Plugin\views\style\StylePluginBase->elementPreRenderRow()
#34 /...//core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(113): call_user_func_array()
#35 /...//core/lib/Drupal/Core/Render/Renderer.php(870): Drupal\Core\Render\Renderer->doTrustedCallback()
#36 /...//core/lib/Drupal/Core/Render/Renderer.php(432): Drupal\Core\Render\Renderer->doCallback()
#37 /...//core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#38 /...//core/modules/views/src/Plugin/views/style/StylePluginBase.php(708): Drupal\Core\Render\Renderer->render()
#39 /...//core/modules/views/src/Plugin/views/style/StylePluginBase.php(574): Drupal\views\Plugin\views\style\StylePluginBase->renderFields()
#40 /...//core/modules/views/src/Plugin/views/style/StylePluginBase.php(462): Drupal\views\Plugin\views\style\StylePluginBase->renderGrouping()
#41 /...//core/modules/views/src/Plugin/views/display/DisplayPluginBase.php(2177): Drupal\views\Plugin\views\style\StylePluginBase->render()
#42 /...//core/modules/views/src/ViewExecutable.php(1593): Drupal\views\Plugin\views\display\DisplayPluginBase->render()
#43 /...//core/modules/views/src/Plugin/views/display/Block.php(133): Drupal\views\ViewExecutable->render()
#44 /...//core/modules/views/src/ViewExecutable.php(1690): Drupal\views\Plugin\views\display\Block->execute()
#45 /...//core/modules/views/src/Element/View.php(81): Drupal\views\ViewExecutable->executeDisplay()
#46 [internal function]: Drupal\views\Element\View::preRenderViewElement()
#47 /...//core/lib/Drupal/Core/Security/DoTrustedCallbackTrait.php(113): call_user_func_array()
#48 /...//core/lib/Drupal/Core/Render/Renderer.php(870): Drupal\Core\Render\Renderer->doTrustedCallback()
#49 /...//core/lib/Drupal/Core/Render/Renderer.php(432): Drupal\Core\Render\Renderer->doCallback()
#50 /...//core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#51 /...//core/lib/Drupal/Core/Template/TwigExtension.php(484): Drupal\Core\Render\Renderer->render()
#52 /...//sites/default/files/php/twig/67862c3a8fea6_viewfield-item.html.twig_K-GaYPZNWd_RyzYVAcCyBbYFE/jdIHjz7GsR44U3CXMdLcawygTY3-F3jzlkYV39vuJcE.php(94): Drupal\Core\Template\TwigExtension->escapeFilter()
#53 /var/www/vendor/twig/twig/src/Template.php(431): __TwigTemplate_2805eb420b5100c429475342ec366984->block_content()
#54 /...//sites/default/files/php/twig/67862c3a8fea6_viewfield-item.html.twig_K-GaYPZNWd_RyzYVAcCyBbYFE/jdIHjz7GsR44U3CXMdLcawygTY3-F3jzlkYV39vuJcE.php(77): Twig\Template->yieldBlock()
#55 /var/www/vendor/twig/twig/src/Template.php(387): __TwigTemplate_2805eb420b5100c429475342ec366984->doDisplay()
#56 /var/www/vendor/twig/twig/src/Template.php(343): Twig\Template->yield()
#57 /var/www/vendor/twig/twig/src/Template.php(358): Twig\Template->display()
#58 /var/www/vendor/twig/twig/src/TemplateWrapper.php(35): Twig\Template->render()
#59 /...//core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#60 /...//core/lib/Drupal/Core/Theme/ThemeManager.php(348): twig_render_template()
#61 /...//core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#62 /...//core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#63 /...//core/lib/Drupal/Core/Template/TwigExtension.php(484): Drupal\Core\Render\Renderer->render()
#64 /...//sites/default/files/php/twig/67862c3a8fea6_viewfield.html.twig_jbKm3zPYyIvhEMWL4zUWqEZyo/vNiMG7oVYamrdfqXrJ_KL-xTZwfetLbMnBVYbNa_niM.php(90): Drupal\Core\Template\TwigExtension->escapeFilter()
#65 /var/www/vendor/twig/twig/src/Template.php(387): __TwigTemplate_17ba97cd14306990d974735319171a51->doDisplay()
#66 /var/www/vendor/twig/twig/src/Template.php(343): Twig\Template->yield()
#67 /var/www/vendor/twig/twig/src/Template.php(358): Twig\Template->display()
#68 /var/www/vendor/twig/twig/src/TemplateWrapper.php(35): Twig\Template->render()
#69 /...//core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#70 /...//core/lib/Drupal/Core/Theme/ThemeManager.php(348): twig_render_template()
#71 /...//core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#72 /...//core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#73 /...//core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#74 /...//core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#75 /...//core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#76 /...//core/lib/Drupal/Core/Template/TwigExtension.php(484): Drupal\Core\Render\Renderer->render()
#77 /...//sites/default/files/php/twig/67862c3a8fea6_taxonomy-term.html.twig_w2ZB8F9Rtc_8FNFZ9b45l6QNr/ljPIUo-_dJ38wTy7D8NgQVja92-OCxR8uvX51_vLJk4.php(72): Drupal\Core\Template\TwigExtension->escapeFilter()
#78 /var/www/vendor/twig/twig/src/Template.php(387): __TwigTemplate_bd68ef3e5b521e89806a5a6eba79c513->doDisplay()
#79 /var/www/vendor/twig/twig/src/Template.php(343): Twig\Template->yield()
#80 /var/www/vendor/twig/twig/src/Template.php(358): Twig\Template->display()
#81 /var/www/vendor/twig/twig/src/TemplateWrapper.php(35): Twig\Template->render()
#82 /...//core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#83 /...//core/lib/Drupal/Core/Theme/ThemeManager.php(348): twig_render_template()
#84 /...//core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#85 /...//core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#86 /...//core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#87 /...//core/lib/Drupal/Core/Template/TwigExtension.php(484): Drupal\Core\Render\Renderer->render()
#88 /...//sites/default/files/php/twig/67862c3a8fea6_views-view.html.twig_5u1S5z1PtGibMgkaR-54XZmwm/n7LJrm2QMQXgG3j9XjavnYffRaRLZaSB8YqyCE4U4Z0.php(77): Drupal\Core\Template\TwigExtension->escapeFilter()
#89 /var/www/vendor/twig/twig/src/Template.php(387): __TwigTemplate_61e96a9b640aa9f1bda9458006520146->doDisplay()
#90 /var/www/vendor/twig/twig/src/Template.php(343): Twig\Template->yield()
#91 /var/www/vendor/twig/twig/src/Template.php(358): Twig\Template->display()
#92 /var/www/vendor/twig/twig/src/TemplateWrapper.php(35): Twig\Template->render()
#93 /...//core/themes/engines/twig/twig.engine(33): Twig\TemplateWrapper->render()
#94 /...//core/lib/Drupal/Core/Theme/ThemeManager.php(348): twig_render_template()
#95 /...//core/lib/Drupal/Core/Render/Renderer.php(491): Drupal\Core\Theme\ThemeManager->render()
#96 /...//core/lib/Drupal/Core/Render/Renderer.php(504): Drupal\Core\Render\Renderer->doRender()
#97 /...//core/lib/Drupal/Core/Render/Renderer.php(248): Drupal\Core\Render\Renderer->doRender()
#98 /...//core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(238): Drupal\Core\Render\Renderer->render()
#99 /...//core/lib/Drupal/Core/Render/Renderer.php(638): Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}()
#100 /...//core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(231): Drupal\Core\Render\Renderer->executeInRenderContext()
#101 /...//core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php(128): Drupal\Core\Render\MainContent\HtmlRenderer->prepare()
#102 /...//core/lib/Drupal/Core/EventSubscriber/MainContentViewSubscriber.php(90): Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse()
#103 [internal function]: Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray()
#104 /...//core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func()
#105 /var/www/vendor/symfony/http-kernel/HttpKernel.php(186): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch()
#106 /var/www/vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw()
#107 /...//core/lib/Drupal/Core/StackMiddleware/Session.php(53): Symfony\Component\HttpKernel\HttpKernel->handle()
#108 /...//core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(48): Drupal\Core\StackMiddleware\Session->handle()
#109 /...//core/lib/Drupal/Core/StackMiddleware/ContentLength.php(28): Drupal\Core\StackMiddleware\KernelPreHandle->handle()
#110 /...//core/modules/big_pipe/src/StackMiddleware/ContentLength.php(32): Drupal\Core\StackMiddleware\ContentLength->handle()
#111 /...//core/modules/page_cache/src/StackMiddleware/PageCache.php(116): Drupal\big_pipe\StackMiddleware\ContentLength->handle()
#112 /...//core/modules/page_cache/src/StackMiddleware/PageCache.php(90): Drupal\page_cache\StackMiddleware\PageCache->pass()
#113 /...//core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(48): Drupal\page_cache\StackMiddleware\PageCache->handle()
#114 /...//core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(51): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle()
#115 /...//core/lib/Drupal/Core/StackMiddleware/AjaxPageState.php(36): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle()
#116 /...//core/lib/Drupal/Core/StackMiddleware/StackedHttpKernel.php(51): Drupal\Core\StackMiddleware\AjaxPageState->handle()
#117 /...//core/lib/Drupal/Core/DrupalKernel.php(741): Drupal\Core\StackMiddleware\StackedHttpKernel->handle()
#118 /...//index.php(19): Drupal\Core\DrupalKernel->handle()
#119 {main}
🇦🇹Austria maxilein

Thank you! I will try this.

Production build 0.71.5 2024