A l'heure des smart-phone et autre jouets pour adultes, la carte de visite papier a prit un coups de vieux. En effet aujourd'hui nous confions de plus en plus facilement les informations de contact à nos téléphone et ordinateur. Pourquoi garder des milliers de papier quand tout peut-être stocké dans un téléphone et facilement accéssible. Du coup je me suis posé la question comment générer une carte à la volée quand on me le demande sur mon site ?
Le code que je vais présenter correspond au code utilisé sur ce site pour télécharger une carte de visite dans la section about me
Pour commencer j'ai créé un objet Author qui va me permettre de stocker les informations que je veux transmettre dans ma carte.
#Entity/Author.php
class Author
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;/**
* @var string $name
*
* @ORM\Column(name="name", type="string", length=255)
*/
private $name;/**
* @var string $firstname
*
* @ORM\Column(name="firstname", type="string", length=255)
*/
private $firstname;
/**
* @var string $title
*
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
/**
* @var text $description
*
* @ORM\Column(name="description", type="text")
*/
private $description;/**
* @var string $mail
*
* @ORM\Column(name="mail", type="string", length=255)
*/
private $mail;/**
* @var string $firstname
*
* @ORM\Column(name="phone", type="string", length=255)
*/
private $phone;}
Une fois cette classe tapé un appel à la commande :
./app/console doctrine:generate:entities YourBundle:Author
Cela permettra de construire les getter et les setter.
Maintenant il s'agit de construire la chaine de caractère qui va permettre de remplir une vcard, un petit tour sous wikipedia pour connaitre la construction d'une vcard et l'on peut rajouter dans la classe Author.php
/**
* Get the vcard of the contact
*/
public function getVcard(){
return sprintf(
"BEGIN:VCARD
VERSION:3.0
N:%s;%s;;;
FN:%s %s
TITLE:%s
TEL;TYPE=CELL,VOICE: %s
TEL;TYPE=HOME,VOICE:%s
EMAIL;TYPE=PREF,INTERNET:%s
REV:20080424T195243Z
END:VCARD", $this->getName(), $this->getFirstName(),
$this->getFirstName(), $this->getName(),
$this->getTitle(),
$this->getPhone(),
$this->getPhone(),
$this->getMail());
}
Cela étant fait on peut obtenir assez facilement le texte avec le fonction getVcard()
Maintenant il faut coder un controller capable de forcer le téléchargement de notre carte, pour cela le code suivant devrait faire l'affaire :
/**
* Vcard controller.
*
* @Route("/vcard")
*/
class VcardController extends Controller
{
/**
* @Route("/about",defaults={"_format"="vcf"}, name="show_vcard")
*
*/
public function showAboutAction()
{
$author = $this
->getDoctrine()
->getRepository('FabfotoGalleryBundle:Author')
->findOneBy(array());
$response = new Response();
$response->setStatusCode(200);
$response->headers->set('Content-Type','text/x-vcard');
$response->headers->set('Content-Disposition', 'attachment;filename="FGcard.vcf"');
$response->setContent($author->getVcard());
return $response;
}
}
Une fois que l'utilisateur utilisera cette route un téléchargement de la carte commencera.
Attention toutefois dans le textes des vcard tous les espaces doivent être remplacé par des point virgules. Sans ça votre vcard ne sera pas lisible.
Une fois votre vcard, vous pouvez très bien encodé le contenue de la VCard dans un QRCode et l'insérér sur une carte papier. Cela permettra de faire un transfert d'information très facile entre le smartphone et le papier. Pour avoir une idée du résultat allez voir la section about me ou cliquez directement sur Ma carte
: Symfony2 PHP | Fabien GARCIA | Crée le : 19/03/2012 | Mise à jour : 25/04/2012
Les promesses en javascript c'est bien, et si on en profite pour parler de Ken et Barbie c'est mieux non ?
Fabien GARCIA |April 19th, 2013 | | Tags : Javascript node.js CoffeeScript
RequireJs fait partie de ces outils que j'ai d'abord détesté avant d'adorer, retour d'expérience
Fabien GARCIA |January 26th, 2013 | | Tags : HTML Développement Javascript CoffeeScript