<?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>Widget | Nerdpress.org</title>
	<atom:link href="https://nerdpress.org/tag/widget/feed/" rel="self" type="application/rss+xml" />
	<link>https://nerdpress.org</link>
	<description>...dev, tech problems and solutions.</description>
	<lastBuildDate>Sun, 17 Jan 2010 19:24:35 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions</title>
		<link>https://nerdpress.org/2010/01/17/symfony-plugin-widget-mit-ajax-actions/</link>
		
		<dc:creator><![CDATA[Max Girkens]]></dc:creator>
		<pubDate>Sun, 17 Jan 2010 19:24:35 +0000</pubDate>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Symfony]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[FormFramework]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Widget]]></category>
		<guid isPermaLink="false">https://nerdpress.org/?p=686</guid>

					<description><![CDATA[<p>Wenn man versucht mit Symfony/Doctrine/Generator Bordmitteln &#8220;related&#8221; Objekte in Formularen darzustellen, wird das schnell schwierig bei etwas mehr Daten. &#8220;Ein Projekt wird mehreren Mitarbeitern zugewiesen. Es gibt aber 500.000 Mitarbeiter.&#8221; Schon rendert sich das generierte multi-select im Projekt-Formular den sprichwörtlichen Wolf. Hier braucht man eigentlich schon was mit Ajax/Pagination. Hier ein Entwurf für ein FormWidget, &#8230; </p>
<p class="link-more"><a href="https://nerdpress.org/2010/01/17/symfony-plugin-widget-mit-ajax-actions/" class="more-link">Continue reading<span class="screen-reader-text"> "Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions"</span></a></p>
The post <a href="https://nerdpress.org/2010/01/17/symfony-plugin-widget-mit-ajax-actions/">Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></description>
										<content:encoded><![CDATA[<p>Wenn man versucht mit Symfony/Doctrine/Generator Bordmitteln &#8220;related&#8221; Objekte in Formularen darzustellen, wird das schnell schwierig bei etwas mehr Daten.<br />
&#8220;Ein Projekt wird mehreren Mitarbeitern zugewiesen. Es gibt aber 500.000 Mitarbeiter.&#8221;<br />
Schon rendert sich das generierte multi-select im Projekt-Formular den sprichwörtlichen Wolf.<br />
Hier braucht man eigentlich schon was mit Ajax/Pagination.</p>
<p>Hier ein Entwurf für ein <a href="http://www.symfony-project.org/more-with-symfony/1_4/en/05-Custom-Widgets-and-Validators">FormWidget</a>, Plugin das seine eigenen Ajax Actions haben soll.<span id="more-686"></span><br />
Also erstmal</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget 
</pre>
<p>anlegen.</p>
<p>Die Struktur <strong>darin</strong> sieht dann nachher so aus:</p>
<pre class="brush: bash; title: ; notranslate">
./lib/myMightyWidget.class.php            
./modules/myMightyWidget/actions/actions.class.php
./modules/myMightyWidget/templates/_myMightyWidget.php       
./modules/myMightyWidget/templates/myajaxactionSuccess.php
( ./web/css/myMightyCSSFile.css )
( ./web/js/myMightyExternalJSFile.js )
</pre>
<p>als erstes:</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/lib/myMightyWidget.class.php
</pre>
<p>Das Template HTML schreiben wir in ein Partial das wir dann nachher in der render-Methode holen.<br />
Dafür müssen wir uns eben den  Partial Helper laden, von Haus aus gibt es die Funktion nicht in der Widget Klasse.<br />
Falls unser Widget einen eigenen Stylesheet und auch eine eigene JS Datei haben möchte, könnten wir die beiden auch bequem im entsprechenden myMightyWidget/web Ordner unterbringen. Und auch via den getStylesheet/ getJavascripts Methoden laden lassen.</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/lib/myMightyWidget.class.php
</pre>
<pre class="brush: php; title: ; notranslate">
class myMightyWidget extends sfWidgetForm
{
	
  public function configure( $options = array(), $attributes = array() )
  {
  	
  	$this-&gt;addOption(  &quot;someOption&quot; );
  	
  	$this-&gt;addOption(  &quot;someOtherOption&quot;, &quot;default&quot; );
  }
  
  public function getStylesheets()
  {
    return array(
    	&#039;/myMightyWidget/css/myMightyWidget.css&#039; =&gt; &#039;&#039;
    );
  }
  
  public function getJavascripts()
  {
    return array(
    	&#039;/myMightyWidget/js/myMightyWidget.js&#039;
    );
  }
  
  public function render($name, $value = null, $attributes = array(), $errors = array())
  {
  	
        //load partial Helper as we want to outsource the Template
	sfContext::getInstance()-&gt;getConfiguration()-&gt;loadHelpers(&#039;Partial&#039;);
  	
  	
    $options = array(
        &#039;someOption&#039;           =&gt; $this-&gt;getOption(&#039;someOption&#039;),
        &#039;someOtherOption&#039;  =&gt; $this-&gt;getOption(&#039;someOtherOption&#039;)
    );
    
  	return  get_partial( &#039;myMightyWidget/myMightyWidget&#039;, $options );
  }
  
}
</pre>
<p>dann brauchen wir den modules Ordner, hier schonmal für das Partial template<br />
also den Ordner</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/modules/myMightyWidget
</pre>
<p> anlegen.</p>
<p>Darin dann das Partial &#8220;_myMightyWidget.php&#8221; anlegen:</p>
<p>(ich setze aus Schreibfaulheit einfach mal jQuery voraus &#8230;)</p>
<pre class="brush: php; title: ; notranslate">

&lt;script type=&quot;text/javascript&quot;&gt;

	$(document).ready(function() {
            $(&quot;#myMightyWidget&quot;).find(&quot;.ajaxResults&quot;)load( &#039;&lt;?php echo url_for( &quot;myMightyWidget/myAjaxAction&quot; ); ?&gt;&#039; );
        });
		
&lt;/script&gt;

&lt;div id=&quot;myMightyWidget&quot;&gt;

    Hello ...

    &lt;div class=&quot;ajaxResults&quot;&gt;&lt;/div&gt;

&lt;/div&gt;

</pre>
<p>Für die Ajax Daten dann Action und Template anlegen:</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/modules/myMightyWidget/actions/actions.class.php
</pre>
<pre class="brush: php; title: ; notranslate">
class myMightyWidgetActions extends sfActions
{
	
	public function executeMyAjaxAction( sfWebRequest $request )
 	{
 		$this-&gt;world = &quot;World&quot;;
    	}
	
 }
</pre>
<p>und das Template:</p>
<pre class="brush: bash; title: ; notranslate">
/plugins/myMightyWidget/modules/myMightyWidget/templates/myajaxactionSuccess.php
</pre>
<pre class="brush: php; title: ; notranslate">
&lt;strong&gt;
    &lt;?php echo $world; ?&gt;
&lt;/strong&gt;
</pre>
<p>Dann in der app, wo wir das Widget benutzen möchten einfach das Modul &#8220;myMightyWidget&#8221; aktivieren (settings.yml).<br />
Und das Widget im Template oder direkt in einer Formklasse einbinden.<br />
Und man kann sich mitten im Formular durch irgendwelche Ajax Listen blättern, oder was einem eben einfällt.</p>
<p>Um die Ergebnisse dem generierten Formular &#8220;unterzuschmuggeln&#8221; muss man nur via JS inputs mit den entsprechenden Namen erzeugen, dann wird das ganz normal mitverarbeitet.<br />
zB.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;hidden&quot; name=&quot;project&amp;#91;mitarbeiter_list&amp;#93;&amp;#91;&amp;#93;&quot; value=&quot;&lt;?php echo $mitarbeiter_id ?&gt;&quot; /&gt;
</pre>The post <a href="https://nerdpress.org/2010/01/17/symfony-plugin-widget-mit-ajax-actions/">Symfony-Plugin: ein FormWidget mit eigenen Ajax Actions</a> first appeared on <a href="https://nerdpress.org">Nerdpress.org</a>.]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
