Giter VIP home page Giter VIP logo

Comments (9)

lukaszuznanski avatar lukaszuznanski commented on August 23, 2024

Hi,

we are currently using RECORDS for this kind of 'nested' rendering.

fields {
        content {
            fields {
                boxes = COA
                boxes {
                    stdWrap.innerWrap = [|]
                    10 = RECORDS
                    10 {
                        source.field = tx_extension_box_item
                        tables = tx_extension_box_item
                        conf.tx_extension_box_item.stdWrap.wrap = |###BREAK###
                    }
                    stdWrap.split {
                        token = ###BREAK###
                        cObjNum = 1 |*|2|*| 3
                        1.current = 1
                        1.stdWrap.wrap = |

                        2.current = 1
                        2.stdWrap.wrap = ,|

                        3.current = 1
                        3.stdWrap.wrap = |
                    }
                }
            }
        }
    }

then, tx_extension_box_item has it's own typoscript JSON template

I will add this example to documentation.

from headless.

schloram avatar schloram commented on August 23, 2024

But doesn't this also just output all the database tables?

from headless.

lukaszuznanski avatar lukaszuznanski commented on August 23, 2024

Why? I specify table, specify source field, and then i specify tx_extension_box_item in typoscript as JSON and render all required properties

from headless.

schloram avatar schloram commented on August 23, 2024

Thanks for your example.

But doesn't this also just output all the database tables?

Sorry I meant "columns" not "tables" :)

How do you "specify tx_extension_box_item in typoscript"? With tt_content.*?

I was especially thinking about a generic way of getting the fields of a table in a defined JSON structure without always using CONTENT/RECORDS with stdWrap.wrap, stdWrap.split and stdWrap.innerWrap.

For now I use the following for getting the pages (but it feels quite hacky):

fields {
    content {
        fields {
            pages = COA
            pages {
                stdWrap.innerWrap = [|]
                10 = CONTENT
                10 {
                    table = pages
                    select {
                        pidInList.field = pages
                        orderBy = sorting
                        recursive.field = recursive
                    }
                    renderObj =< lib.page
                    renderObj.stdWrap.wrap = |###BREAK###
                }

                stdWrap.split {
                    token = ###BREAK###
                    cObjNum = 1 |*|2|*| 3
                    1.current = 1
                    1.stdWrap.wrap = |

                    2.current = 1
                    2.stdWrap.wrap = ,|

                    3.current = 1
                    3.stdWrap.wrap = |
                }
            }
        }
    }
}

best,
RamΓ³n

from headless.

lukaszuznanski avatar lukaszuznanski commented on August 23, 2024

I specify tx_extension_box_item without tt_content as it's not tt_content

tx_extension_box_item =< lib.contentElement
tx_extension_box_item {
    fields {
        content {
            fields {
                header = TEXT
                header {
                    field = header
                }
                bodytext = TEXT
                bodytext {
                    field = bodytext
                    parseFunc =< lib.parseFunc_links
                }
                link = TEXT
                link {
                    field = link
                    typolink {
                        parameter {
                            field = link
                        }
                        returnLast = url
                    }
                }
            }
        }
    }
}

I agree that we should find some simpler way to render those nested properties

from headless.

schloram avatar schloram commented on August 23, 2024

Ah okay. This is what was confusing me :) Thanks for clearing it up. πŸ‘

What about a modified DatabaseQueryProcessor where you can additionally define fields to to map the JSON fields to database columns.

Something like:

fields {
    myRecords {
        dataProcessing {
            10 = FriendsOfTYPO3\Headless\DataProcessing\JsonRecordsProcessor
            10 {
                pidInList =
                recursive =
                selectFields =
                languageField =
                where = 
                ...

                # fields with stdWrap applied (without defining Content Object)
                fields {
                    myCustomLink {
                        field = link
                        typolink {
                            parameter {
                                field = link
                            }
                            returnLast = url
                        }
                    }

                    myCustomId.field = uid

                    myCustomText.field = bodytext
                }
            }
        }
    }
}

Output:

{
    "myRecords": [
        {
            "myCustomLink": "/target/page",
            "myCustomId": 2,
            "myCustomText": "my bodytext"
        },
        {...},
        {...}
    ]
}

Just an idea. :)

from headless.

lukaszuznanski avatar lukaszuznanski commented on August 23, 2024

Personally I like this idea, because actual solution is a bit tricky (I don't like this part with |###BREAK###), solution with DataProcessor looks much cleaner.

from headless.

schloram avatar schloram commented on August 23, 2024

Thanks for your feedback. I will open a PR for this issue soon.

from headless.

lukaszuznanski avatar lukaszuznanski commented on August 23, 2024

I think JsonRecordsProcessor is great idea. We should create one on upcoming sprint.

from headless.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.