mw-cms/map-location-bundle

address bundle

Installs: 1

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Forks: 0

Type:symfony-bundle

pkg:composer/mw-cms/map-location-bundle

dev-main 2025-11-12 17:49 UTC

This package is not auto-updated.

Last update: 2025-11-12 20:05:40 UTC


README

Descriptif

test commit

Ce bundle est un module pour AW CMS Bundle. Il permet d'obtenir une gestion de magasin au sein du CMS. Grâce à ce bundle, vous allez être en mesure de :

  • Créer/modifier/supprimer des types de magasins (nom, description, slug unique)

  • Créer/modifier/supprimer des magasins (nom, description, informations supplémentaires, adresse, téléphone, fax, e-mail, latitude, longitude, images, type de magasin, slug unique).

  • Afficher une carte avec la liste des magasins sur une page

  • Afficher la liste des magasins sur une carte

Installation

AppKernel.php

public function registerBundles()
{
    $bundles = [
        //...
        new MapLocationBundle\MapLocationBundle(),
    ];
}

config.yml

aw_address:
    address:
        class: AppBundle\Entity\AddressCustom
        form: AppBundle\Form\AddressCustomType

routing.yml

aw_address:
    resource: "@MapLocationBundle/Controller"
    type:     annotation

Dossier AppBundle/Entity

Création d'un fichier AddressCustom.php

<?php

namespace AppBundle\Entity;

use MapLocationBundle\Entity\Address;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
use Fresh\DoctrineEnumBundle\Validator\Constraints as DoctrineAssert;
use Knp\DoctrineBehaviors\Model as ORMBehaviors;

/**
 * ItemCustom
 * @ORM\Table
 * @ORM\Entity(repositoryClass="AppBundle\Repository\AddressCustomRepository")
 */
class AddressCustom extends Address
{
    use ORMBehaviors\Translatable\Translatable;
}

Création d'un fichier AddressCustomTranslation.php

<?php

namespace AppBundle\Entity;

use MapLocationBundle\Entity\AddressTranslation;
use Doctrine\ORM\Mapping as ORM;
use Knp\DoctrineBehaviors\Model as ORMBehaviors;
use Symfony\Component\Validator\Constraints as Assert;
use Gedmo\Mapping\Annotation as Gedmo;

/**
 * @ORM\Entity
 * @ORM\Table
 */
class AddressCustomTranslation extends AddressTranslation
{

}

Dossier AppBundle/Form

Création d'un fichier AddressCustomType.php

<?php

namespace AppBundle\Form;

use MapLocationBundle\Form\AddressType;
use JMS\DiExtraBundle\Annotation\FormType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\OptionsResolver\OptionsResolver;
use AWCmsBundle\Form\Field\MoxiemanagerType;

/**
 * Class AddressCustomType
 *
 * @package AppBundle\Form
 * @FormType
 */
class AddressCustomType extends AddressType
{

    /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(
            [
                'data_class'         => 'AppBundle\Entity\AddressCustom',
                'csrf_protection'    => false,
                'translation_domain' => 'messages',
                'cascade_validation' => true,
            ]
        );
    }

    public function getName()
    {
        return 'address_custom_type';
    }

}

Dossier AppBundle/Repository

Création d'un fichier AddressCustomRepository.php

<?php

namespace AppBundle\Repository;

use MapLocationBundle\Repository\AddressRepository;

class AddressCustomRepository extends AddressRepository
{

}

Dossier AppBundle/Manager

Création d'un fichier AddressCustomManager.php

<?php

namespace AWCatalogBundle\Manager;

use AppBundle\Repository\AddressCustomRepository;
use MapLocationBundle\Manager\AddressManager;
use JMS\DiExtraBundle\Annotation\Service;

/**
 * Class AddressCustomManager
 * @Service("map_location.address_manager")
 */
class AddressCustomManager extends AddressManager
{
    /**
     * @var AddressCustomRepository
     */
    public $addressCustomRepository;

}

Personnalisation

Ajout de champs à l'entité Address et AddressType

Si vous souhaitez ajouter des champs à un magasin, vous pouvez le faire directement dans l'entité AddressCustom. Si les nouveaux champs doivent être traduits, vous devez ajouter ces champs dans l'entité AddressCustomTranslation. Après l'ajout de ces champs dans les entités concernées, vous devez ajouter ces champs dans le formulaire d'ajout/édition. Pour cela, vous devez modifier le fichier AddressCustomType.php dans le dossier "Form" de "AppBundle".

Exemple - ajout d'un champ "Directeur" dans le formulaire

<?php
//AppBundle\Form\AddressCustomType.php

     /**
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);
        $builder->add('director');

    }

Personnaliser la page détail d'un address

Si vous souhaitez modifier l'affichage par défaut de la page magasin, vous pouvez surcharger le template "@MapLocation/front/address.html.twig" en suivant la surchage de vue d'un bundle (cf doc symfony2).

Vous pouvez également surcharger ce template pour juste un site en lui appliquant un thème (custom_theme en base de données). Dans ce cas, vous devez créer l'arborescence de dossier suivante :

  • app
    • Resources
      • views
        • themes
          • nomducustomtheme
            • address
              • address.html.twig

Exemple de surcharge de la vue :

{% extends '@AWCms/layout_front.html.twig' %}

{% block content %}
    <div class="container">
        {% include '@AWCms/front/breadcrumb.html.twig' %}
    </div>

    <div class="address-locator-detail container">
        <div class="row">
            <div class="col-xs-12 detail-header">
                <div class="text-center">
                    <h1 class="text-center">{{ address.translate.name | upper }}</h1>
                    {{ address.translate.description| raw }}
                </div>
            </div>
        </div>

        <div class="row flex">
            <div class="col-xs-12 col-sm-6 detail-content flex">
                <div class="text-wrapper text-center ma">
                    <div>
                        <h5>Address</h5>
                        <p>{{ address.address }}</p>
                        {% if address.phone is not empty %}
                            <p>Tel. {{ address.phone }}</p>
                        {% endif %}
                        {% if address.fax is not empty %}
                            <p>Fax {{ address.fax }}</p>
                        {% endif %}
                        {% if address.email is not empty %}
                            <p>{{ address.email }}</p>
                        {% endif %}
                    </div>
                    <div>
                        {{ address.translate.informations | raw }}
                    </div>
                </div>
            </div>
            <div class="col-sm-6 hidden-xs detail-image">
                <div class="img-wrapper">
                    <img
                        class="img-cover"
                        src="{{ awedm_path(address.pictures[0].picture) }}"
                        alt="{{ address.translate.name }}"
                    />
                </div>
            </div>
        </div>

        <div class="row">
            <div class="col-xs-12 p0">
                <div
                    id='google-map'
                    class='map-container'
                    data-lat='{{ address.latitude }}'
                    data-lng='{{ address.longitude }}'>
                </div>
            </div>
        </div>
        {% include 'viewer/social-blocks.html.twig' %}

    </div>
{% endblock %}
{% block javascripts %}
    <script async defer src="https://maps.googleapis.com/maps/api/js?key={{ googleApiKey }}&callback=initMap"
            type="text/javascript"></script>
    {{ parent() }}

{% endblock %}

Personnaliser les élements du bundle

Si vous souhaitez modifier l'affichage par défaut des éléments du bundle, vous pouvez surcharger les templates "@MapLocation/viewer/address_list_element.html.twig" et "map_location_bundle:viewer:address_map_element.html.twig" en suivant la surchage de vue d'un bundle (cf doc symfony2).

Vous pouvez également surcharger ces templates pour juste un site en lui appliquant un thème (custom_theme en base de données). Dans ce cas, vous devez créer l'arborescence de dossier suivante :

  • app
    • Resources
      • views
        • themes
          • nomducustomtheme
            • elements
              • address_list_element.html.twig
              • back_address_list_element.html.twig
              • address_map_element.html.twig
              • back_address_map_element.html.twig

Commit