0

Web サイトでは、さまざまなレコードがティーザーとして出力されます。各レコードは、1 つ以上のカテゴリに割り当てられます。ティーザーでは、それぞれのレコードに割り当てられたすべてのカテゴリのタイトルが表示されます。

私は sys_category と sys_category_record_mm で JOIN を介して tt_content のデータベース クエリをリンクしたタイポスクリプト (下記参照) でこれを試しました。

ただし、複数のカテゴリが割り当てられているレコードの場合、対応するティーザーが複数回、つまりカテゴリごとに 1 回出力されます。

体液:

<f:if condition="{data.tx_mask_cnt_mag_teaser_records}">
    <f:for each="{data.tx_mask_cnt_mag_teaser_records}" as="data_item">
        <f:cObject typoscriptObjectPath="lib.magteaser" data="{dsuid: data_item.uid, recid: data_item.records, reclimit: 2, tstype: 1, syscats: data.tx_mask_cnt_mag_teaser_cats}" />
    </f:for>
</f:if>

タイポスクリプト:

lib.magteaser = COA
lib.magteaser {

    wrap = |

    5 = LOAD_REGISTER
    5 {
        dTstype.data = field:tstype  // Different Teaser-Types
        dSyscats.data = field:syscats  // List of all categories to consider
    }

    10 = CONTENT
    10 {
        table = tt_content
        select {
            pidInList = 13  // Folder in which the records are stored
            uidInList.data = field:recid
            recursive = 2

            selectFields.dataWrap = *, FIND_IN_SET(`tt_content`.`uid`,'{field:recid}') AS reclist_sortby
            join = sys_category_record_mm ON (sys_category_record_mm.uid_foreign = tt_content.uid) JOIN sys_category ON (sys_category_record_mm.uid_local = sys_category.uid)

            where = tt_content.hidden=0
            where = tt_content.CType='mask_cnt_textpic_uni'

            where.data = field:syscats
            # where.intval = 1
            where.wrap = sys_category_record_mm.uid_local IN (|)

            orderBy = reclist_sortby
        }

        renderObj = COA
        renderObj {

            5 = LOAD_REGISTER
            5 {
                # Count variable for a CASE (see below) to format the first data record differently from the remaining data records.
                dsCounter.stdWrap.dataWrap = {register:dsCounter} + 1
                dsCounter.prioriCalc = intval
            }

            10 = CASE
            10 {
                key.data = register:dTstype

                default = COA
                default {
                    wrap = <div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xl-6 magteaser-std">|</div>
                    [...]
                }

                # 1 Titelbild und 2 Standard-Teaser
                1 = COA
                1 {
                    wrap = <div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xl-6 magteaser-std">|</div>
                    [...]
                }

                # 1 Top-Teaser und 2 Standard-Teaser
                2 = COA
                2 {

                    10 = CASE
                    10 {
                        key.data = register:dsCounter

                        # Standard-Teaser
                        default = COA
                        default {
                            wrap = <div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xl-6 magteaser-std">|</div>

                            10 = TEXT
                            10 {
                                wrap = Kategorie (def): |
                                value.dataWrap = {field:title}
                            }

                            [...]

                        }

                        # Top-Teaser
                        1 = COA
                        1 {
                            wrap = <div class="col-12 magteaser-top">|</div>

                            10 = TEXT
                            10 {
                                wrap = Kategorie (1): |
                                value.dataWrap = {field:title}
                            }

                            [...]

                        }

                    }

                }

            }

        }

    }

}

問題を解決する方法についてのヒントはありますか? ご協力いただきありがとうございます。

Typo3 V.9.5.8

4

1 に答える 1