{"id":283,"date":"2012-02-10T20:33:54","date_gmt":"2012-02-10T18:33:54","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=283"},"modified":"2013-07-24T21:09:56","modified_gmt":"2013-07-24T19:09:56","slug":"magento-creer-une-sauvegarde-des-versions-de-pages-cms","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2012\/02\/10\/magento-creer-une-sauvegarde-des-versions-de-pages-cms\/","title":{"rendered":"Magento : cr\u00e9er une sauvegarde des versions de pages cms"},"content":{"rendered":"<p>Un petit tip utile pour ce vendredi sur la plateforme Magento.<br \/>\nPar d\u00e9faut, la version community ne comporte pas de sauvegarde des modifications des pages CMS.<br \/>\nCette fonction peut cependant \u00eatre tr\u00e8s utile en cas d&rsquo;une erreur ou d&rsquo;une suppression intempestive d&rsquo;un contenu.<\/p>\n<p>Voici donc un petit tips pour rem\u00e9dier \u00e0 tout cela rapidement ( sans interface d&rsquo;administration pour l&rsquo;instant&#8230;, juste une sauvegarde de la base de donn\u00e9es).<\/p>\n<p>Nous allons commencer par cr\u00e9er un module magento que nous allons nommer \u00ab\u00a0CmsVersionning\u00a0\u00bb.<br \/>\nPour cet article celui-ci sera situ\u00e9 dans l&rsquo;arborescence  \u00ab\u00a0app\/local\/Hhennes\/CmsVersionning\/\u00a0\u00bb (\u00e0 adapter selon vos pr\u00e9f\u00e9rences)<\/p>\n<p>Nous commen\u00e7ons par le fichier xml de configuration du module \u00e0 placer dans app\/etc\/modules<\/p>\n<pre lang=\"xml\"> <?xml version=\"1.0\"?>\r\n<config>\r\n    <modules>\r\n        <Hhennes_CmsVersionning>\r\n            <active>true<\/active>\r\n            <codePool>local<\/codePool>\r\n        <\/Hhennes_CmsVersionning>\r\n    <\/modules>\r\n<\/config><\/pre>\n<p>Passons \u00e0 pr\u00e9sent au processus de cr\u00e9ation de ce module :<\/p>\n<p>Pour commencer nous allons cr\u00e9er le fichier de configuration.<br \/>\nDans  app\/local\/Hhennes\/CmsVersionning\/ cr\u00e9ez un dossier \u00ab\u00a0etc\u00a0\u00bb et dans celui-ci votre fichier \u00ab\u00a0config.xml\u00a0\u00bb avec le contenu suivant :<\/p>\n<pre lang=\"xml\"><?xml version=\"1.0\"?>\r\n<config>\r\n    <modules>\r\n        <Hhennes_CmsVersionning>\r\n            <version>1.0<\/version>\r\n        <\/Hhennes_CmsVersionning>\r\n    <\/modules>\r\n\t<global>\r\n\t\t<models>\r\n\t\t\t<CmsVersionning>\r\n\t\t\t<class>Hhennes_CmsVersionning_Model<\/class>\r\n\t\t\t<\/CmsVersionning>\r\n\t\t<\/models>        \r\n\t\t<events>\r\n            <cms_page_save_before>\r\n               <observers>\r\n                   <make_version>\r\n                       <type>singleton<\/type>\r\n                       <class>Hhennes_CmsVersionning_Model_Observer<\/class>\r\n                       <method>makePageVersion<\/method>    \r\n                  <\/make_version>    \r\n               <\/observers>    \r\n            <\/cms_page_save_before>    \r\n        <\/events>\r\n\t<\/global>\r\n<\/config><\/pre>\n<p>Analysons le contenu de ce fichier de configuration.<\/p>\n<p>Avant l&rsquo;enregistrement d&rsquo;une page cms, magento lance l&rsquo;\u00e9v\u00e9nement \u00ab\u00a0cms_page_save_before\u00a0\u00bb, \u00e0 ce moment la, nous r\u00e9cup\u00e9rons les informations de la page pour les enregistrer dans une table de la base de donn\u00e9es et ainsi les sauvegarder<br \/>\nvia la m\u00e9thode \u00ab\u00a0makePageVersion\u00a0\u00bb de la classe Hhennes_CmsVersionning_Model_Observer.<\/p>\n<p>Passons \u00e0 present au contenu du module.<\/p>\n<p>Pour commencer nous allons cr\u00e9er une table dans la base de donn\u00e9es pour enregistrer les informations des anciennes pages cms.<br \/>\nLes informations conserv\u00e9es \u00e9tant :<br \/>\n&#8211; L&rsquo;id de la page<br \/>\n&#8211; Son titre<br \/>\n&#8211; La balise Meta description<br \/>\n&#8211; La balise Meta Keywords<br \/>\n&#8211; l&rsquo;url r\u00e9\u00e9crite de la page<br \/>\n&#8211; le contenu de la page<br \/>\n&#8211; la date de cr\u00e9ation de la version<\/p>\n<p>Voici la requ\u00eate \u00e0 ex\u00e9cuter dans PhpMyAdmin<\/p>\n<pre lang=\"sql\">CREATE TABLE IF NOT EXISTS `mag_cms_page_versions` (\r\n  `page_version_id` int(11) NOT NULL auto_increment,\r\n  `page_id` int(11) NOT NULL,\r\n  `title` varchar(255) NOT NULL,\r\n  `meta_keywords` text NOT NULL,\r\n  `meta_description` text NOT NULL,\r\n  `identifier` varchar(255) NOT NULL,\r\n  `content` text NOT NULL,\r\n  `version_date` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,\r\n  PRIMARY KEY  (`page_version_id`)\r\n) ENGINE=MyISAM  DEFAULT CHARSET=latin1<\/pre>\n<p>Une fois la table cr\u00e9\u00e9, place maintenant \u00e0 l&rsquo;observer qui sera charg\u00e9 d&rsquo;enregistrer les donn\u00e9es dans cette table.<br \/>\nCr\u00e9ez un dossier \u00ab\u00a0Model\u00a0\u00bb et un fichier \u00ab\u00a0Observer.php\u00a0\u00bb dans le dossier de notre module.<\/p>\n<p>Voici le contenu de ce fichier :<\/p>\n<pre lang=\"php\"><?php\r\nclass Hhennes_CmsVersionning_Model_Observer {\r\n\r\n \/**\r\n *\u00a0 Page version observer\r\n *\u00a0 Avant chaque enregistrement d'une page, la version pr\u00e9c\u00e9dente est sauvegard\u00e9e\r\n *\/\r\n public function makePageVersion(Varien_Event_Observer $observer ) {\r\n\r\n \/\/R\u00e9cup\u00e9ration de l'objet \"Page\"\r\n $page = $observer->getEvent()->getObject();\r\n\r\n $write = Mage::getSingleton('core\/resource')->getConnection('core_write');\r\n\r\n $query = \"INSERT INTO mag_cms_page_versions (page_version_id,page_id,title,meta_keywords,meta_description,identifier,content) VALUES ('',?,?,?,?,?,?)\";\r\n\r\n \/\/Insertion des donn\u00e9es de sauvegardes dans la table cr\u00e9\u00e9e.\r\n $write->query($query,array($page->getPageId(),$page->getTitle(),$page->getMetaKeywords(),$page->getMetaDescription(),$page->getIdentifier(),$page->getContent()));\r\n\r\n }\r\n\r\n}\r\n\r\n?><\/pre>\n<p>Dans le d\u00e9tail, le fichier observer r\u00e9cup\u00e8re le contenu de la version enregistr\u00e9e et l&rsquo;ins\u00e8re dans notre base de donn\u00e9es.<br \/>\nLes changements de pages sont donc maintenant versionn\u00e9s.<\/p>\n<p>Ce module \u00e9tant r\u00e9ellement basique, il est possible de grandement l&rsquo;am\u00e9liorer en cr\u00e9ant une interface dans l&rsquo;adminstration, ou encore des possibilit\u00e9s de restaurations d&rsquo;anciennes versions.<br \/>\nPour cela&#8230; \u00e0 vos claviers \ud83d\ude09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un petit tip utile pour ce vendredi sur la plateforme Magento. Par d\u00e9faut, la version community ne comporte pas de sauvegarde des modifications des pages CMS. Cette fonction peut cependant \u00eatre tr\u00e8s utile en cas d&rsquo;une erreur ou d&rsquo;une suppression intempestive d&rsquo;un contenu. Voici donc un petit tips pour rem\u00e9dier \u00e0 tout cela rapidement ( [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[246,6],"tags":[110,150,212],"class_list":["post-283","post","type-post","status-publish","format-standard","hentry","category-magento-2","category-trucs-et-astuces","tag-cms","tag-magento","tag-module-magento"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=283"}],"version-history":[{"count":13,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/283\/revisions"}],"predecessor-version":[{"id":485,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/283\/revisions\/485"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}