privapark / map-location-bundle
address bundle
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Forks: 0
Type:symfony-bundle
pkg:composer/privapark/map-location-bundle
This package is not auto-updated.
Last update: 2025-11-12 22:14:01 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\TranslatableTrait;
}
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
- address
- nomducustomtheme
- themes
- views
- Resources
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
- elements
- nomducustomtheme
- themes
- views
- Resources
Commit