Search code examples
symfonysonata-admin

[sonataAdmin]: test the select imput value


I want to retrieve the value of select input and make the test on this value. If this value corresponds to what I am looking for in my case "freelance" I display a block if no I display another

this is my code:

 $emr = $this->modelManager->getEntityManager('PivotalBOBundle:Role');
    $queryr = $kernel->getContainer()->get('doctrine')->getRepository('PivotalBOBundle:Role')->findAll();

    $choises=array();

    foreach ($queryr as $res){
        $choises[$res->getRole()]=$res->getRole();
    }
->tab('Spécifique')
        ->with('Type d\'utilisateur', array('class' => 'col-md-12'))
        ->add('type', 'choice', array('label' => 'Type',
            'choices' => $choises))
        ->end()

->with('Freelancer', array('class' => 'col-md-12 Freelancer'))
        ->add('type', 'checkbox', array('required' => false, 'label' => 'Freelancer'))
        ->add('categories', 'sonata_type_model', array(
                "multiple" => true,
                'label' => 'Catégorie',
                'required' => true,
                'query' => $query))
            ->add('outilsEtTechnologie', 'sonata_type_model', array(
                'required' => false,
                "multiple" => true,
                'label' => 'Outils et Technologie'))
            ->add('niveauCompetences', 'sonata_type_collection', array(
                'required' => false,
                'label' => 'Niveau des compétences',
                'by_reference' => true), array(
                'edit' => 'inline',
                'inline' => 'table'
            ))
            ->add('niveauLangue', 'sonata_type_collection', array(
                'required' => false,
                'label' => 'Niveau des langues',
                'by_reference' => false), array(
                'edit' => 'inline',
                'inline' => 'table'
            ))
            ->add('formation', 'sonata_type_collection', array(
                'required' => false,
                'label' => 'Formations',
                'by_reference' => false), array(
                'edit' => 'inline',
                'inline' => 'table'
            ))
            ->add('mobilite', 'entity', array(
                'class' => 'Pivotal\BOBundle\Entity\Mobilite',
                'required' => true,
                'label' => 'Mobilite'
            ))
            ->add('frequence', 'entity', array(
                'class' => 'Pivotal\BOBundle\Entity\Frequence',
                'required' => true,
                'label' => 'Frequence'
            ))
            ->add('niveauExperience', 'entity', array(
                'class' => 'Pivotal\BOBundle\Entity\NiveauExperience',
                'required' => true,
                'label' => 'Niveau Experience'))
            ->add('missionetranger', 'entity', array(
                'class' => 'Pivotal\BOBundle\Entity\Missionetranger',
                'required' => true,
                'label' => 'Mission Etranger'))
            ->add('note', null, array('label' => 'Note'))
        ->end()
        ->with('Jobowner ', array('class' => 'col-md-12 Jobowner'))
        ->add('type', 'checkbox', array('required' => false, 'label' => 'Jobowner'))
        ->add('societe', 'entity', array(
                'class' => 'Pivotal\BOBundle\Entity\Societe',
                'property' => 'nom',
                'label' => 'Societe',
                'required' => false,
            ))
        ->end();

this is an image of my render the case 1

and this is my objectif :

the freelancer option

the jobowner option


Solution

  • to do this we should use a java script code like this :

    ->tab('Spécifique')
            ->with('Type d\'utilisateur', array('class' => 'col-md-12'))
            ->add('type', 'choice', array('label' => 'Type',
                'choices' => $choises))
            ->end()
            ->with('Freelancer', array('class' => 'col-md-12 userFreelancer'))
            ->add('categories', 'sonata_type_model', array(
                    "multiple" => true,
                    'label' => 'Catégorie',
                    'required' => true,
                    'query' => $query))
                ->add('outilsEtTechnologie', 'sonata_type_model', array(
                    'required' => false,
                    "multiple" => true,
                    'label' => 'Outils et Technologie'))
                ->add('niveauCompetences', 'sonata_type_collection', array(
                    'required' => false,
                    'label' => 'Niveau des compétences',
                    'by_reference' => true), array(
                    'edit' => 'inline',
                    'inline' => 'table'
                ))
                ->add('niveauLangue', 'sonata_type_collection', array(
                    'required' => false,
                    'label' => 'Niveau des langues',
                    'by_reference' => false), array(
                    'edit' => 'inline',
                    'inline' => 'table'
                ))
                ->add('formation', 'sonata_type_collection', array(
                    'required' => false,
                    'label' => 'Formations',
                    'by_reference' => false), array(
                    'edit' => 'inline',
                    'inline' => 'table'
                ))
                ->add('mobilite', 'entity', array(
                    'class' => 'Pivotal\BOBundle\Entity\Mobilite',
                    'required' => true,
                    'label' => 'Mobilite'
                ))
                ->add('frequence', 'entity', array(
                    'class' => 'Pivotal\BOBundle\Entity\Frequence',
                    'required' => true,
                    'label' => 'Frequence'
                ))
                ->add('niveauExperience', 'entity', array(
                    'class' => 'Pivotal\BOBundle\Entity\NiveauExperience',
                    'required' => true,
                    'label' => 'Niveau Experience'))
                ->add('missionetranger', 'entity', array(
                    'class' => 'Pivotal\BOBundle\Entity\Missionetranger',
                    'required' => true,
                    'label' => 'Mission Etranger'))
                ->add('note', null, array('label' => 'Note'))
            ->end();
    
            $formMapper->with('Societe', array('class' => 'col-md-12 Societe'))
                ->add('societe', 'entity', array(
                    'class' => 'Pivotal\BOBundle\Entity\Societe',
                    'property' => 'nom',
                    'label' => 'Societe',
                    'required' => false,
                ))
    
            ->end()
            ->end();
    

    and we should overide the template like that :

     public function getTemplate($name)
        {
            if ($name == "edit") {
                return 'admin/edit.html.twig';
            }
            return parent::getTemplate($name);
        }
    

    and add a javascript code in edit.html.twig :

    <script type="text/javascript">
    
        $(document).ready(function () {
            var type = $("#{{ admin.uniqId }}_type");
            var freelancer = $(".userFreelancer");
            var jobowner = $(".userJobowner");
            var redacteur = $(".userRedacteur");
            var Supperjobowner = $(".userSupperjobowner");
            var Nactif = $(".userNactif");
            var Societe = $(".Societe");
            hideUserBlock()
            type.change(function () {
                displayUserBlock();
            }); // Bind the function to displayBlock
            type.change(); // Manual trigger to display block.
    
    
            function displayUserBlock() {
                hideUserBlock();
                var type =$("#{{ admin.uniqId }}_type").val()
                switch(type) {
                    case 'Freelancer':
                        freelancer.css("display", "block");
                        freelancer.trigger("create");
                        break;
                    case 'Jobowner':
                        Societe.css("display", "block");
                        Societe.trigger("create");
                        break;
                    case 'Super Jobowner':
                        Societe.css("display", "block");
                        Societe.trigger("create");
                        break;
                    case 'Jobowner non actif':
                        Societe.css("display", "block");
                        Societe.trigger("create");
                        break;
                    case 'Rédacteur':
                        Societe.css("display", "block");
                        Societe.trigger("create");
                        break;
                }
    
            }
    
            function hideUserBlock() {
                freelancer.css("display", "none");
                freelancer.trigger("create");
                Societe.css("display", "none");
                Societe.trigger("create");
            }
    
        });
    
    </script>