简体   繁体   中英

Typo3: page link in menu using value from custom record

I have :

  • a 3 level menu
  • custom records from a table called "tx_products_domain_model_product"
  • products have a field called "url_alias"

On any page on that menu, I can have a product record. For pages that have a product record I want the link to look like:

http://www.sitedomain.com/<url_alias>

Can this be done with typoscript?

EDIT

It looks like it's too complex to do all this with typoscript, so I'm using a userFunc. I'm checking if there is a product record with a shop ID and want to return that shop id. If not, return the current menu page UID. The problem is, how can I pass the menu page UID as parameter to the userFunc?

class user_productsOnCurrentPage
{
    function main( $content, $conf )
    {
        if ( TYPO3_MODE !== 'FE' )
        {
            return FALSE;
        }

        $product = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow(
                'shop_id', 'tx_products_domain_model_product', 'pid=' . $conf['currentPageId'] . ' AND deleted=0 AND hidden=0' );

        if ( is_array( $product ) && ! empty( $product ['shop_id'] ) )
        {
            return $product ['shop_id'];
        }

        return $conf['currentPageId'];
    }
}

The menu:

lib.mainMenu = HMENU
lib.mainMenu {
    ...
    1 = TMENU
    1 {
        ...
        NO = 1
        NO {
            ...
            # show direct url for external links
            doNotLinkIt = 1
            stdWrap.cObject = CASE
            stdWrap.cObject {
                key.field = doktype
                default = TEXT
                default {
                    field = nav_title // title

                    typolink.parameter.cObject = USER
                    typolink.parameter.cObject {
                        userFunc = user_productsOnCurrentPage->main
                        currentPageId = ?????
                    }

                    typolink.wrap = |<span><strong></strong></span>
                    typolink.ATagBeforeWrap = 1
                    stdWrap.htmlSpecialChars = 1
                }
                ...

I could access the page ID directly in the user function:

TypoScript:

typolink.userFunc = user_mcfazabosOnCurrentPage->main

PHP:

$pageId = $this->cObj->getFieldVal( 'uid' );

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM