sonata-project / SonataAdminBundle

The missing Symfony Admin Generator
https://docs.sonata-project.org/projects/SonataAdminBundle
MIT License
2.11k stars 1.26k forks source link

Rebuild template layer #8117

Open wbloszyk opened 1 year ago

wbloszyk commented 1 year ago

Feature Request

Current system have one template (AdminLTE2) and it is depends of some bundle config. This solution is hard to keep BC becouse depends of so many third part packages.

Now all templates are taken from sonata.admin.global_template_registry. Some sonata_admin.options should be move there. Also templateRegistry should be moved to pool. This solution will make templates replaceable without BC break.

From this:

sonata_admin:
    options:
        skin: 'skin-black'
        use_select2: true
        use_icheck: true
        use_bootlint: false
        use_stickyforms: true

    templates:
        user_block: '@SonataAdmin/Core/user_block.html.twig'
        ....
        knp_menu_template: '@SonataAdmin/Menu/sonata_menu.html.twig'
        form_theme: []
        filter_theme: []

To this:

sonata_admin:
    default_template: adminlte2
    templates:
        adminlte2:
            user_block: '@SonataAdmin/Core/user_block.html.twig'
            ....
            knp_menu_template: '@SonataAdmin/Menu/sonata_menu.html.twig'
            form_theme: []
            filter_theme: []
            options:
                skin: 'skin-black'
                use_select2: true
                use_icheck: true
                use_bootlint: false
                use_stickyforms: true
        bootstrap5: # adminLTE3, tabler, or any otherr
            user_block: '@JonDoeAdmin/Core/user_block.html.twig'
            ....
            knp_menu_template: '@JonDoeAdmin/Menu/sonata_menu.html.twig'
            form_theme: []
            filter_theme: []
            options:
                skin: 'black'
        another_custom_template:
            ....
core23 commented 1 year ago

Not sure if I understand your idea correctly, but what about making the admin bundle extendable?

For example the SonataAdminBundle only provides a basic theme (e.g. latest bootstrap version). And if you want to use some other theme like AdminLTE2 you could use something like SonataAdminLTE2Theme. The basic theme should also not contain any options.

I know this would mean an other more library to maintain but that might solve some issues and reduces the overall project artifact size.

I'm also not sure how to provide features that require code on the template side, like options you pass from the PHP component to the template to change some theme specific code like this:

https://github.com/sonata-project/SonataAdminBundle/blob/eed8f63a1ca73d9440dddfce2cceb81cf71575de/src/Mapper/BaseGroupedMapper.php#L83-L85

wbloszyk commented 1 year ago

Think about sonata.admin.global_template_registry as a sonata.admin.adminlte2_template_registry. From tamplate pool you can take any added template (adminLte2, adminLte3, bootstrap4, bootstrap5 ...) as sonata.admin.global_template_registry alias. It means you can deprecate adminLTE2 in favor of other template in next major release.

Now template options (or templates config). We can check them by validating when adding template registry to pool. In this case we can force templates creator to add options like box_class to them templates. Also they will be able to add extra config depends of them template.

matik955 commented 1 year ago

Hi, any news on this?

wbloszyk commented 1 year ago

Hi, any news on this?

Hi @matik955. For do it in the best way for all sonata bundles (and my own projects) i had to check all of them. SonataAdminBundle have own template_registry system, SonataPageBundle haven't. Also using SonataAdminBundle to generate template system for own project is bad idea. So the best option will be move it to twig-components or create new bundle.

SonataAdminBundle have also some bad solutions for that. like copy template_registry which should be extended istead:

https://github.com/sonata-project/SonataAdminBundle/blob/5.x/src/DependencyInjection/Compiler/AddDependencyCallsCompilerPass.php#L505-L517

To sum up, I am starting work on a new, independent template system that will enable defining a list of templates, their options and allowing them to be extended. After that we can add it to SonatAdminBundle 4.x as secondary template system. I should finish it this month, but I'm working after hours, so it's better to assume by the end of the year.

toooni commented 6 months ago

HI @wbloszyk Any news here? I am at a point where I'd like to write our own templates (if possible by using tailwind). Since these changes would affect these plans, I wanted to know if a financial incentive would help. We would be interested in paying you for your time on this feature. If you are interested, what is the ETA and the cost for this implementation?

wbloszyk commented 6 months ago

Hi @toooni I suspended contributing some time ago, becouse I open my own company and now I focus on two big project. Back to this issue, I should have some PR and notes. I can check it. Of course a financial incentive will be greate reason to finnaly done this but mybe even better will be help with new frontend. Please send me email with contact (whatsapp will be greate). IMO better will be talk about it.

github-actions[bot] commented 1 week ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

sarim commented 1 week ago

please keep it open good bot.