<?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"
	>

<channel>
	<title>Webmaster Bulletin</title>
	<atom:link href="http://www.webmasterbulletin.net/feed" rel="self" type="application/rss+xml" />
	<link>http://www.webmasterbulletin.net</link>
	<description>Rambling around the web publishing industry</description>
	<pubDate>Tue, 06 Jan 2009 14:35:36 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
	<language>en</language>
			<item>
		<title>Kaltura releases All-in-One Video Module for Drupal / Wordpress</title>
		<link>http://www.webmasterbulletin.net/2009/01/kaltura-releases-all-in-one-video-module-for-drupal-wordpress/588</link>
		<comments>http://www.webmasterbulletin.net/2009/01/kaltura-releases-all-in-one-video-module-for-drupal-wordpress/588#comments</comments>
		<pubDate>Mon, 05 Jan 2009 08:58:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=588</guid>
		<description><![CDATA[
Kaltura, the platform that brought open source to video and enabled groups to edit and collaborate with online video, has released a video module for the open source Drupal CMS. Kaltura&#8217;s platform includes an easily customizable set of widgets that seamlessly integrate into video applications on web platforms of any kind. Publishers can deploy existing [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-592" title="kaltura-sandbox" src="http://www.webmasterbulletin.net/wp-content/uploads/2009/01/kaltura-sandbox.jpg" alt="" width="500" height="261" /></p>
<p>Kaltura, the platform that brought open source to video and enabled groups to edit and collaborate with online video, has released a video module for the open source Drupal CMS. Kaltura&#8217;s platform includes an easily customizable set of widgets that seamlessly integrate into video applications on web platforms of any kind. Publishers can deploy existing widgets and apps or take advantage of Kaltura&#8217;s open architecture in order to develop new ones. Whether you need a basic online video platform or one with a robust set of advanced features – Kaltura has a solution for you. Our open framework provides everything you need to design, develop, and deploy rapid and cost-effective video applications on any site.<br />
<span id="more-588"></span><br />
The module for Drupal adds 4 content types nodes :</p>
<ul>
<li> A Kaltura Media Node is a simple method for creating and displaying rich media (Video, Audio or Image). It allows upload from local computer and supports almost all video and audio formats, as well as recording directly from webcam. In addition it supports easy import of all rich media (video, audio, pictures&#8230;) from other sites and social networks, such as YouTube, MySpace, Flickr, CCMixter, Jamendo, New York Public Library, any URL on the web etc</li>
<li>A Kaltura Media Remix (image above) is an intuitive way to create a mashup of rich-media. Similar to the Kaltura Media Node, a Remix allows upload and import of rich media, but adds the power of online video editing. Each Media Remix encapsulates a &#8220;Remix&#8221; button linking to a simple to use online video editor that supports trimming videos, transitions, effects, sound-tracks, remixing, reordering videos, overlays, and collaborative editing</li>
<li>Page  / Story with video</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2009/01/kaltura-releases-all-in-one-video-module-for-drupal-wordpress/588/feed</wfw:commentRss>
		</item>
		<item>
		<title>Generic Data save with Zend Framework</title>
		<link>http://www.webmasterbulletin.net/2009/01/generic-data-save-with-zend-framework/583</link>
		<comments>http://www.webmasterbulletin.net/2009/01/generic-data-save-with-zend-framework/583#comments</comments>
		<pubDate>Sun, 04 Jan 2009 13:32:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Technologies]]></category>

		<category><![CDATA[Web Applications]]></category>

		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=583</guid>
		<description><![CDATA[This technical article hilights one the famous ideal goal we all want to achieve : scaffolding, CRUD, BREAD, call it what you want, all we want is to get rid of repetitive sql query writing.  Zend framework provides powerful data abstraction  and here are a few tips to use Zend_DB_Table to its best. Of course [...]]]></description>
			<content:encoded><![CDATA[<p>This technical article hilights one the famous ideal goal we all want to achieve : scaffolding, CRUD, BREAD, call it what you want, all we want is to get rid of repetitive sql query writing.  Zend framework provides powerful data abstraction  and here are a few tips to use <a href="http://framework.zend.com/manual/en/zend.db.html" target="_blank">Zend_DB_Table</a> to its best. Of course this article assumes you have an idea of MVC development with Zend Framework. </p>
<p><strong>Why are we doing this ? </strong>in the course of writing ajax actions, we needed our controller to react to any POST provided by specific forms : whatever the fields in the form, we want them to be saved to our table. Code below is a specific implementation of a controller that responds to specific ajax queries. Please bear in mind that it is only provided as an example of generic query action. Other protions of code are not optimal, such as viewless actions in the renderAjax method, not the best.</p>
<p><strong>Controller Implementation</strong></p>
<p>Our controller is a simple Zend_Controller_Action. We load the database model at init time, and specify the primary key  (node parameter) in a class variable. Note that our data model is also stored in a class variable.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> UserController <span class="kw2">extends</span> Zend_Controller_Action</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">function</span> init<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">session</span> = <span class="kw2">new</span> Zend_Session_Namespace<span class="br0">&#40;</span><span class="st0">&#8216;User&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="co1">// &nbsp;$this-&gt;view-&gt;translate = Zend_Registry::get(&#8217;Zend_Translate&#8217;);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">require_once</span> <span class="st0">&#8216;models/Users.php&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">data</span>=<span class="kw2">new</span> Users<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">node</span> = <span class="re0">$this</span>-&gt;<span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me1">getParam</span><span class="br0">&#40;</span>node<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WXC_Log::<a href="http://www.php.net/log"><span class="kw3">log</span></a><span class="br0">&#40;</span><span class="st0">&quot;init node : &quot;</span> . <span class="re0">$this</span>-&gt;<span class="me1">node</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><strong>Quick look at the model</strong></p>
<p>at this stage I specify on particular function I like to implement in Zend Framework Models : the primary key ! Other functions of the model could include add, delete and update : we&#8217;ll see below that our generic data admin prefers to do the job in the controller.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Users <span class="kw2">extends</span> Zend_Db_Table_Abstract &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; protected <span class="re0">$_name</span> = <span class="st0">&#8216;users&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">public</span> <span class="kw2">function</span> primaryKey<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$info</span> = <span class="re0">$this</span>-&gt;<span class="me1">info</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$info</span><span class="br0">&#91;</span>primary<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><strong>Back to the crontroller :</strong> the renderAjax method is a quick one that stops the view from being rendered. If you are a specialist of Zend Framework you will notice that this can be better performed with the  <a href="http://framework.zend.com/manual/en/zend.controller.actionhelpers.html">contextSwitch </a> action helper. Use the code below only for testing, for production you&#8217;d rather spend a few minutes learning about helpers !</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> renderAjax<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;_helper-&gt;<span class="me1">layout</span>-&gt;<span class="me1">disableLayout</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; </div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$this</span>-&gt;_helper-&gt;<span class="me1">viewRenderer</span>-&gt;<span class="me1">setNoRender</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><strong>Action !</strong></p>
<p>Listing records is the first thing you want to look for when working at data scaffolding. the code below reads metadata from the table, lists all columns from your table, fetches data and returns them as JSON (ready for extjs grid display, by the way).</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">function</span> listAction<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$this</span>-&gt;<span class="me1">renderAjax</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw2">null</span> === <span class="re0">$select</span><span class="br0">&#41;</span> &nbsp; &nbsp;<span class="re0">$select</span> = <span class="re0">$this</span>-&gt;<span class="me1">data</span>-&gt;<span class="me1">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re0">$thRowSet</span> = <span class="re0">$this</span>-&gt;<span class="me1">data</span>-&gt;<span class="me1">fetchAll</span><span class="br0">&#40;</span> <span class="re0">$this</span>-&gt;<span class="me1">data</span>-&gt;<span class="me1">select</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$nodes</span>=<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$arrMeta</span>=<span class="re0">$this</span>-&gt;<span class="me1">data</span>-&gt;<span class="me1">info</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$arrCols</span>=<span class="re0">$arrMeta</span><span class="br0">&#91;</span>cols<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re0">$thRowSet</span> <span class="kw1">as</span> <span class="re0">$row</span> <span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$arr_node</span>=<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$arrCols</span> <span class="kw1">as</span> &nbsp;<span class="re0">$v</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$arr_node</span><span class="br0">&#91;</span><span class="re0">$v</span><span class="br0">&#93;</span>=<span class="re0">$row</span>-&gt;<span class="re0">$v</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$nodes</span><span class="br0">&#91;</span><span class="br0">&#93;</span>=<span class="re0">$arr_node</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> Zend_Json::<span class="me2">encode</span><span class="br0">&#40;</span> <span class="re0">$nodes</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>The next step would be to add records : we have not worked on this yet so you&#8217;ll want to try this with tables that have  a few records in them. The method below works with two types of data sets.</p>
<ol>
<li>Multiple column form submit :this would be the classical response to a from submission, where each field bears the NAME of the database field, and obvisouly the value is the data. Such forms are transmitted via FORM array with key / value pairs. We read the POST (getRequest->getParam) that match metadata built from the database table column array. We then provide a clean arrData array of new data for the update() method of our <a href="http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.update">Zend_Db_Table</a> instanciation. This method takes two arguments: the first is the associative array mapping columns to change to new values to assign to these columns. The second is the where clause that we built from the primary key</li>
<li>Single column  submit : the technique is useful when working with extjs in place editing, where one piece of code can edit multiple fields. The field variable contains the database column name and the value is the data. We add a check that matches the field against database table column names</li>
</ol>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">function</span> saveAction<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$this</span>-&gt;<span class="me1">renderAjax</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; </div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$id</span>= <span class="re0">$this</span>-&gt;<span class="me1">node</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$key</span> = <span class="re0">$this</span>-&gt;<span class="me1">data</span>-&gt;<span class="me1">primaryKey</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$strWhere</span> = <span class="re0">$key</span>. <span class="st0">&#8216;=&#8217;</span> &nbsp;. <span class="re0">$id</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$arrMeta</span>=<span class="re0">$this</span>-&gt;<span class="me1">data</span>-&gt;<span class="me1">info</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// all columns submit</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$arrCols</span>=<span class="re0">$arrMeta</span><span class="br0">&#91;</span>cols<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$arrData</span>=<a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span>; </div>
</li>
<li class="li1">
<div class="de1"><a href="http://www.php.net/reset"><span class="kw3">reset</span></a><span class="br0">&#40;</span><span class="re0">$arrCols</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">while</span> <span class="br0">&#40;</span><a href="http://www.php.net/list"><span class="kw3">list</span></a><span class="br0">&#40;</span><span class="re0">$k</span>,<span class="re0">$v</span><span class="br0">&#41;</span>=<a href="http://www.php.net/each"><span class="kw3">each</span></a><span class="br0">&#40;</span><span class="re0">$arrCols</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$v</span>!=<span class="st0">&quot;parent_id&quot;</span> &nbsp;&amp;&amp; <span class="re0">$v</span>!= <span class="re0">$this</span>-&gt;<span class="me1">data</span>-&gt;<span class="me1">primaryKey</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &amp;&amp; <a href="http://www.php.net/array_key_exists"><span class="kw3">array_key_exists</span></a><span class="br0">&#40;</span><span class="re0">$v</span>, <span class="re0">$this</span>-&gt;<span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me1">getParams</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$arrData</span><span class="br0">&#91;</span><span class="re0">$v</span><span class="br0">&#93;</span>=<span class="re0">$this</span>-&gt;<span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me1">getParam</span><span class="br0">&#40;</span><span class="re0">$v</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li2">
<div class="de2"><span class="co1">//single column submit via field/ value&nbsp;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me1">getParam</span><span class="br0">&#40;</span><span class="st0">&#8216;field&#8217;</span><span class="br0">&#41;</span>!=<span class="st0">&quot;&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span><span class="re0">$field</span> = <span class="re0">$this</span>-&gt;<span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me1">getParam</span><span class="br0">&#40;</span><span class="st0">&#8216;field&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$value</span>= <span class="re0">$this</span>-&gt;<span class="me1">getRequest</span><span class="br0">&#40;</span><span class="br0">&#41;</span>-&gt;<span class="me1">getParam</span><span class="br0">&#40;</span><span class="st0">&#8216;value&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$arrData</span><span class="br0">&#91;</span><span class="re0">$field</span><span class="br0">&#93;</span> =<span class="re0">$value</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/is_array"><span class="kw3">is_array</span></a><span class="br0">&#40;</span><span class="re0">$arrData</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; try<span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp;<span class="re0">$this</span>-&gt;<span class="me1">data</span>-&gt;<span class="me1">update</span><span class="br0">&#40;</span><span class="re0">$arrData</span>,<span class="re0">$strWhere</span><span class="br0">&#41;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="nu0">1</span>;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; catch<span class="br0">&#40;</span>Zend_Exception <span class="re0">$e</span><span class="br0">&#41;</span><span class="br0">&#123;</span> &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="nu0">0</span>;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span> <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>A good start for extjs development : Hope this is useful for you !!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2009/01/generic-data-save-with-zend-framework/583/feed</wfw:commentRss>
		</item>
		<item>
		<title>Ajax webmail on your server</title>
		<link>http://www.webmasterbulletin.net/2009/01/ajax-webmail-php/580</link>
		<comments>http://www.webmasterbulletin.net/2009/01/ajax-webmail-php/580#comments</comments>
		<pubDate>Fri, 02 Jan 2009 12:13:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web Applications]]></category>

		<category><![CDATA[email]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=580</guid>
		<description><![CDATA[
For maniacs who have not yet switched their mail operations to the ever growing gmail storage offer, a few opensource web based email players will provide efficient ajax webmail operations. Choosing between IMAP and POP3 shouldn&#8217;t be a problem but bear in mind the basic difference between them : IMAP stores emails on the mail [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-581" title="webmailbiucentral500" src="http://www.webmasterbulletin.net/wp-content/uploads/2009/01/webmailbiucentral500.png" alt="" width="500" height="306" /></p>
<p>For maniacs who have not yet switched their mail operations to the ever growing gmail storage offer, a few opensource web based email players will provide efficient ajax webmail operations. Choosing between IMAP and POP3 shouldn&#8217;t be a problem but bear in mind the basic difference between them : IMAP stores emails on the mail server while POP3 needs the client to perform this. As a result you will find it harder to implement POP3 storage from the client perspective, and this is why it took a long time for companies such as AfterLOgic to release their client. <a href="http://www.afterlogic.com/products/webmail-lite" target="_blank">WebMail Lite</a> is a very efficient web client that comes opensource with multiple templates and complete source code. In its time we reviewed <a href="http://roundcube.net/" target="_blank">RoundCube</a>, that only works with IMAP. Same for new player <a href="http://www.biucentrax.com/en/mail_center/home.php" target="_blank">biuCentrax Mail Center</a>, image above, that demosntrates extjs library integration. Of course, for non ajax playing you can count on the old but reliable Horde framework IMP client.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2009/01/ajax-webmail-php/580/feed</wfw:commentRss>
		</item>
		<item>
		<title>Prestashop : How to setup thumbnail / combination link</title>
		<link>http://www.webmasterbulletin.net/2008/12/prestashop-how-to-setup-thumbnail-combination-link/570</link>
		<comments>http://www.webmasterbulletin.net/2008/12/prestashop-how-to-setup-thumbnail-combination-link/570#comments</comments>
		<pubDate>Tue, 23 Dec 2008 13:42:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[E commerce]]></category>

		<category><![CDATA[Web Applications]]></category>

		<category><![CDATA[prestashop]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=570</guid>
		<description><![CDATA[The ability to make mulitple products out on one for size, color or other speicifications, is a great feature of Prestashop, but on small display trick is missing. Prestashop&#8217;s default template (v1.1) includes the automatic resizing of multiple images for a product. It also allows the administrator / editor to specify one of the product [...]]]></description>
			<content:encoded><![CDATA[<p>The ability to make mulitple products out on one for size, color or other speicifications, is a great feature of Prestashop, but on small display trick is missing. Prestashop&#8217;s default template (v1.1) includes the automatic resizing of multiple images for a product. It also allows the administrator / editor to specify one of the product images for each combination. As a result, the front end display of the product will let the combination select box interact with the mbig image display : here we explain how to modify the product template to let the thumbnail click act onthe combination choice.</p>
<p><span id="more-570"></span></p>
<p><strong>For jquery experts only !</strong></p>
<p>the first hing to know with prestashop front end is that the nice functions your customer experiences each times he pays a visit to your shop are all implmented via jquery calls. Jquery is a nice and very efficient library  but it is  a little difficult to understand when looked over by someone who has not been involved in the development. Everything here happens in your theme javascript folder, in the product.js file.</p>
<p>First thing to do is deactivate the link on the thumbnail : this cannot be done by removing the url because it used for hover effect that displays the big image. We only want to stop the popup from popping and replace the click action by an option change : just remove the THICKBOX class attribute (line 209 of a 1.1 product template page). the trick then is to add a javascript handler on the click event :</p>
<p>onclick=&#8221;setCombination{$image.id_image}();return false;&#8221;</p>
<p>we declare here on function per image id. A cleaner way to do this would be to builld an array instead of multiple functions. Please go ahead and send us the code.</p>
<p><strong>Very specific functions !</strong></p>
<p>the code below does the job of changing the selcet value when the thumbnail is clicked. Please note this is done with static variables names and WILL NOT WORK on your prestashop theme and product combinations : modify the group_4 reference (check the gnerated product page for select box identifyer)</p>
<p><a href="http://prayandcomfort.co.uk/10-pray-and-comfort-kneepads.html" target="_blank"><strong>DEMO </strong>: on prayandcomfort religious product shop</a> (created by&#8230; the <a title="website ecommerce brittany" href="http://www.poleouest.com" target="_blank"><strong>usual suspect</strong></a>).</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="kw1">foreach</span> from=<span class="re0">$combinations</span> <a href="http://www.php.net/key"><span class="kw3">key</span></a>=idCombination item=combination<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">function</span> setCombination<span class="br0">&#123;</span><span class="re0">$combination</span>.id_image<span class="br0">&#125;</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>literal<span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span>&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span>/literal<span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> chosenSelection = <span class="br0">&#123;</span><span class="re0">$combination</span>.<a href="http://www.php.net/list"><span class="kw3">list</span></a><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> idChosen = <span class="br0">&#123;</span><span class="re0">$idCombination</span>|intval<span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>literal<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#group_4&quot;</span><span class="br0">&#41;</span>.val<span class="br0">&#40;</span>chosenSelection<span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//$(&quot;#group_4&quot;).trigger(&#8217;change&#8217;);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#8216;#idCombination&#8217;</span><span class="br0">&#41;</span>.val<span class="br0">&#40;</span>idChosen<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>&nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>/literal<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>/<span class="kw1">foreach</span><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2008/12/prestashop-how-to-setup-thumbnail-combination-link/570/feed</wfw:commentRss>
		</item>
		<item>
		<title>How to install magento free themes</title>
		<link>http://www.webmasterbulletin.net/2008/12/how-to-install-magento-free-themes/564</link>
		<comments>http://www.webmasterbulletin.net/2008/12/how-to-install-magento-free-themes/564#comments</comments>
		<pubDate>Mon, 22 Dec 2008 22:17:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[E commerce]]></category>

		<category><![CDATA[magento]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=564</guid>
		<description><![CDATA[Well you&#8217;ve finally decided you&#8217;re going to switch to Magento for building ecommerce website. While new versions of Magento coming up regularly make the learning curve easier to climb, be prepared for at least a few days before you can use magento&#8217;s features to its best. This article explains the few tricks and tips that [...]]]></description>
			<content:encoded><![CDATA[<p>Well you&#8217;ve finally decided you&#8217;re going to switch to Magento for building ecommerce website. While new versions of Magento coming up regularly make the learning curve easier to climb, be prepared for at least a few days before you can use magento&#8217;s features to its best. This article explains the few tricks and tips that will start you off with variations on the basic design of magento&#8217;s default installation.</p>
<p><span id="more-564"></span>The first thing to do after you&#8217;ve installed Magento is to check out the files in skin/frontend/default : you won&#8217;t find much here except the stylesheet and a few images. This is the directory of your frontend but you should read carefully the concepts behind Magento&#8217;s <a href="http://www.magentocommerce.com/design_guide/articles/magento-design-terminologies4">implementation of design and layout.</a> Much more complex than the usual single folder theme system one can find in wordpress for instance, Magento&#8217;s design process works with four types of instances :</p>
<ul class="disc">
<li id="term-layouts" style="margin-bottom: 6px;"><strong>Layout</strong> ( <code>app/design/frontend/your_interface/your_theme/<strong>layout</strong>/</code>)<br />
These are basic XML files that define block structure for different pages as well as control META information and page encoding.For in-depth look into layouts, read <a href="http://www.magentocommerce.com/design_guide/articles/intro-to-layouts">Intro to Layouts</a>)</li>
<li id="term-templates" style="margin-bottom: 6px;"><strong>Templates</strong> (located in <code>app/design/frontend/your_interface/your_theme/<strong>template</strong>/</code>)<br />
These are PHTML files that contain (X)HTML markups and any necessary PHP  tags to create logic for visual presentation.</li>
<li id="term-templates" style="margin-bottom: 6px;"><strong>Locale</strong> (located in <code>app/design/frontend/your_interface/your_theme/<strong>locale</strong>/</code>)<br />
Theses are simple text documents organized on a per language basis that contain translations for store copy.</li>
<li id="term-skins" style="margin-bottom: 6px;"><strong>Skins</strong> (located in <code>skin/frontend/your_interface/your_theme/</code>)<br />
These are block-specific Javascript and CSS and image files that compliment your (X)HTML.</li>
</ul>
<p>This article covers only the installation of a free theme, that can be found under<a href="http://www.magentocommerce.com/magento-connect/list"> the community section of the Magento Connect pages</a>. Get the extension key (an url) of the thme you&#8217;like to try and type that in your own extension manager that Magento provides in the backend ( admin / system / Magento Connect / Magento Connect Manager). The first installation of any extension might look frightening because the manager will perform all sorts of necessary upgrades and dependencies to your installation or extension (in that case, a theme). Version 1.1.8 on xampp did the job right but I remember being put off on previous versions after a failed extension download. Once you&#8217;ve see the green screen messages rolling down like a Unix console you&#8217;ll be delighted to be greeted by a nice success message &#8220;<em>Procedure completed. Please check the output frame for useful information and refresh the page to see changes.</em>&#8221;</p>
<p>Once you&#8217;ve passed the 2 minutes that the procedure above requires, go back to the admin and follow the simple instructions to change your theme, as described in<a href="http://www.magentocommerce.com/design_guide/articles/working-with-magento-themes"> Magento&#8217;s design guide</a>. Go to System/ Configuration / Design and type the name of your theme under the theme section : save, job done.</p>
<p><strong>Be naughty : try another extension</strong> ! This nice and quick experience took me to other extensions such as the french language pack : I was happily suprised to find out that the installation of this extension automatically turns the whole shop to french. Reversing to english was then as easy as going back to the  admin / system / configuration / general / local options / locale setting. Of course that only impacts magento &#8217;s front end setting : the back end language can be switched any time from the language select in the admin footer.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2008/12/how-to-install-magento-free-themes/564/feed</wfw:commentRss>
		</item>
		<item>
		<title>host videos with ostube</title>
		<link>http://www.webmasterbulletin.net/2008/12/host-videos-with-ostube/562</link>
		<comments>http://www.webmasterbulletin.net/2008/12/host-videos-with-ostube/562#comments</comments>
		<pubDate>Fri, 19 Dec 2008 17:52:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=562</guid>
		<description><![CDATA[(Press release) we are pleased to announce the availability of osTube 2.3!

Our core development team for the osTube 2.x branch again did an amazing job and brought over 150 enhancements and bugfixes to the framework. Moreover, the database and their queries were optimized so that the performance of database queries could be significantly increased (up [...]]]></description>
			<content:encoded><![CDATA[<p>(Press release) we are pleased to announce the availability of<a href="http://www.webmasterbulletin.net/2008/11/ostube-mcms-for-everyone/483"> osTube 2.3!<br />
</a><br />
Our core development team for the osTube 2.x branch again did an amazing job and brought over 150 enhancements and bugfixes to the framework. Moreover, the database and their queries were optimized so that the performance of database queries could be significantly increased (up to 150%, depending on the queries).</p>
<p>And the very best: Our flash developers finished the new media player so that we could bundle it with the current release. The new player is now widescreen (16:9), faster (ActionScript3 code) and has a lot of new settings that you can play with. All osTube Professional (Plus) Edition owners will be happy to hear that all video ad&#8217;s are now fully integrated directly into the player and that external websites (when embedded) will also show the advertisements.</p>
<p>As you know, AUVICA introduced a daily forum support since version 2.0 in 2007. This year AUVICA has sponsored a new core developer that will take care of the future updates in the next years. His name is Andreas and you will see him around here or in the forum once in a while.</p>
<p>Andreas will also take care of regular minor updates where needed.</p>
<p>The most important enhancements for 2.3 are:</p>
<p>• Easy updater for osTube versions 2.0, 2.1 and 2.2<br />
• Brand-New ViMP Mediaplayer in widescreen (16:9) with even more options<br />
• Sidebar integration for related or further media directly in the media player<br />
• &#8220;Lights off&#8221;-Mode that will automatically darken the browser window when watching videos<br />
• Google Maps Support to geotag media and users<br />
• Optimized Rich-Text-Editor for description fields<br />
• Easy Google analytics integration from within the admin panel<br />
• Database and SQL Query optimizations<br />
• Refined template structure to add custom layout<br />
• Thumbnails are optimized<br />
• plus over 150 smaller enhancements and bugfixes</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2008/12/host-videos-with-ostube/562/feed</wfw:commentRss>
		</item>
		<item>
		<title>Alain Coadou, artist in Brittany</title>
		<link>http://www.webmasterbulletin.net/2008/12/alain-coadou-artist-in-brittany/556</link>
		<comments>http://www.webmasterbulletin.net/2008/12/alain-coadou-artist-in-brittany/556#comments</comments>
		<pubDate>Thu, 18 Dec 2008 15:16:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Design showcase]]></category>

		<category><![CDATA[Image Galleries]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=556</guid>
		<description><![CDATA[Alain Coadou is a water colour artist who works in the old village of Locronan, in the west of Brittany. Designed by PoleOuest,  his portfolio implements Silverstripe content management framework along with our own modified jquery gallery module.

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alaincoadou.fr">Alain Coadou</a> is a water colour artist who works in the old village of Locronan, in the west of Brittany. Designed by <a href="http://www.poleouest.com">PoleOuest</a>,  his portfolio implements Silverstripe content management framework along with our own modified <a href="http://www.webmasterbulletin.net/2008/09/silverstripe-gallery-jquery-module/307">jquery gallery </a>module.<br />
<a href="http://www.alaincoadou.fr"><img class="aligncenter size-medium wp-image-557" title="home" src="http://www.webmasterbulletin.net/wp-content/uploads/2008/12/home-500x421.jpg" alt="" width="500" height="421" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2008/12/alain-coadou-artist-in-brittany/556/feed</wfw:commentRss>
		</item>
		<item>
		<title>Silverstripe : tinymce improvements for image handling</title>
		<link>http://www.webmasterbulletin.net/2008/12/silverstripe-tinymce-improvements-for-image-handling/547</link>
		<comments>http://www.webmasterbulletin.net/2008/12/silverstripe-tinymce-improvements-for-image-handling/547#comments</comments>
		<pubDate>Mon, 15 Dec 2008 14:12:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Image]]></category>

		<category><![CDATA[Web Components]]></category>

		<category><![CDATA[silverstripe]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=547</guid>
		<description><![CDATA[The image button on the tinymce instance of silverstripe html text fields is really nice and well layed out : it gives editors one of the best text / image integration, with a minimum user actions that&#8217;s both powerful, intuitive, and reactive thanks to AJAX calls to the folder structure.
One small drawback is that it [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-548" title="ss-imageinsert" src="http://www.webmasterbulletin.net/wp-content/uploads/2008/12/ss-imageinsert.jpg" alt="" width="208" height="428" />The image button on the tinymce instance of silverstripe html text fields is really nice and well layed out : it gives editors one of the best text / image integration, with a minimum user actions that&#8217;s both powerful, intuitive, and reactive thanks to AJAX calls to the folder structure.</p>
<p>One small drawback is that it comes with one small feature that can be annoying at times, especially when you&#8217;re looking for inserting images without resampling them, especially for transparent images or tight image integration / quality that Silverstripe resampling functions (PHP based) cannot match (check out the <a href="http://www.silverstripe.com/site-builders-forum/flat/9740?showPost=168909" target="_blank">original image hack</a>).</p>
<p><strong>Image size limit feature</strong></p>
<p>In silverstripe, when you select a big image, width and height are automatically resized to a maximum of 600 pixels. Quick hackers might want to deactivate this feature by commenting the resize algorithm in cms/code/ThumbnailStripField.php (lines 73/80 of 2.3 rc2).</p>
<p>But for those who want the best of both worlds (enjoy limitation AND allow original size), here is a hack that will allow editors to choose between the limited image size (max 600, very useful for huge uploads straight from high definition camera) and the original size (very useful for reasonable image size, like example here of 800). Next trick would be to allow editor to type in width and height with automatic calculation of the image proportion. We&#8217;re getting closer to photoshop indeed.</p>
<p><span id="more-547"></span></p>
<p><strong>Usage </strong>: check or uncheck &#8216;OriginalDimension&#8217; <strong>BEFORE </strong>image selection. Please comment below or in the<a href="http://www.silverstripe.com/extending-hacking-silverstripe-forum/flat/250592?showPost=250592" target="_blank"> dedicated thread on Silverstripe forum</a>.</p>
<p><strong>Hack for silverstripe 2.3rc2 </strong>:</p>
<ul>
<li>\sapphire\forms\HtmlEditorField.php:438<br />
add new checkboxfield :</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">new</span> CheckboxField<span class="br0">&#40;</span>_t<span class="br0">&#40;</span><span class="st0">&#8216;HtmlEditorField.ORIGINALIMAGEDIMENSIONS&#8217;</span>, <span class="st0">&#8216;OriginalDimensions&#8217;</span><span class="br0">&#41;</span>,  <span class="st0">&#8216;OriginalDimensions&#8217;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
</li>
<li>cms\code\ThumbnailStripField.php:72<br />
add original size in class attribute of the image</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$originalWidth</span>=<span class="st0">&#8216;,originalwidth=&#8217;</span> . <a href="http://www.php.net/round"><span class="kw3">round</span></a><span class="br0">&#40;</span><span class="re0">$width</span><span class="br0">&#41;</span> . <span class="st0">&#8216;,originalheight=&#8217;</span> . <a href="http://www.php.net/round"><span class="kw3">round</span></a><span class="br0">&#40;</span><span class="re0">$height</span><span class="br0">&#41;</span> . <span class="st0">&#8221;</span>;</div>
</li>
</ol>
</div>
<p>and at line 84</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="st0">&#8216;&lt;img class=&quot;destwidth=&#8217;</span> . <a href="http://www.php.net/round"><span class="kw3">round</span></a><span class="br0">&#40;</span><span class="re0">$width</span><span class="br0">&#41;</span> . <span class="st0">&#8216;,destheight=&#8217;</span> . <a href="http://www.php.net/round"><span class="kw3">round</span></a><span class="br0">&#40;</span><span class="re0">$height</span><span class="br0">&#41;</span> . <span class="re0">$originalWidth</span> .  <span class="st0">&#8216;&quot; src=&quot;&#8217;</span>. <span class="re0">$thumbnail</span>-&gt;<span class="me1">URL</span> . <span class="st0">&#8216;?r=&#8217;</span> . <a href="http://www.php.net/rand"><span class="kw3">rand</span></a><span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">100000</span><span class="br0">&#41;</span> . <span class="st0">&#8216;&quot; alt=&quot;&#8217;</span> . <span class="re0">$image</span>-&gt;<span class="me1">Title</span> . <span class="st0">&#8216;&quot; title=&quot;&#8217;</span> . <span class="re0">$image</span>-&gt;<span class="me1">Title</span> .   <span class="st0">&#8216;&quot; /&gt;&#8217;</span></div>
</li>
</ol>
</div>
</li>
<li>jsparty\tiny_mce_improvements.js:440<br />
test checkbox before entering image width and height</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&#8216;Form_EditorToolbarImageForm_OriginalDimensions&#8217;</span><span class="br0">&#41;</span>.checked<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;Form_EditorToolbarImageForm_Width&#8217;</span><span class="br0">&#41;</span>.value = imgTag.className.match<span class="br0">&#40;</span>/originalwidth=<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="nu0">-9</span>.\-<span class="br0">&#93;</span>+<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#91;</span>, <span class="br0">&#93;</span>|$<span class="br0">&#41;</span>/<span class="br0">&#41;</span> ? RegExp.$<span class="nu0">1</span> : <span class="kw2">null</span>;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;Form_EditorToolbarImageForm_Height&#8217;</span><span class="br0">&#41;</span>.value = imgTag.className.match<span class="br0">&#40;</span>/originalheight=<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="nu0">-9</span>.\-<span class="br0">&#93;</span>+<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#91;</span>, <span class="br0">&#93;</span>|$<span class="br0">&#41;</span>/<span class="br0">&#41;</span> ? RegExp.$<span class="nu0">1</span> : <span class="kw2">null</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;Form_EditorToolbarImageForm_Width&#8217;</span><span class="br0">&#41;</span>.value = imgTag.className.match<span class="br0">&#40;</span>/destwidth=<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="nu0">-9</span>.\-<span class="br0">&#93;</span>+<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#91;</span>, <span class="br0">&#93;</span>|$<span class="br0">&#41;</span>/<span class="br0">&#41;</span> ? RegExp.$<span class="nu0">1</span> : <span class="kw2">null</span>;&lt;/li&gt;</div>
</li>
<li class="li2">
<div class="de2">&lt;/ul&gt;</div>
</li>
<li class="li1">
<div class="de1">$<span class="br0">&#40;</span><span class="st0">&#8216;Form_EditorToolbarImageForm_Height&#8217;</span><span class="br0">&#41;</span>.value = imgTag.className.match<span class="br0">&#40;</span>/destheight=<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="nu0">-9</span>.\-<span class="br0">&#93;</span>+<span class="br0">&#41;</span><span class="br0">&#40;</span><span class="br0">&#91;</span>, <span class="br0">&#93;</span>|$<span class="br0">&#41;</span>/<span class="br0">&#41;</span> ? RegExp.$<span class="nu0">1</span> : <span class="kw2">null</span>; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p><strong>GOOD LUCK AND LET US KNOW HOW IT GOES FOR YOU !!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2008/12/silverstripe-tinymce-improvements-for-image-handling/547/feed</wfw:commentRss>
		</item>
		<item>
		<title>100 best Content management solutions</title>
		<link>http://www.webmasterbulletin.net/2008/12/100-best-content-management-solutions/542</link>
		<comments>http://www.webmasterbulletin.net/2008/12/100-best-content-management-solutions/542#comments</comments>
		<pubDate>Sun, 14 Dec 2008 18:29:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Content Management]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=542</guid>
		<description><![CDATA[EcontentMag, onlinep publication that reviews content management software, has just issued the result of the eighth annual EContent 100, a list of companies that matter most in a digital content industry that involves many domains : Classification &#38; Taxonomy, Collaboration, Content Commerce, Content Creation-Production- and Digital Publishing, Content Delivery, Content Management, Content Security, Fee-Based Info [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.econtentmag.com/Articles/Editorial/Feature/2008-2009-EContent-100-List-51609.htm" target="_blank">EcontentMag</a>, onlinep publication that reviews content management software, has just issued the result of <span id="ctl00_ContentPlaceHolder1_Body1">the <strong>eighth annual EContent 100</strong>, a list of companies that matter most in a digital content industry that involves many domains : </span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Classification &amp; Taxonomy, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Collaboration, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Content Commerce, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Content Creation-Production- and Digital Publishing,</strong></span><span id="ctl00_ContentPlaceHolder1_Body1"> </span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Content Delivery, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Content Management, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Content Security, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Fee-Based Info Services, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Intranets &amp; Portals, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Mobile Content, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Search Engines &amp; Technologies, </strong></span><span id="ctl00_ContentPlaceHolder1_Body2"><strong>Social Media. </strong></span><span id="ctl00_ContentPlaceHolder1_Body1">The 12 categories that structure this yearly competition illustrate the complexity of an industry that&#8217;s slowly  growing to the age of adulthood : opensource and proprietary </span><span id="ctl00_ContentPlaceHolder1_Body1">solutions compete in a universe where even the low wage workers of India are quickly switching to western standards. The global economic crisis will certainly highlight the difficulty to maintain costly and complex solutions while simple, efficient and often free solutions will prove stronger as ever. By the way, Worpress 2.7 is out !!<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2008/12/100-best-content-management-solutions/542/feed</wfw:commentRss>
		</item>
		<item>
		<title>Magic toolbox Zoom, magnify, thumbnail : how to convert opensource</title>
		<link>http://www.webmasterbulletin.net/2008/12/magic-toolbox-zoom-magnify-thumbnail-how-to-convert-opensource/537</link>
		<comments>http://www.webmasterbulletin.net/2008/12/magic-toolbox-zoom-magnify-thumbnail-how-to-convert-opensource/537#comments</comments>
		<pubDate>Tue, 09 Dec 2008 20:52:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Web Applications]]></category>

		<guid isPermaLink="false">http://www.webmasterbulletin.net/?p=537</guid>
		<description><![CDATA[
Go for a ride on magic toolbox &#8217;s website, try the 3 effects, and be tempted to purchase the tiny javascript that does the job for you : yes, the packed file you will receive after this small contribution is worth the money asked. But a few clicks away lies&#8230; the same magic, with opensource [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-full wp-image-538 alignnone" title="magictoolbox" src="http://www.webmasterbulletin.net/wp-content/uploads/2008/12/magictoolbox.jpg" alt="" width="450" height="240" /></p>
<p style="text-align: left;">Go for a ride on magic toolbox &#8217;s website, try the 3 effects, and be tempted to purchase the tiny javascript that does the job for you : yes, the packed file you will receive after this small contribution is worth the money asked. But a few clicks away lies&#8230; the same magic, with opensource license and no server count obligation. Look no further :  Jquery has its own<a href="http://www.huydinh.co.uk/demo/magnifier/" target="_blank"> magnify effect</a>, implemented by <a href="http://huydinh.co.uk/blog/2008/09/04/my-jquery-magnify-plugin/" target="_blank">Huy Dinh</a>. <a href="http://valid.tjp.hu/tjpzoom/" target="_blank">TJP ZOOM </a>is another example of the effect, implemented with plain DHTML / Javascript. For the thumbnail effect, look for one of many light box implementations, such as <a href="http://jquery.com/demo/thickbox/" target="_blank">ThickBox </a>(nice), <a href="http://leandrovieira.com/projects/jquery/lightbox/" target="_blank">LightBox </a>(very nice) or <a href="http://nyromodal.nyrodev.com/" target="_blank">NyroModal</a> (not bad either). And for the zoom effect, we&#8217;ll leave you back to your imagination and javascript skill, combined with various samples from plugins above. Or alternatively you can come back to <a href="http://www.magictoolbox.com/" target="_blank">magic toolbox </a>and give a few bucks.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webmasterbulletin.net/2008/12/magic-toolbox-zoom-magnify-thumbnail-how-to-convert-opensource/537/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
