Bug #81620

Linkhandler remove all attributes set in the link wizard and the template

Added by Kevin Appelt about 1 year ago. Updated 4 months ago.

Status:
Under Review
Priority:
Must have
Assignee:
-
Category:
Link Handling, Site Handling & Routing
Start date:
2017-06-19
Due date:
% Done:

0%

TYPO3 Version:
8
PHP Version:
7.0
Tags:
linkhandler, typolink
Complexity:
medium
Is Regression:
Sprint Focus:

Description

My configuration

I am using version TYPO3 CMS 8.7.1 and the linkhandler from core.

I have a template like this:

<f:link.typolink parameter="{link}" class="btn more">Mehr erfahren</f:link.typolink>

I have the following pageTsConfig:

TCEMAIN {
    linkHandler {
        tx_news {
            handler = TYPO3\CMS\Recordlist\LinkHandler\RecordLinkHandler
            label = News
            configuration {
                table = tx_news_domain_model_news
                hidePageTree = 0
            }
            scanAfter = page
        }
    }
}

And this typoscript:

config {
    recordLinks {
        tx_news {
            typolink {
                parameter = {$id.newsDetailPid}
                additionalParams.data = field:uid
                additionalParams.wrap = &tx_news_pi1[news]=|&tx_news_pi1[action]=detail&tx_news_pi1[controller]=news
                useCacheHash = 1
            }
        }
    }
}

{$id.newsDetailPid} is set as 22.

The scenario

Now i create a link with the link wizard to a page (uid: 30) with some extra attributes set

t3://page?uid=30 _blank "btn special" Testtitle google=bad

and get this:
<a href="/index.php?id=1&google=bad" title="Testtitle" target="_blank" class="btn special more">Mehr erfahren</a>

Now i create a link with the link wizard to a news record (uid:1) with the same extra attributes set
t3://record?identifier=tx_news&uid=1 _blank "btn special" Testtitle google=bad

and get this:
<a href="/index.php?id=22&tx_news_pi1%5Bnews%5D=1&amp;tx_news_pi1%5Baction%5D=detail&amp;tx_news_pi1%5Bcontroller%5D=news&amp;cHash=e68aca14db3f2e4bc194845e951acc11">Mehr erfahren</a>

The problem

If i use a link created with linkhandler all attributes get completly removed.
I think the problem is somewhere in the method typoLink in /typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php but i am not sure.

One way it works to add the classes - but it is not useful

To add the classes i have to set them in the `parameter` in the typoscript of the linkhandler.
But this is not what is needed, because there is no class for “link to news” but the tags may have classes like in the example.


Related issues

Related to TYPO3 Core - Bug #81903: DatabaseRecordLinkBuilder is ignoring other settings Resolved 2017-07-18
Related to TYPO3 Core - Bug #80896: TypolinkViewhelper with linkhandler ignores class attribute New 2017-04-19
Related to TYPO3 Core - Bug #84942: target _blank is beeing ignored on CType "images" with recordLinks New 2018-05-07

History

#1 Updated by Gerrit Code Review about 1 year ago

  • Status changed from New to Under Review

Patch set 1 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/53275

#2 Updated by Gerrit Code Review about 1 year ago

Patch set 2 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/53275

#3 Updated by Gerrit Code Review 12 months ago

Patch set 3 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/53275

#4 Updated by Gerrit Code Review 12 months ago

Patch set 4 for branch master of project Packages/TYPO3.CMS has been pushed to the review server.
It is available at https://review.typo3.org/53275

#5 Updated by Markus Klein 12 months ago

  • Complexity set to medium
  • Sprint Focus set to On Location Sprint

#6 Updated by Mathias Brodala 11 months ago

  • Duplicated by Bug #81903: DatabaseRecordLinkBuilder is ignoring other settings added

#7 Updated by Mathias Brodala 11 months ago

  • Duplicated by deleted (Bug #81903: DatabaseRecordLinkBuilder is ignoring other settings)

#8 Updated by Dennis Römmich 11 months ago

What should be the expected behavior if i have the following link within the RTE:

<a class="btn special" title="Testtitle" href="t3://record?identifier=tx_news&uid=1">convallis</a>

I think this behavior is not covered by the given patch in gerrit, isn't it?

#9 Updated by Anja Leichsenring 10 months ago

  • Sprint Focus deleted (On Location Sprint)

#10 Updated by Stefan Galinski 7 months ago

This is not a bug. Just a configuration issue.

Working example configuration:

config.recordLinks {
    pressRelease {
        forceLink = 0
        typolink {
            parameter = {$themes.pages.news.pressReleaseSingle}
            additionalParams = &tx_news_pi1[news]={field:uid}
            additionalParams.insertData = 1
            useCacheHash = 1

            ATagParams.data = parameters:allParams
            target.data = parameters:target
            title.data = parameters:title

            extTarget = _blank
            extTarget.override.data = parameters:target
        }
    }
}

#11 Updated by Francois Suter 5 months ago

The above is true for a link inside the RTE, but when coming from a TS configuration or a Fluid view helper, the ContentObjectRenderer class does not load the link parameters into the parameters member variable.

This is actually quite a touchy issue as several sources of information must be combined:
  1. the additional parameters of the link itself
  2. the ViewHelper or the TS configuration driving the rendering with its own parameters
  3. the "base" linkhandler TS configuration

The difficulty lies in defining how each "level" overrides the other. The "parameter" and "additionalParams" properties should be carefully preserved because they are calculated in \TYPO3\CMS\Frontend\Typolink\DatabaseRecordLinkBuilder::build().

I do not have a good answer for now...

#12 Updated by Christian Kuhn 5 months ago

  • Related to Bug #81903: DatabaseRecordLinkBuilder is ignoring other settings added

#13 Updated by Marc Hirdes 4 months ago

The Fluid Typolinkviewhelper adds a parameter string like

parameter = t3://record?identifier=tx_news&uid=1 _blank "btn special" Testtitle google=bad

The sysext/frontend/Classes/Typolink/DatabaseRecordLinkBuilder.php creates a parameter string like the following, if 15 is the page uid of the detail page

parameter = 15

So all other settings will be ignored. Usefull would be a merge of the settings in the DatabaseRecordLinkBuilder

$typoScriptConfiguration = $configuration[$configurationKey]['typolink.'];

        /** @var TypoLinkCodecService $typoLinkCodecService */
        $typoLinkCodecService = GeneralUtility::makeInstance(TypoLinkCodecService::class);
        $typoScriptConfiguration['parameter'] = $typoLinkCodecService->encode(
            array_merge(
                array_filter($typoLinkCodecService->decode($conf['parameter']), 'strlen'),
                array_filter($typoLinkCodecService->decode($typoScriptConfiguration['parameter']), 'strlen')
            )
        );

A fix in the core would be great.

#14 Updated by DANIEL Rémy 3 months ago

  • Related to Bug #80896: TypolinkViewhelper with linkhandler ignores class attribute added

#15 Updated by Elena Bartolotti about 1 month ago

  • Related to Bug #84942: target _blank is beeing ignored on CType "images" with recordLinks added

Also available in: Atom PDF