<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://carlos.rinconsanchez.com"  xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>Blog de Carlos Rincón - tipos de contenido</title>
 <link>http://carlos.rinconsanchez.com/taxonomy/term/313/0</link>
 <description></description>
 <language>es</language>
<item>
 <title>Cómo modificar el formulario de un tipo de contenido en Drupal</title>
 <link>http://carlos.rinconsanchez.com/como-modificar-el-formulario-de-un-tipo-de-contenido-en-drupal</link>
 <description>&lt;p&gt;Pablo (no sé su web) me preguntó en un comentario cómo podía modificar el formulario de un tipo de contenido para adecuar el diseño según sus necesidades.&lt;/p&gt;
&lt;p&gt;Lo primero de todo es ver si los cambios que queremos hacer se pueden realizar sólo con CSS ya que así será mucho más fácil y rápido. Estos puede ser algunos trucos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si no queremos que salga algo le ponemos un display: none&lt;/li&gt;
&lt;li&gt;Si un label sale encima del input y queremos que salga en la misma línea podemos poner un display: inline o flotarlo. Esto será necesario hacerlo también con el propio input&lt;/li&gt;
&lt;li&gt;Si por el contrario queremos que salgan en líneas diferentes le ponemos un display: block a lo que queramos que esté él sólo en una línea.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vemos que no es posible y que es necesario cambiar el html se puede hacer asi:&lt;/p&gt;
&lt;p&gt;Ponemos en el fichero template.php del theme lo siguiente:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function phptemplate_node_form($form) {&lt;br /&gt;
    //drupal_set_message(&quot;Reescribiendo el formulario de &quot; . $form[&#039;#node&#039;]-&amp;gt;type);&lt;br /&gt;
    if($form[&#039;#node&#039;]-&amp;gt;type) {&lt;br /&gt;
        if(file_exists(path_to_theme() . &#039;/forms/form-&#039; . $form[&#039;#node&#039;]-&amp;gt;type . &#039;.tpl.php&#039;)) {&lt;br /&gt;
            //drupal_set_message(&quot;Encuentra el fichero y lo reescribe&quot;);&lt;br /&gt;
            return _phptemplate_callback(path_to_theme() . &#039;forms/form-&#039; .&lt;br /&gt;
$form[&#039;#node&#039;]-&amp;gt;type, array(&#039;form&#039; =&amp;gt; $form));&lt;br /&gt;
        }&lt;br /&gt;
        else {&lt;br /&gt;
            return theme_node_form($form);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;/p&gt;
&lt;p&gt;Luego creamos un directorio forms en el directorio del theme y allí ponemos las plantillas de nuestros formularios con nombres que sean: form-nombre_del_tipo_de_contenido.tpl.php. Por ejemplo, si tenemos un tipo de contenido que se llama articulos el formulario se llamará form-articulos.tpl.php&lt;/p&gt;
&lt;p&gt;Dentro de ese archivo tenemos la variable $form que es un array con cada uno de los campos del formulario. Lo esencial de ese archivo es lo siguiente:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
print drupal_render($form);&lt;br /&gt;
?&amp;gt;&lt;/p&gt;
&lt;p&gt;Esto imprime todo el formulario. Pero por ejemplo nosotros podemos imprimir primero un campo y luego imprimir el resto:&lt;/p&gt;
&lt;p&gt;&amp;lt;?php&lt;br /&gt;
print &#039;&#039; . drupal_render($form[&#039;trozo_del_formulario&#039;) . &#039;&#039;;&lt;br /&gt;
print drupal_render($form);&lt;br /&gt;
?&amp;gt;&lt;/p&gt;
&lt;p&gt;Podemos también quitar cosas del formulario dependiendo del usuario:&lt;/p&gt;
&lt;p&gt;&amp;lt;?php&lt;br /&gt;
global $user;&lt;br /&gt;
if ($user-&amp;gt;uid &amp;lt;&amp;gt; 1) {&lt;br /&gt;
    unset($form[&#039;body_filter&#039;]);&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;/p&gt;
&lt;p&gt;Por cierto, en Drupal 6 funciona distinto la forma de decirle que use la plantilla que queremos:&lt;/p&gt;
&lt;p&gt;&amp;lt;?php&lt;br /&gt;
function nombre_de_tu_tema_theme(&amp;amp;$existing, $type, $theme, $path) {&lt;/p&gt;
&lt;p&gt;  $hooks[&#039;nombre_tipo_contenido_form&#039;] = array( &#039;arguments&#039; =&amp;gt; array(&#039;form&#039; =&amp;gt; NULL),&lt;br /&gt;
&#039;template&#039; =&amp;gt; &#039;path_que_quieras/el_nombre_que_quieras&#039; );&lt;/p&gt;
&lt;p&gt;  return $hooks;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;/p&gt;
</description>
 <comments>http://carlos.rinconsanchez.com/como-modificar-el-formulario-de-un-tipo-de-contenido-en-drupal#comments</comments>
 <category domain="http://carlos.rinconsanchez.com/category/temas/drupal">drupal</category>
 <category domain="http://carlos.rinconsanchez.com/category/temas/formularios">formularios</category>
 <category domain="http://carlos.rinconsanchez.com/category/temas/howto">howto</category>
 <category domain="http://carlos.rinconsanchez.com/category/temas/tipos-de-contenido">tipos de contenido</category>
 <pubDate>Wed, 14 Jan 2009 09:57:37 +0000</pubDate>
 <dc:creator>Carlos</dc:creator>
 <guid isPermaLink="false">170 at http://carlos.rinconsanchez.com</guid>
</item>
</channel>
</rss>
