<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>Libre d'esprit &#187; plugin</title>
	<atom:link href="http://libre-d-esprit.thinking-days.net/tag/plugin/feed/" rel="self" type="application/rss+xml" />
	<link>http://libre-d-esprit.thinking-days.net</link>
	<description>Logiciels libres, joomla, talend, php, virtuemart, templates Joomla</description>
	<lastBuildDate>Sun, 21 Mar 2010 16:53:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Comment rendre VirtueMart plus souple &#8230;.</title>
		<link>http://libre-d-esprit.thinking-days.net/2009/01/comment-rendre-virtuemart-plus-souple/</link>
		<comments>http://libre-d-esprit.thinking-days.net/2009/01/comment-rendre-virtuemart-plus-souple/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 22:49:29 +0000</pubDate>
		<dc:creator>Antoine</dc:creator>
				<category><![CDATA[VirtueMart]]></category>
		<category><![CDATA[Joomla]]></category>
		<category><![CDATA[plugin]]></category>
		<guid isPermaLink="false">http://libre-d-esprit.thinking-days.net/?p=15</guid>
		<description><![CDATA[Lorsque je suis amené à travailler sur VirtueMart, solution libre de e-commerce basé sur le CMS Joomla, je suis contraint de modifier directement le code original afin de l&#8217;adapter à mes besoins.
Le code perd alors toute compatibilité avec la version communautaire.
En dehors de cela, en raison de cette absence de modularité, il est difficile d&#8217;échanger [...]]]></description>
			<content:encoded><![CDATA[<p>Lorsque je suis amené à travailler sur VirtueMart, solution libre de e-commerce basé sur le CMS Joomla, je suis contraint de modifier directement le code original afin de l&#8217;adapter à mes besoins.</p>
<p>Le code perd alors toute compatibilité avec la version communautaire.</p>
<p>En dehors de cela, en raison de cette absence de modularité, il est difficile d&#8217;échanger des modifications de Virtuemart à la communauté, sans passer par l&#8217;approbation de la communauté VirtueMart. La communauté perd ainsi en &laquo;&nbsp;dynamisme&nbsp;&raquo;.</p>
<p>En conséquence, j&#8217;ai émis une <a title="suggestion sur le forum officiel de VirtueMart" href="http://forum.virtuemart.net/index.php?topic=50956.0" target="_blank">suggestion sur le forum officiel de VirtueMart</a>.</p>
<p>Techniquement, le support de plugin sous VirtueMart ne me semble pas très difficile, la notion de plugin étant déjà présente sous Joomla.</p>
<p>Il faut tout d&#8217;abord commencer par créer un nouveau dossier de &laquo;&nbsp;plugin&nbsp;&raquo;. Pour cela, il suffit de rajouter un dossier &laquo;&nbsp;virtuemart&nbsp;&raquo; dans le répertoire &laquo;&nbsp;plugins&nbsp;&raquo; de Joomla.</p>
<p>Par la suite, il faut définir un ensemble d&#8217;événements durant lesquels les extensions pourront être déclenchées.</p>
<p>Je propose dans un premier temps (car j&#8217;aurai personnellement besoin de ces événements) :</p>
<ul>
<li>insertion de produits (onProductInsert),</li>
<li>modification de produits (onProductUpdate),</li>
<li>suppression de produits (onProductDelete),</li>
<li>insertion de catégories (onCategoryInsert),</li>
<li>modification de catégories (onCategoryUpdate),</li>
<li>suppression de catégories (onCategoryDelete),</li>
<li>passage de commande (onCheckoutProcessed).</li>
</ul>
<p>Une fois, les événements définies, il faut modifier le code source du composant Virtuemart, pour déclencher les événements des plugins aux moments opportuns.</p>
<p>Par exemple, pour déclencher l&#8217;événement &laquo;&nbsp;onCategoryInsert&nbsp;&raquo;, lors de la création d&#8217;une catégorie, il faut rajouter le code suivant dans la méthode &laquo;&nbsp;add&nbsp;&raquo; de la classe &laquo;&nbsp;ps_product_category&nbsp;&raquo;.</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<br />
<span style="color: #000088;">$vmLogger</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">info</span><span style="color: #009900;">&#40;</span> <br />
&nbsp; <span style="color: #000088;">$VM_LANG</span><span style="color: #339933;">-&gt;</span>_<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'VM_PRODUCT_CATEGORY_ADDED'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><br />
&nbsp; <span style="color: #0000ff;">': &quot;'</span><span style="color: #339933;">.</span>vmGet<span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'category_name'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;'</span> <br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">/* Ca commence */</span><br />
JPluginHelper<span style="color: #339933;">::</span><span style="color: #004000;">importPlugin</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'virtuemart'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$mainframe</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">triggerEvent</span><span style="color: #009900;">&#40;</span><br />
&nbsp; <span style="color: #0000ff;">'onCategoryInsert'</span><span style="color: #339933;">,</span> <br />
&nbsp; <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$category_id</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/* Ca termine */</span><br />
<br />
<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>En fait, la méthode importPlugin, a des fins d&#8217;optimisation devrait plutôt être chargée au démarrage du composant virtuemart, en front et en back office.</p>
<p>Ensuite, la création de plugins pour VirtueMart devient possible.</p>
<p>Évidemment, le plugin doit avoir pour &laquo;&nbsp;folder&nbsp;&raquo; ou &laquo;&nbsp;group&nbsp;&raquo; la valeur &laquo;&nbsp;virtuemart&nbsp;&raquo;.</p>
<p>Voici un exemple d&#8217;interception de l&#8217;insertion de catégories :</p>
<div class="codecolorer-container php dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #666666; font-style: italic;">// no direct access</span><br />
<a href="http://www.php.net/defined"><span style="color: #990000;">defined</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'_JEXEC'</span> <span style="color: #009900;">&#41;</span> or <a href="http://www.php.net/die"><span style="color: #990000;">die</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'Restricted access'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
jimport<span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'joomla.plugin.plugin'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #009933; font-style: italic;">/**<br />
* Generate a category tree for performance <br />
* optimization (skeleton of a future plugin)<br />
*<br />
*/</span><br />
<span style="color: #000000; font-weight: bold;">class</span> &nbsp;plgVirtuemartCategorytree <span style="color: #000000; font-weight: bold;">extends</span> JPlugin<br />
<span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">function</span> plgVirtuemartCategorytree<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span><span style="color: #000088;">$subject</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$subject</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; <span style="color: #000000; font-weight: bold;">function</span> onCategoryInsert<span style="color: #009900;">&#40;</span><span style="color: #000088;">$category_id</span><span style="color: #009900;">&#41;</span> &nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;h3&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$category_id</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/h3&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Ce plugin se content d&#8217;afficher l&#8217;identifiant de la catégorie insérée. Ce plugin, en l&#8217;état n&#8217;a bien entendu aucun intérêt. C&#8217;est juste une démonstration illustrant le fonctionnement des plugins.</p>
<p><strong>Si vous êtes intéressé par cette modification, merci d&#8217;appuyer ma demande sur<a title="forum virtuemart" href="http://forum.virtuemart.net/index.php?topic=50956.0" target="_blank"> le forum</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://libre-d-esprit.thinking-days.net/2009/01/comment-rendre-virtuemart-plus-souple/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
	</channel>
</rss>
