<?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>ActiveRecord archivos - KumbiaPHP Framework PHP en español</title>
	<atom:link href="https://kumbiaphp.com/blog/category/activerecord/feed/" rel="self" type="application/rss+xml" />
	<link>https://kumbiaphp.com/blog/category/activerecord/</link>
	<description>Web &#38; app MVC PHP framework</description>
	<lastBuildDate>Mon, 13 Apr 2026 23:04:51 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://kumbiaphp.com/blog/wp-content/uploads/2016/01/250-150x150.png</url>
	<title>ActiveRecord archivos - KumbiaPHP Framework PHP en español</title>
	<link>https://kumbiaphp.com/blog/category/activerecord/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">123854898</site>	<item>
		<title>ScaffoldController: Modificando vistas</title>
		<link>https://kumbiaphp.com/blog/2017/05/16/scaffoldcontroller-modificando-vistas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=scaffoldcontroller-modificando-vistas</link>
					<comments>https://kumbiaphp.com/blog/2017/05/16/scaffoldcontroller-modificando-vistas/#comments</comments>
		
		<dc:creator><![CDATA[Nelson Rojas]]></dc:creator>
		<pubDate>Tue, 16 May 2017 12:54:16 +0000</pubDate>
				<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[Documentación]]></category>
		<category><![CDATA[Scaffolding]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<guid isPermaLink="false">https://www.kumbiaphp.com/blog/?p=1523</guid>

					<description><![CDATA[<p>Hasta aquí hemos invertido tiempo en revisar el uso básico del&#160;ScaffoldController con KumbiaPHP creando nuestros CRUDs de forma rápida,&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2017/05/16/scaffoldcontroller-modificando-vistas/">ScaffoldController: Modificando vistas</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Hasta aquí hemos invertido tiempo en revisar el <a href="https://www.kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/">uso básico del&nbsp;ScaffoldController</a> con <a href="https://www.kumbiaphp.com/blog/" target="_blank" rel="noopener noreferrer">KumbiaPHP</a> creando nuestros CRUDs de forma rápida, <a href="https://www.kumbiaphp.com/blog/2017/04/12/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad/">modificando el estilo de las vistas</a> (al añadir un nuevo conjunto de vistas que cargan mediante la variable de controlador <em>$scaffold</em>), y reemplazando comportamientos particulares para modificar el conjunto de datos (al reescribir el método <em>index</em>).</p>



<h2 class="wp-block-heading">Nueva meta u objetivo usando ScaffoldController</h2>



<p class="wp-block-paragraph">Este post tiene por objetivo hacer un resumen de lo que ya hemos visto en las entregas anteriores, y sacar aún más partido al uso de scaffolding con nuestro framework, de tal manera que puedas aplicar los conceptos que se describen en otras situaciones y así buscar mantener el principio DRY: <a href="https://es.wikipedia.org/wiki/No_te_repitas" target="_blank" rel="noopener noreferrer">No te repitas</a>.</p>



<p class="wp-block-paragraph">En sí, el uso de Scaffolding es una declaración clara del principio DRY, pues lo usamos para no tener que copiar y pegar comportamientos que son inherentes a diferentes situaciones: como crear, actualizar, eliminar y listar registros de una tabla (a modo de ejemplo, podríamos crear controladores scaffolding o heredables para otras tareas que no sean siempre la gestión de datos en tablas).</p>



<p class="wp-block-paragraph">A modo de añadir más fuerza al principio, los frameworks de desarrollo web se han creado basándose primariamente en dicha idea: escribir lo necesario, evitando repetir comportamientos, y por ende se disminuye el número de líneas de código, el nivel de errores y, por ende, el tiempo de desarrollo y mantenimiento de los sistemas o aplicaciones creados con ellos.</p>



<p class="wp-block-paragraph">Por eso es que existe una clasificación de carpetas: para controladores, modelos, vistas, ayudantes (helpers), librerías particulares, y librerías externas (vendors).</p>



<p class="wp-block-paragraph">Si necesita comprender más los conceptos básicos de nuestro framework puede ver <a href="https://www.kumbiaphp.com/blog/2016/05/26/kumbiaphp-essentials/">Kumbia Essentials</a>.</p>



<h2 class="wp-block-heading">Manos a la obra</h2>



<p class="wp-block-paragraph">Como ya se mencionó, un scaffolding es una estrategia para no repetir código que se usa en labores comunes. Hasta aquí lo hemos usado para tener un CRUD de la tabla que representa las categorías, y también nos ha permitido sobrescribir la forma en que hacemos la presentación de la acción index (listar los registros de la tabla).</p>



<p class="wp-block-paragraph">Ahora iremos un poco más lejos</p>



<ol class="wp-block-list">
<li>Modificaremos la vista particular de la acción index.</li>



<li>Sobrescribiremos nuestro controlador para modificar el comportamiento al guardar y actualizar los registros.</li>
</ol>



<p class="wp-block-paragraph">El cliente nos pide modificar la visualización de la lista de categorías para quitar de ella los atributos de fecha y renombrar el atributo nombre y categorías por Nombre Categoría y Categoría Padre. También nos solicita modificar el comportamiento de la acción <em>crear</em> para que el formulario aparezca limpio para agregar nuevamente, en vez de viajar a index una vez enviado el formulario.</p>



<p class="wp-block-paragraph">De igual forma debe hacerse para que la acción editar recargue el formulario modificado en vez de viajar a index. Iremos de lo fácil a lo menos fácil.</p>



<span id="more-1523"></span>



<h3 class="wp-block-heading">Modificaremos el comportamiento de crear, y editar en nuestro controlador.</h3>



<p class="wp-block-paragraph">Podemos mirar el método <strong>crear</strong> desde ScaffoldController (<em>app/libs/scaffold_controller.php</em>) y mejorarlo para nuestro controlador de categorias (<em>app/controllers/categorias_controller.php</em>)</p>



<p class="wp-block-paragraph">Una propuesta podría ser como la que se presenta a continuación:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">public function crear()
{
    if ( Input::hasPost(&#039;Categorias&#039;) ) {
        $categoria = new Categorias(Input::post(&#039;Categorias&#039;));
        
        //comprobar si se puede realizar la creacion del elemento
        if ( !$categoria-&gt;save() ) {
            Flash::error(&#039;Falló Operación&#039;);
            //hacer persistente el objeto con los datos enviados
            $this-&gt;Categorias = $categoria;
            Input::delete(&#039;Categorias&#039;);
        }
    }
    $this-&gt;Categorias = new Categorias;
}</code></pre>



<p class="wp-block-paragraph">Esta propuesta elimina la redirección a index, y limpiar el contenido de <em>Input::post(&#8216;modelo&#8217;)</em> para que el formulario permanezca en blanco y así nos permita agregar un nuevo elemento de forma inmediata.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Repetiremos el procedimiento en el método <strong>editar</strong>. Iremos al controlador ScaffoldController, y desde él mejoraremos el método <strong>editar</strong>, pegándolo bajo el&nbsp;método <strong>crear</strong>&nbsp;del controlador de categorías. La propuesta para editar debería ser algo como la siguiente figura:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">public function editar($id)
{
    View::select(&#039;crear&#039;); //usamos la misma vista que crear

    if ( Input::hasPost(&#039;Categorias&#039;) ) {
        $categoria = new Categorias;          
        //comprobar si se puede realizar la actualización del elemento
        if ( !$categoria-&gt;update(Input::post(&#039;Categorias&#039;)) ) {
            Flash::error(&#039;Falló Operación&#039;);
            //hacer persistente el objeto con los datos del formulario
            $this-&gt;Categorias = $categoria;

            Input::delete(&#039;Categorias&#039;);
        }
    }
    //aplicar autocarga del objeto para comenzar/continuar la edición
    $this-&gt;Categorias = (new Categorias)-&gt;find((int)$id);
}</code></pre>



<h3 class="wp-block-heading">Modificando vistas</h3>



<p class="wp-block-paragraph">Modificaremos la vista index estándar. Para ello crearemos una nueva vista index dentro de <em>app/views/categorias</em>. El archivo debe ser llamado como index.phtml.</p>



<p class="wp-block-paragraph">La estructura de archivos del proyecto debería verse así:</p>



<figure class="wp-block-image"><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/nueva-vista-index.png"><img fetchpriority="high" decoding="async" width="196" height="395" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/nueva-vista-index.png" alt="ScaffoldController: Listado de directorios y archivos para la nueva vista index del controlador de categorías" class="wp-image-1534" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/04/nueva-vista-index.png 196w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/nueva-vista-index-149x300.png 149w" sizes="(max-width: 196px) 100vw, 196px" /></a></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Copiaremos el contenido de la vista index del scaffolding, la que está en <em>app/views/_shared/scaffolds/kumbia/index.phtml</em></p>



<p class="wp-block-paragraph">Quitaremos los atributos de fecha y renombraremos las columnas de nombre y de categoría padre. La vista nos debería quedar más o menos así:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;div id=&quot;scaffold&quot;&gt;
&lt;?php View::content()?&gt;
&lt;h1&gt;&lt;?= ucwords(&quot;$model&quot;), &quot;: &lt;span&gt;$action_name&lt;/span&gt;&quot; ?&gt;&lt;/h1&gt;
&lt;div class=&quot;actions&quot;&gt;
    &lt;?= Html::linkAction(&quot;crear/&quot;, &#039;Crear registro&#039;, &#039;class=&quot;btn btn-primary&quot;&#039;)?&gt;
&lt;/div&gt;

&lt;?php if (isset($data-&gt;items) &amp;&amp; (count($data-&gt;items) &gt; 0)) : ?&gt;
&lt;table class=&quot;t&quot;&gt;
    &lt;thead&gt;&lt;tr&gt;
    &lt;th&gt;Id&lt;/id&gt;
    &lt;th&gt;Nombre&lt;/id&gt;
    &lt;th&gt;Categoria Padre&lt;/id&gt;
    &lt;th&gt;Acciones&lt;/th&gt;
    &lt;/tr&gt;&lt;/thead&gt;
    &lt;tbody&gt;
    &lt;?php foreach ($data-&gt;items as $item) : ?&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;?= h($item-&gt;id)?&gt;&lt;/td&gt;
            &lt;td&gt;&lt;?= h($item-&gt;nombre)?&gt;&lt;/td&gt;
            &lt;td&gt;&lt;?= h($item-&gt;categorias_id)?&gt;&lt;/td&gt;
            &lt;td&gt;&lt;?= Html::linkAction(&quot;ver/$item-&gt;id&quot;, &#039;Ver&#039;)?&gt; |
            &lt;?= Html::linkAction(&quot;editar/$item-&gt;id&quot;, &#039;Editar&#039;)?&gt; |
            &lt;?= Html::linkAction(&quot;borrar/$item-&gt;id&quot;, &#039;Borrar&#039;, &#039;onclick=&quot;return confirm(\&#039;¿Está seguro?\&#039;)&quot;&#039;) ?&gt;
            &lt;/td&gt;
        &lt;/tr&gt;
    &lt;?php endforeach?&gt;
    &lt;/tbody&gt;
&lt;/table&gt;

&lt;?php View::partial(&#039;paginators/digg&#039;, false, array(&#039;page&#039; =&gt; $data ,&#039;url&#039; =&gt; Router::get(&#039;controller_path&#039;).&#039;/index&#039;)) ?&gt;
&lt;?php else : // Si no hay items?&gt;
&lt;h2&gt;No hay ningún registro&lt;/h2&gt;
&lt;?php endif ?&gt;
&lt;/div&gt;</code></pre>



<p class="wp-block-paragraph">Al ejecutar el acceso a la vista deberíamos lograr algo similar a la siguiente figura:</p>



<figure class="wp-block-image"><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-1.png"><img decoding="async" width="727" height="493" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-1.png" alt="ScaffoldController: Vista de navegador para el reemplazo de la vista index en el controlador de categorías" class="wp-image-1536" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-1.png 727w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-1-300x203.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-1-650x440.png 650w" sizes="(max-width: 727px) 100vw, 727px" /></a></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Pero nuestro cliente necesita que la categoría padre quede expresada con el nombre, no con su código de referencia.</p>



<p class="wp-block-paragraph">Entonces, lo que haremos finalmente es modificar el método index y el modelo que enlaza la tabla categorías de la siguiente forma, comenzando por el modelo (<em>app/models/categorias.php</em>):</p>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php
class Categorias extends ActiveRecord
{      
    function getCategorias($page = 1)
    {
        return $this-&gt;paginate(
            &#039;columns: categorias.id, categorias.nombre, cat.nombre as categorias_id&#039;,
            &#039;join: left outer join categorias cat on categorias.categorias_id = cat.id&#039;,
            &quot;page: $page&quot;, &#039;order: categorias.id desc&#039;);
    }
}</code></pre>



<p class="wp-block-paragraph">Modificamos la consulta para dotar a la paginación de la referencia al nombre de la categoría padre usando los parámetros columns y join.</p>



<p class="wp-block-paragraph">En nuestro controlador de categorías modificaremos el método index para que pueda usar esta nueva paginación, quedando el resultado como se ve a continuación:</p>



<pre class="wp-block-code language-php"><code class="" data-line="">&lt;?php
class CategoriasController extends ScaffoldController
{
    public $model = &#039;Categorias&#039;;
    public $scaffold = &#039;skeleton&#039;;   

    public function index($page=1)
    {
        $this-&gt;data = (new Categorias)-&gt;getCategorias($page);
    }</code></pre>



<p class="wp-block-paragraph">Finalmente el resultado de la vista index se verá como lo presenta la siguiente figura:</p>



<figure class="wp-block-image"><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-2.png"><img decoding="async" width="726" height="486" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-2.png" alt="ScaffoldController: Vista del método index con Categoría padre como nombre" class="wp-image-1539" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-2.png 726w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-2-300x201.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/nuevo-index-fase-2-440x294.png 440w" sizes="(max-width: 726px) 100vw, 726px" /></a></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Hasta aquí llega la publicación dedicada al tema del scaffolding, pero antes de terminar haremos un resumen hasta aquí.</p>



<h3 class="wp-block-heading">Resumen</h3>



<p class="wp-block-paragraph">En este episodio hemos modificado el comportamiento del método crear sobrescribiendo el método base del controlador Scaffold, también hemos modificado el comportamiento para editar, y para index.</p>



<p class="wp-block-paragraph">Hemos agregado una vista personalizada para la acción index, y aún así seguimos usando ScaffoldController.</p>



<p class="wp-block-paragraph">Sólo nos restará por tarea crear nuestro propio Scaffold para poder mantener el principio DRY usando los comportamientos sin redirección para el método crear y editar.</p>



<p class="wp-block-paragraph">Si te perdiste los otros post de esta serie, puedes leerlos en los siguientes enlaces:</p>



<p class="wp-block-paragraph"><a href="https://www.kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/">Scaffolding para CRUD (ABM) sencillos (y no tanto) – primera parteparte 1</a></p>



<p class="wp-block-paragraph"><a href="https://www.kumbiaphp.com/blog/2017/04/12/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad/">ScaffoldController: Modificando comportamientos y contenidos</a></p>



<p class="wp-block-paragraph">Un abrazo cordial a nuestros colegas y a los que han de venir,</p>



<p class="wp-block-paragraph"><a href="https://twitter.com/nelsonrojas" target="_blank" rel="noopener noreferrer">@nelsonrojas</a></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2017/05/16/scaffoldcontroller-modificando-vistas/">ScaffoldController: Modificando vistas</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2017/05/16/scaffoldcontroller-modificando-vistas/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1523</post-id>	</item>
		<item>
		<title>ScaffoldController: Modificando comportamientos y contenidos</title>
		<link>https://kumbiaphp.com/blog/2017/04/12/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad</link>
					<comments>https://kumbiaphp.com/blog/2017/04/12/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad/#comments</comments>
		
		<dc:creator><![CDATA[Nelson Rojas]]></dc:creator>
		<pubDate>Wed, 12 Apr 2017 13:28:01 +0000</pubDate>
				<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[Documentación]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[scaffold]]></category>
		<guid isPermaLink="false">https://www.kumbiaphp.com/blog/?p=1344</guid>

					<description><![CDATA[<p>La entrega anterior hablamos acerca del uso de la técnica de Scaffolding para CRUD con KumbiaPHP usando la clase&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2017/04/12/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad/">ScaffoldController: Modificando comportamientos y contenidos</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>La entrega anterior hablamos acerca del uso de la técnica de<a href="https://www.kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/"> Scaffolding para CRUD con KumbiaPHP</a> usando la clase <strong>ScaffoldController</strong>. Espero que muchos se hayan sorprendido gratamente con la funcionalidad que ciertamente ahorra mucho trabajo rutinario, ya que es altamente flexible.</p>
<p>Para que se entusiasmen, dentro de las posibilidades  tenemos: reescribir métodos y modificar comportamientos en controladores, modificar los archivos de vista, e incluso puedes crear tus propios scaffoldings. Pero bueno, vamos paso a paso.</p>
<h2>Manos a la obra con ScaffoldController</h2>
<p>Vamos a trabajar en base a supuestos. Supongamos que queremos mostrar el nombre de la categoría padre para aquellas categorías que estén anidadas.</p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/index-sin-cambios-1.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1351 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/index-sin-cambios-1.png" alt="Lista de categorías" width="958" height="405" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/04/index-sin-cambios-1.png 958w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/index-sin-cambios-1-300x127.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/index-sin-cambios-1-768x325.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/index-sin-cambios-1-940x397.png 940w" sizes="auto, (max-width: 958px) 100vw, 958px" /></a></p>
<p>Como se ve en la lista, las categorías relacionadas sólo se ven con su identificador.<br />
Por lo tanto, vamos a modificar <strong>la fuente de datos</strong> que pasamos a la vista <strong>Index</strong> para que ésta pueda presentar los contenidos respectivos.</p>
<h2>En el modelo</h2>
<p>Lo que vamos a hacer es crear un método que cumpla con lo que queremos lograr: mostrar el contenido de la tabla de categorías incluyendo el nombre de la categoría padre en aquellas categorías que heredan de otra. De este modo tendremos una modificación como la siguiente:</p>
<p>Archivo: <em>models/categorias.php</em></p>
<pre class=" language-php"><code class="" data-line="">&lt;span class=&quot;token delimiter&quot;&gt;&lt;?php&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Categorias&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ActiveRecord&lt;/span&gt; 
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;getCategorias&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$page&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; 
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;paginate&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
            &lt;span class=&quot;token string&quot;&gt;&#039;columns: categorias.id, categorias.nombre, cat.nombre as categorias_id, categorias.creada_at, categorias.actualizada_in&#039;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 
            &lt;span class=&quot;token string&quot;&gt;&#039;join: left outer join categorias cat on categorias.categorias_id = cat.id&#039;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
            &lt;span class=&quot;token string&quot;&gt;&quot;page: $page&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#039;order: categorias.id desc&#039;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;</code></pre>
<h2>En el controlador</h2>
<p>El segundo cambio lo haremos desde el controlador, para cargar los cambios que hemos hecho en el modelo. Lo que <strong>reemplazaremos</strong> (porque es una sobre escritura de index en ScaffoldController) será la función <strong>index</strong> tal como se muestra a continuación.</p>
<p>Archivo: controllers<em>/categorias_controller.php</em></p>
<pre class=" language-php"><code class="" data-line="">&lt;span class=&quot;token delimiter&quot;&gt;&lt;?php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;CategoriasController&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ScaffoldController&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$model&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#039;Categorias&#039;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;index&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$page&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token variable&quot;&gt;$this&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token property&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Categorias&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;getCategorias&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;$page&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
 
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;</code></pre>
<p><span id="more-1344"></span></p>
<h2>Ahora se ve así</h2>
<p>Con esto lograremos que el listado cumpla que el requerimiento solicitado.</p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/index-con-cambios-1.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1352 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/index-con-cambios-1.png" alt="Lista modificada de las categorías" width="967" height="400" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/04/index-con-cambios-1.png 967w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/index-con-cambios-1-300x124.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/index-con-cambios-1-768x318.png 768w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/index-con-cambios-1-940x389.png 940w" sizes="auto, (max-width: 967px) 100vw, 967px" /></a></p>
<h2>¿Por qué funciona?</h2>
<p>Como puede verse, con cambios mínimos hemos logrado adecuar la presentación de la vista <strong>index</strong> sin actualizar su archivo. Lo que hemos hecho principalmente es un reemplazo dentro de la metadata de ActiveRecord. Scaffolding espera contar con todos los atributos de la tabla de categorías (id, nombre, categorias_id, creada_at, actualizada_in). Nosotros hemos modificado la salida cambiando categorias_id por nombre desde categorias (nombre as categorias_id). Así hemos logrado que el pintador de la vista index haga su tarea sin enterarse del reemplazo que hemos hecho a nivel de modelo.</p>
<p>Bueno, eso es todo por esta semana. En la siguiente entrega veremos cómo modificar una vista particular para hacerla parecer según nuestros requerimientos. (<a href="https://www.kumbiaphp.com/blog/2017/05/16/scaffoldcontroller-modificando-vistas/">ver parte 3</a>)</p>
<h2>Últimas recomendaciones</h2>
<p>Recuerden que pueden revisar el código desde: <a href="https://github.com/nelsonrojas/Scaffold-KumbiaPHP" target="_blank" rel="noopener noreferrer">https://github.com/nelsonrojas/Scaffold-KumbiaPHP</a></p>
<p>No olvides visitarnos en <a href="http://slack.kumbiaphp.com/" target="_blank" rel="noopener noreferrer">http://slack.kumbiaphp.com/</a> para contarnos cómo te va usando <a href="https://www.kumbiaphp.com" target="_blank" rel="noopener noreferrer">KumbiaPHP</a>. Si necesitas apoyo procuraremos estar atentos. Además, si te gusta lo que escribimos compártelo ya mismo con tus amigos y colegas.</p>
<p>Saludos y larga vida a KumbiaPHP!</p>
<p>Con cariño desde Talca, Chile: <a href="https://twitter.com/nelsonrojas" target="_blank" rel="noopener noreferrer">@nelsonrojas</a></p>
<p>Ps: Si te perdiste lo que escribimos la semana pasada, puedes leerlo aquí: <a href="https://www.kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/">https://www.kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/</a></p>
<p>Si quieres ver lo que sigue: <a href="https://www.kumbiaphp.com/blog/2017/05/16/scaffoldcontroller-modificando-vistas/">ScaffoldController: Modificando vistas</a></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2017/04/12/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad/">ScaffoldController: Modificando comportamientos y contenidos</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2017/04/12/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1344</post-id>	</item>
		<item>
		<title>Scaffolding para CRUD (ABM) sencillos (y no tanto) &#8211; primera parte</title>
		<link>https://kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte</link>
					<comments>https://kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/#comments</comments>
		
		<dc:creator><![CDATA[Nelson Rojas]]></dc:creator>
		<pubDate>Mon, 03 Apr 2017 10:39:38 +0000</pubDate>
				<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tutoriales y screencast]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[ejemplos]]></category>
		<category><![CDATA[scaffold]]></category>
		<guid isPermaLink="false">https://www.kumbiaphp.com/blog/?p=1288</guid>

					<description><![CDATA[<p>¿Qué es Scaffolding? Cuando comenzó el fenómeno de los frameworks de desarrollo web, una de sus banderas de lucha&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/">Scaffolding para CRUD (ABM) sencillos (y no tanto) &#8211; primera parte</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>¿Qué es Scaffolding?</h2>
<p>Cuando comenzó el fenómeno de los frameworks de desarrollo web, una de sus banderas de lucha estuvo de la mano de los scaffoldings (andamios).</p>
<p>Un scaffold es en sí una técnica que proveen muchos frameworks, con la que podrás tener un gestor de datos para una tabla particular escribiendo una cantidad mínima de código (en KumbiaPHP bastan 7 líneas de código – excluyendo 2 líneas de encabezado php – ).</p>
<p>En mis primeros años de kumbiero comencé creando un controlador para las acciones clásicas de CRUD (Create, Read, Update y Delete), un modelo para apuntar la tabla de la base de datos y al menos 3 archivos de vista (index, agregar y editar).</p>
<p>Para hacer el CRUD de otra tabla copiaba el controlador inicial en el nuevo, luego editaba todo lo que correspondía, y lo mismo hacía para el modelo y las vistas.</p>
<p>Como verán es un trabajo arduo, pero no es tanto trabajo… a menos que tengas más de 10 tablas.</p>
<p>Si pueden hacer el ejercicio de mirar el bosque desde lejos, casi todos los CRUDs creados tienen las mismas acciones, y usan las mismas vistas (con sus leves diferencias).</p>
<h2>La iluminación</h2>
<p>Fue entonces que un día de IRC (el chat que usábamos antes), los colegas del core de KumbiaPHP me presentaron a ScaffoldController.</p>
<p>Es un amigo silencioso, puesto que está alojado en default/app/libs, pero además es un amigo confiable, pues hereda de AdminController (eso quiere decir que si damos cierta habilidad de autenticación al AdminController, los controllers que hagamos usando ScaffoldController también estarán asegurados).</p>
<h2>Configuración inicial</h2>
<p>Si este es un proyecto que ha iniciado desde cero, deberá configurar el acceso a la base de datos antes de continuar.</p>
<p>Para eso usaremos el archivo <em>default/app/config/database.ini</em>. En él se definen los entornos de datos que usará nuestra aplicación, los que normalmente son: development (desarrollo) y production (producción)</p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/database-setting.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1890 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/database-setting.png" alt="Archivo databases.ini de KumbiaPHP" width="585" height="339" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/04/database-setting.png 585w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/database-setting-300x174.png 300w" sizes="auto, (max-width: 585px) 100vw, 585px" /></a></p>
<p>Los parámetros de configuración que debemos revisar son:</p>
<ul>
<li><strong>host</strong>: Nombre de red o dirección ip del equipo en el cual está instalada la base de datos.</li>
<li><strong>username</strong>: usuario de la base de datos.</li>
<li><strong>password</strong>: contraseña del usuario de la base de datos.</li>
<li><strong>name</strong>: nombre de la base de datos.</li>
<li><strong>type</strong>: el tipo de base de datos que usará el proyecto, como mysql, pgsql, oracle.</li>
</ul>
<p>Para indicarle al proyecto que debe usar uno u otro entorno de base de datos, será necesario modificar el archivo de configuración <em>default/app/config/config.php</em>. De forma predeterminada la configuración del entorno de base de datos es &#8216;default&#8217;, pero lo dejaremos inicialmente como &#8216;development&#8217;.</p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/datbase-default.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1891 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/04/datbase-default.png" alt="Archivo config.php de KumbiaPHP" width="473" height="419" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/04/datbase-default.png 473w, https://kumbiaphp.com/blog/wp-content/uploads/2017/04/datbase-default-300x266.png 300w" sizes="auto, (max-width: 473px) 100vw, 473px" /></a></p>
<p>Lista la configuración, sigamos con la acción.</p>
<h2>De la teoría a la acción</h2>
<p>Bueno, mucho texto y poca acción (o como versa el dicho “mucho ruido y pocas nueces”).</p>
<p>En nuestro primer ejemplo usaremos la clásica tabla de categorías, con la siguiente estructura:</p>
<pre class="  language-sql"><code class="" data-line="">
&lt;span class=&quot;token keyword&quot;&gt;CREATE&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;TABLE&lt;/span&gt; categorias &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
 id &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;AUTO_INCREMENT&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 nombre &lt;span class=&quot;token keyword&quot;&gt;varchar&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;NOT&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;NULL&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;UNIQUE&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 categorias_id &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;11&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 creada_at &lt;span class=&quot;token keyword&quot;&gt;timestamp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 actualizada_in &lt;span class=&quot;token keyword&quot;&gt;timestamp&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
 &lt;span class=&quot;token keyword&quot;&gt;PRIMARY&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;KEY&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;id&lt;span class=&quot;token punctuation&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;</code></pre>
<p>Ahora crearemos un modelo llamado Categorias.</p>
<p>Archivo: <em>models/categorias.php</em></p>
<pre class="  language-php"><code class="" data-line="">
&lt;span class=&quot;token delimiter&quot;&gt;&lt;?php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Categorias&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ActiveRecord&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;</code></pre>
<p>Y finalmente <strong>(sí, finalmente)</strong> añadiremos el controlador CategoriasController.</p>
<p>Archivo: <em>controllers/categoria_controller.php</em></p>
<pre class="  language-php"><code class="" data-line="">
&lt;span class=&quot;token delimiter&quot;&gt;&lt;?php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;CategoriasController&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ScaffoldController&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
 &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$model&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#039;Categorias&#039;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;</code></pre>
<p><span id="more-1288"></span></p>
<h2>¡Y hemos terminado!</h2>
<p>Así de sencillo ya tenemos nuestro primer CRUD sin dolor.</p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_05_35.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1322 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_05_35.png" alt="" width="877" height="571" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_05_35.png 877w, https://kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_05_35-300x195.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_05_35-768x500.png 768w" sizes="auto, (max-width: 877px) 100vw, 877px" /></a></p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_12_14.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1321 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_12_14.png" alt="" width="880" height="583" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_12_14.png 880w, https://kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_12_14-300x199.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2017/03/VirtualBox_ubuntu_31_03_2017_11_12_14-768x509.png 768w" sizes="auto, (max-width: 880px) 100vw, 880px" /></a></p>
<p>Tendremos inicialmente las acciones para index, agregar, editar, ver y eliminar, y sólo hemos escrito 7 líneas.</p>
<h2>Personalizando las vistas</h2>
<p>Y ahora, ¿quién podrá defendernos de la hoja de estilo predeterminada? ¡Excelente pregunta!</p>
<p>Bueno, los muchachos del core ya tuvieron eso previsto para nosotros. Resulta que puedes crear tus propias vistas para usarlas con tus controladores de Scaffold. Basta copiar el contenido de <em>app/views/_shared/scaffold/kumbia</em> en una nueva versión de vistas para tus controladores.</p>
<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/skeleton.png"><img loading="lazy" decoding="async" class="alignnone wp-image-1306 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/skeleton.png" alt="" width="668" height="235" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/03/skeleton.png 668w, https://kumbiaphp.com/blog/wp-content/uploads/2017/03/skeleton-300x106.png 300w" sizes="auto, (max-width: 668px) 100vw, 668px" /></a></p>
<p>Supongamos que nos piden usar <a href="http://getskeleton.com/" target="_blank" rel="noopener noreferrer">skeleton</a>. Por lo tanto ahora tendremos una carpeta llamada <em>app/views/_shared/scaffolds/skeleton</em>, con los mismos tres archivos de vistas: crear, index, ver.</p>
<p>Y ¿cómo le decimos a nuestros controladores que usen nuestro nuevo conjunto de vistas?<br />
<strong>Sencillo:</strong></p>
<pre class="  language-php"><code class="" data-line="">
&lt;span class=&quot;token delimiter&quot;&gt;&lt;?php&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;CategoriasController&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ScaffoldController&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
 &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$model&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#039;Categorias&#039;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
 &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token variable&quot;&gt;$scaffold&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#039;skeleton&#039;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;</code></pre>
<h2>El resultado final</h2>
<p>Si miramos el resultado tendremos algo como lo que se ve en las siguientes imágenes:</p>
<p><figure id="attachment_1307" aria-describedby="caption-attachment-1307" style="width: 914px" class="wp-caption alignnone"><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/index-sk.png"><img loading="lazy" decoding="async" class="wp-image-1307 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/index-sk-e1490969789984.png" alt="Vista usando skeleton" width="914" height="392" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/03/index-sk-e1490969789984.png 914w, https://kumbiaphp.com/blog/wp-content/uploads/2017/03/index-sk-e1490969789984-300x129.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2017/03/index-sk-e1490969789984-768x329.png 768w" sizes="auto, (max-width: 914px) 100vw, 914px" /></a><figcaption id="caption-attachment-1307" class="wp-caption-text">Vista usando skeleton</figcaption></figure></p>
<p><figure id="attachment_1308" aria-describedby="caption-attachment-1308" style="width: 910px" class="wp-caption alignnone"><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/editar-1.png"><img loading="lazy" decoding="async" class="wp-image-1308 size-full" src="https://www.kumbiaphp.com/blog/wp-content/uploads/2017/03/editar-1-e1490970004190.png" alt="Formulario usando skeleton" width="910" height="336" srcset="https://kumbiaphp.com/blog/wp-content/uploads/2017/03/editar-1-e1490970004190.png 910w, https://kumbiaphp.com/blog/wp-content/uploads/2017/03/editar-1-e1490970004190-300x111.png 300w, https://kumbiaphp.com/blog/wp-content/uploads/2017/03/editar-1-e1490970004190-768x284.png 768w" sizes="auto, (max-width: 910px) 100vw, 910px" /></a><figcaption id="caption-attachment-1308" class="wp-caption-text">Formulario usando skeleton</figcaption></figure></p>
<p>Así de fácil logramos crear nuestro primer CRUD con 8 líneas de código y con nuestro css preferido (o requerido).</p>
<p>Si quieres ver lo que sigue, mira en los enlaces que están a continuación:</p>
<p><strong>Parte 2:</strong> <a href="https://www.kumbiaphp.com/blog/2017/04/12/scaffolding-con-kumbiaphp-modificando-comportamientos-y-contenidos-segun-nuestra-necesidad/">ScaffoldController: Modificando comportamientos y contenidos</a></p>
<p><strong>Parte 3:</strong>  <a href="https://www.kumbiaphp.com/blog/2017/05/16/scaffoldcontroller-modificando-vistas/">ScaffoldController: Modificando vistas</a></p>
<h2>Descarga el ejemplo completo</h2>
<p>Pueden descargar el código del proyecto desde el siguiente repositorio de <a href="https://github.com/nelsonrojas/Scaffold-KumbiaPHP" target="_blank" rel="noopener noreferrer">Github</a></p>
<p>Si buscan el script de la tabla de categorías pueden encontrarlo dentro de <em><a href="https://github.com/nelsonrojas/Scaffold-KumbiaPHP/tree/master/default/app/config/sql" target="_blank" rel="noopener noreferrer">app/config/sql</a></em></p>
<p><strong>¡Larga vida a KumbiaPHP!</strong></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/">Scaffolding para CRUD (ABM) sencillos (y no tanto) &#8211; primera parte</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2017/04/03/scaffolding-para-crud-abm-sencillos-y-no-tanto-primera-parte/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1288</post-id>	</item>
		<item>
		<title>Casi listos para las nuevas versiones</title>
		<link>https://kumbiaphp.com/blog/2014/05/27/casi-listos-para-las-nuevas-versiones/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=casi-listos-para-las-nuevas-versiones</link>
					<comments>https://kumbiaphp.com/blog/2014/05/27/casi-listos-para-las-nuevas-versiones/#comments</comments>
		
		<dc:creator><![CDATA[HenryStivens]]></dc:creator>
		<pubDate>Tue, 27 May 2014 21:36:57 +0000</pubDate>
				<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[PHP frameworks]]></category>
		<category><![CDATA[Webs con KumbiaPHP]]></category>
		<guid isPermaLink="false">http://www.kumbiaphp.com/blog/?p=741</guid>

					<description><![CDATA[<p>Estamos limpiando el código para la salida de las versiones oficiales de KumbiaPHP. ¡Si versiones en plural! Versión 0.9&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2014/05/27/casi-listos-para-las-nuevas-versiones/">Casi listos para las nuevas versiones</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Estamos limpiando el código para la salida de las versiones oficiales de <strong>KumbiaPHP</strong>.</p>
<p>¡Si versiones en plural!</p>
<p>Versión 0.9 -&gt; 100% compatible con la beta2 . En breve.<br />
 Versión 1.0 -&gt; Quitaremos todas las libs y código obsoleto.</p>
<p>La 1.0 con muy pequeños cambios funcionaran las apps de beta2, saldrá unas semanas después de la 0.9</p>
<p>Hemos añadido una nueva carpeta a la beta2. En principio era para la 1.0, pero hemos decidido que también esté en la beta2(0.9). Carpeta vendor, dentro de esta carpeta se autocargaran todas las libs que usan PSR0: Symfony, Zend, Doctrine, Swiftmail, PHPExcel, etc.</p>
<p>Con PHP 5.2 se podrán usar todas las libs de PEAR,  zend framework 1 y compatibles.<br />
 Con PHP 5.3 todas las clases PSR0 con namespaces.</p>
<p>KumbiaPHP 1.0 no usará namespaces, pero si se pueden usar. Se podrá usar composer (PHP5.3) y todas las libs de packagist. Documentaremos su uso, que es muy fácil. (Esta en fase beta).</p>
<h2>Nuevo ActiveRecord</h2>
<p><strong>ActiveRecord</strong> nuevo (PHP 5.3): Va a muy buen ritmo el desarrollo, ya es funcional, es rapidísimo y no usa memoria prácticamente. En principio tendrá 3 clases principales:</p>
<ul>
<li><strong>LiteRecord: </strong>Para los que prefieren usar SQL. Un ActiveRecord básico y sin generador de consultas. Mejor rendimiento. Ya es funcional</li>
<li><strong>ActRecord: </strong>Nuevo ActiveRecord aun puliendo y añadiendo cosas.</li>
<li><strong>ActiveRecord: </strong>Clase compatible con el actual ActiveRecord. Será lo más compatible posible, para facilitar la migración de apps.</li>
</ul>
<p>Se han añadido tests unitarios y la calidad del código es excelente.</p>
<p><a href="https://github.com/KumbiaPHP/ActiveRecord" target="_blank" rel="noopener">https://github.com/KumbiaPHP/ActiveRecord</a> (Repositorio en github)</p>
<p><a href="https://scrutinizer-ci.com/g/KumbiaPHP/ActiveRecord/?branch=master" target="_blank" rel="noopener">https://scrutinizer-ci.com/g/KumbiaPHP/ActiveRecord/?branch=master</a> (Calidad de código)</p>
<p>Hemos estado trabajando mucho, tanto que según Ohlo.net, el mes pasado eramos el 4º proyecto libre con más movimiento (hot) de cualquier lenguaje. Y segundos en PHP. Esta como un proyecto con muy alto nivel de actividad, que dan sólo al 0,6% de los proyectos libres.</p>
<p><a href="https://www.ohloh.net/explore/projects" target="_blank" rel="noopener">https://www.ohloh.net/explore/projects</a>  (Listado de los proyectos más &#8216;hot&#8217;)</p>
<p><a href="https://www.ohloh.net/p/KumbiaPHP_framework" target="_blank" rel="noopener">https://www.ohloh.net/p/KumbiaPHP_framework</a></p>
<p>Y vienen más cambios interesantes, que iremos comentando.</p>
<p>Después nos faltará crear la V2.0, que será prácticamente igual a la 1.0. Sólo que mínimo PHP5.3 y todo el core de kumbia pasará a <em>vendor/kumbia/</em></p>
<p>La V2.0 será aun más rápida.</p>
<h2>Nueva web en KumbiaPHP</h2>
<p>Trabajamos para tener la nueva web lista, para la salida de las nuevas versiones.</p>
<p><a href="http://proto.kumbiaphp.com" target="_blank" rel="noopener">proto.kumbiaphp.com</a></p>
<p>Como siempre se agradece ayuda de la comunidad en:</p>
<ul>
<li>Crear código</li>
<li>Marcar bugs</li>
<li>Terminar la documentación</li>
<li>Dar a conocer KumbiaPHP</li>
</ul>
<p>Gracias por el apoyo a KumbiaPHP</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2014/05/27/casi-listos-para-las-nuevas-versiones/">Casi listos para las nuevas versiones</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2014/05/27/casi-listos-para-las-nuevas-versiones/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">741</post-id>	</item>
		<item>
		<title>KumbiaPHP Framework 1.0 Beta 1 Liberada!</title>
		<link>https://kumbiaphp.com/blog/2009/08/14/kumbiaphp_framework_1_0_beta1_liberada/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=kumbiaphp_framework_1_0_beta1_liberada</link>
					<comments>https://kumbiaphp.com/blog/2009/08/14/kumbiaphp_framework_1_0_beta1_liberada/#comments</comments>
		
		<dc:creator><![CDATA[Deivinson Tejeda]]></dc:creator>
		<pubDate>Fri, 14 Aug 2009 05:16:48 +0000</pubDate>
				<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[PHP frameworks]]></category>
		<category><![CDATA[anuncios]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Kumbia]]></category>
		<category><![CDATA[kumbiaphp]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[MVC framework]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[spirit]]></category>
		<guid isPermaLink="false">http://www.kumbiaphp.com/blog/?p=317</guid>

					<description><![CDATA[<p>Después de unos meses de arduo trabajo el Nuevo Equipo de Desarrollo de KumbiaPHP Framework se enorgullece en anunciar&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2009/08/14/kumbiaphp_framework_1_0_beta1_liberada/">KumbiaPHP Framework 1.0 Beta 1 Liberada!</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Después de unos meses de arduo trabajo el <em><a title="Equipo de Desarrollo de KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/Team_Development_KumbiaPHP_Framework" target="_blank" rel="noopener">Nuevo Equipo de Desarrollo de KumbiaPHP Framework</a></em> se enorgullece en anunciar el Beta 1 de la <strong><em>versión 1.0 codename Spirit</em></strong>, esta versión su enfoque principal estuvo en un refractor del <em>core</em> del framework, una reescritura completa de manera de tener un <strong><em>core</em></strong> muy consistente y mantenible, esto trae efectos directos en nuestros desarrollos de forma positiva, ya que se corrigieron conceptos que se vinieron arrastrando en versiones anteriores.</p>
<p><span id="more-317"></span></p>
<p><a title="KumbiaPHP Framework" href="https://www.kumbiaphp.com/" target="_blank" rel="noopener"><strong>KumbiaPHP</strong></a> 1.0 muestra múltiples mejoras que ofrecen al desarrollador mas posibilidades profesionales al momento de hacer las aplicaciones. Y el rendimiento en velocidad del nuevo core es extraordinario.</p>
<h2>Que hemos hecho</h2>
<ul>
<li>Una <em><a title="Estructura de Directorio de KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Nueva_Estructura_de_Directorios" target="_blank" rel="noopener"><strong>Estructura de Directorio</strong></a></em> totalmente desacoplada el <em>core</em> de nuestra aplicación, además de las <strong><em><a title="Ventajas de la estructura de directorio de kumbiaphp framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Ventajas_de_esta_nueva_estructura_de_directorios" target="_blank" rel="noopener">múltiples ventajas</a></em></strong> que ofrece una estructura de directorio tan convencional.</li>
<li>La <strong><em>clase Kumbia</em></strong> se eliminaron montones de líneas innecesarias que tenían como consecuencia <em>lentitud</em>. Una muestra de ello tenemos que la clase Kumbia en la versión <a href="http://bazaar.launchpad.net/~desarrollokumbia/kumbia/0.5/annotate/head%3A/library/kumbia/kumbia.php" target="_blank" rel="noopener"><strong>0.5 sobrepasa las 1000 líneas</strong></a>, mientras que en la versión 1.0 <a href="http://bazaar.launchpad.net/~desarrollokumbia/kumbia/spirit/annotate/head%3A/core/kumbia/kumbia.php" target="_blank" rel="noopener"><strong>apenas llega a las 100 líneas</strong></a> y siguen haciendo el mismo trabajo solo que mas optimizado :).</li>
<li>El <em><strong>Router y </strong></em><strong><em>Dispatcher</em></strong> fueron optimizados y mejorados múltiples métodos. En el caso del Router ya esta 100% funcional el manejo de rutas estáticas.</li>
<li><a title="Nueva Pantalla de Bienvenida de KumbiaPHP Framework" href="https://www.kumbiaphp.com/blog/2009/05/31/spirit_estrena_nueva_bienvenida/" target="_blank" rel="noopener"><em><strong>Nueva Pantalla de Bienvenida</strong></em></a> mas amigable y ofreciendo información de primera mano.</li>
<li>El manejo de <a title="Views de KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Vistas" target="_blank" rel="noopener"><strong><em>Vistas</em></strong></a> fue depurado en su totalidad, corrigiendo el uso de múltiples templates y mejoras de diseño para la escalabilidad de las aplicaciones.</li>
<li>La clase<strong><em> <a title="Cache de KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Cache" target="_blank" rel="noopener">Cache</a></em></strong> fue reescrita con soporte a varios drivers (file, sqlite, memsqlite) se irán agregando otros drivers.</li>
<li>Nueva clase para la inyección de dependencia <em><a title="Clase Load para la inyección de dependencia" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Carga_Selectiva.2C_Inyecci.C3.B3n_de_Dependencias_y_el_Componente_Load" target="_blank" rel="noopener"><strong>Load</strong></a></em> la cual permite cargar lo necesario donde se necesite. Al igual que la <a title="Carga Selectiva de Modelos" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Carga_selectiva_de_modelos" target="_blank" rel="noopener"><strong><em>Carga Selectiva de Modelos</em></strong></a>, esto trae como beneficio que sólo se cargan los modelos necesarios, donde se necesiten. Cosa que no era posible en versiones anteriores a la 1.0 ya que KumbiaPHP cargaba todos los modelos al inicio de la aplicación esto traía como consecuencia <em>lentitud.</em></li>
<li>Se ha depurado los <a title="Modos de Ejecución de KumbiaPHP" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Modos_de_una_Aplicaci.C3.B3n" target="_blank" rel="noopener"><strong><em>Modos de Ejecución</em></strong></a> de nuestra aplicación, ya sea producción o desarrollo. Esto hace que KumbiaPHP adopte cierto comportamiento de acuerdo al modo de ejecución, como lo puede ser el manejo de cache en modo de desarrollo no se hace necesario manejar cache.</li>
<li><a title="Pages Controller" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Pages_Controller" target="_blank" rel="noopener"><strong><em>Pages Controller</em></strong></a> para el manejo de paginas estáticas, aunque este puede ser utilizado como cualquier otro controller.</li>
<li>En <a title="ActiveRecord KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#ActiveRecord" target="_blank" rel="noopener"><strong><em>ActiveRecord</em></strong></a> se han mejorado todos los validadores y se ha creado el manejo de la meta-data en cache esto hace que el proceso de acceso a datos sea sumamente <em>rápido </em>cuando la aplicación es llevada a producción<em>.</em></li>
<li>Mejora en la <em><strong><a title="Persisntencia de Datos en los Controladores" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Persistencia_de_Datos_en_el_Controller" target="_blank" rel="noopener">Persistencia de Datos</a></strong></em> en el controlador, ahora es el programador quien decide que datos serán persistentes en la ejecución de la aplicación. Esto se traduce en mayor <em>rapidez,</em> ya que anteriormente KumbiaPHP hacia todos los datos persistentes, aunque no se utilizaran.</li>
<li>Nueva <strong><em>presentación de las excepciones</em></strong> donde se muestra información del error y como corregirlo de forma inmediata de manera que no se tenga que recurrir al manual y otros medios para la solución del mismo.</li>
<li><a title="Partial KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#views.2Fpartials.2F" target="_blank" rel="noopener"><strong><em>Partials</em></strong></a> para <a title="Paginadores de KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Vistas_de_Paginaci.C3.B3n" target="_blank" rel="noopener"><em><strong>Vistas de Paginadores</strong></em></a> ahora con una sola línea tenemos varios estilos de paginación (classic, digg, extended, punbb y simple) y podemos crear nuestros propios views de paginadores. También los partials ya no están atados a los controllers.</li>
<li>Mejoras en la clase <a title="Session KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Session" target="_blank" rel="noopener"><em><strong>Session</strong></em></a> se han quitado métodos que estaban descontinuados (deprecated).</li>
<li>Mejoras en la extensión <a title="Extensions Filter de KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Filter" target="_blank" rel="noopener"><em><strong>Filter</strong></em></a>.</li>
<li>Extensión <a title="Extensions Logger de KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit#Logger" target="_blank" rel="noopener"><em><strong>Logger</strong></em></a> reescrita para que sea totalmente estática.</li>
<li>&#8230;</li>
</ul>
<p>Podemos colocar un gran etc. ya que son algunos de los cambios a mencionar, hay otros que <em>no son visibles</em> por todos los usuarios ya que están en el <em>core,</em> pero como se dijo antes se traduce directamente en mejores prestaciones sobre nuestras aplicaciones. Sin duda alguna que esta versión ha sido un salto hacia delante en el avance del proyecto, siendo una versión muy estable.</p>
<h2>Que nos falta por hacer</h2>
<p>Entre los aspectos mas importante que nos falta por hacer sobre la <strong><em>versión 1.0</em></strong> y se irán entregando en los próximos betas están:</p>
<ul>
<li>Ell <em><strong>nuevo scaffold</strong></em> que tiene un concepción mas convencional, a la que se venia manejando con el componente StandardForm, el cual se convirtió <em>inmantenible</em>. Ya se tiene bastante trabajo adelantado para lo que será el nuevo scaffold el cual promete ser mas personalizable por los usuarios, cosa que es imposible de hacer con el actual StandarForm, donde el usuario podrá crear sus propios scaffold y ser compartidos con la comunidad de KumbiaPHP.</li>
<li>Migración de los helpers de forma total para que los mismos sean mucho mas rápidos y a su vez la adopción total de <a title="jQuery Framework Javascript" href="http://www.jquery.com" target="_blank" rel="noopener"><em>jQuery</em></a> como framework para el manejo de AJAX, pero con estos nuevos helpers sera muy fácil utilizar cualquier framework de javascript de nuestra preferencia.</li>
<li>Seguir mejorando la velocidad del core, aunque actualmente es rapidísima.</li>
</ul>
<h2>Nueva web para KumbiaPHP</h2>
<p>Por último, y no menos importante, estamos creando la <strong>nueva web</strong> que por supuesto usa KumbiaPHP 1.0 spirit. Dentro también habrá una sección para que la comunidad intercambie extensiones fácilmente.</p>
<p>Actualmente ya tenemos muchas extensiones, que se añaden con una simple línea de código para:</p>
<ul>
<li>Editores wysiwyg: tinymce, nicedit,&#8230;.</li>
<li>Google Maps</li>
<li>Mostrar RSS, Atom,&#8230;</li>
<li>Flickr</li>
<li>Captchas</li>
<li>etc etc</li>
</ul>
<p>Bueno, podríamos seguir hablando, pero mejor descarga la beta 1 de KumbiaPHP y notarás la diferencia en seguida (el Spirit).</p>
<p>La documentación con los cambios está en el <a title="Cambios en el manual para KumbiaPHP 1.0" href="http://wiki.kumbiaphp.com/KumbiaPHP_Framework_Versi%C3%B3n_1.0_Spirit">wiki: KumbiaPHP 1.0 Spirit</a>,  hasta que terminemos el nuevo manual.</p>
<h2><a title="Descarga KumbiaPHP Framework Versión 1.0 Spirit" href="http://sourceforge.net/projects/kumbia/files/Kumbia/KumbiaPHP%201.0/kumbiaphp_1.0b1.zip/download" target="_blank" rel="noopener">Descarga KumbiaPHP 1.0</a></h2>
<p><em>P.D: Diseñadores de la comunidad estáis invitados para ayudarnos en el diseño de la nueva web. Contactar por el IRC.</em></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2009/08/14/kumbiaphp_framework_1_0_beta1_liberada/">KumbiaPHP Framework 1.0 Beta 1 Liberada!</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2009/08/14/kumbiaphp_framework_1_0_beta1_liberada/feed/</wfw:commentRss>
			<slash:comments>31</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">317</post-id>	</item>
		<item>
		<title>Como usar los Modelos en KumbiaPHP</title>
		<link>https://kumbiaphp.com/blog/2009/08/07/como_usar_los_modelos_en_kumbiaphp/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como_usar_los_modelos_en_kumbiaphp</link>
					<comments>https://kumbiaphp.com/blog/2009/08/07/como_usar_los_modelos_en_kumbiaphp/#comments</comments>
		
		<dc:creator><![CDATA[Deivinson Tejeda]]></dc:creator>
		<pubDate>Fri, 07 Aug 2009 16:50:13 +0000</pubDate>
				<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[Documentación]]></category>
		<category><![CDATA[Kumbia]]></category>
		<category><![CDATA[kumbiaphp]]></category>
		<category><![CDATA[PHP frameworks]]></category>
		<guid isPermaLink="false">http://www.kumbiaphp.com/blog/?p=312</guid>

					<description><![CDATA[<p>Este post nace luego de una conversación en el IRC de KumbiaPHP dado por una duda de unos de&#8230;</p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2009/08/07/como_usar_los_modelos_en_kumbiaphp/">Como usar los Modelos en KumbiaPHP</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://www.kumbiaphp.com/blog/wp-content/uploads/ActiveRecord.jpg"><img loading="lazy" decoding="async" class="aligncenter" style="padding: 10px;" title="ActiveRecord" src="https://www.kumbiaphp.com/blog/wp-content/uploads/ActiveRecord.jpg" alt="" width="225" height="182" /></a>Este post nace luego de una conversación en el <a title="IRC KumbiaPHP Framework" href="https://www.kumbiaphp.com/blog/irc/" target="_blank" rel="noopener"><em>IRC de KumbiaPHP</em></a> dado por una duda de unos de nuestro usuarios ya que deseaba realizar una consulta SQL, lo cierto del caso es que dicha consulta «pensaba» desde el controller siento esto totalmente <strong><em>incorrecto</em></strong>, ya que no respeta el MVC y en este sentido se ha creado en la <a title="Wiki KumbiaPHP Framework" href="http://wiki.kumbiaphp.com" target="_blank" rel="noopener">Wiki de KumbiaPHP Framework</a> una explicación del <strong><em>correcto</em></strong> <strong><a title="Como Usar los Modelos en KumbiaPHP Framework" href="http://wiki.kumbiaphp.com/Como_Usar_los_Modelos_en_KumbiaPHP">uso de los modelos dentro de KumbiaPHP</a></strong>, de manera tal que se aproveche al máximo las bondades propias del Framework.</p>
<p><span id="more-312"></span>Dejo la conversación:</p>
<p><em>&lt;Deyabu&gt; alguien tiene un minuto? tengo una dudilla en el 0.5 :P<br />
 &lt;CaChi&gt; di<br />
 &lt;Deyabu&gt; tengo ke hace runa consulta a dos tablas y mostrar el resultado..<br />
 &lt;Deyabu&gt; lo hago con un find_by_sql?<br />
 &lt;CaChi&gt; ok<br />
 &lt;CaChi&gt; find_by_all_sql<br />
 &lt;CaChi&gt; voten si aun falta alguno<br />
 &lt;Deyabu&gt; seria.. $this-&gt;consulta1 = $this-&gt;ejemplo-&gt;find_by_all_sql<br />
 &lt;CaChi&gt; seria mejor que lo hicieras en el modelo<br />
 &lt;joanhey&gt; depende<br />
 &lt;CaChi&gt; osea haz un método en el modelo<br />
 &lt;joanhey&gt; si eso sip<br />
 &lt;CaChi&gt; y los llamas en tu controller queda mas limpio<br />
 &lt;joanhey&gt; usad siempre el modelo<br />
 &lt;Deyabu&gt; peor, tengo 2 modelos, 1 por cada una de esas tablas :P<br />
 * lucasan (Lucas_Torr@CJ8QBM.BwIdCk.virtual) has left #kumbia<br />
 &lt;CaChi&gt; y?<br />
 &lt;Deyabu&gt; en cual de los dos modelos lo hago? :P<br />
 &lt;CaChi&gt; el que mas te guste<br />
 &lt;CaChi&gt; es un SQL<br />
 &lt;CaChi&gt; eso no importa<br />
 &lt;Deyabu&gt; ok ok<br />
 &lt;CaChi&gt; el modelo en este caso es solo un medio de transporte para ejecutar el sql<br />
 &lt;CaChi&gt; $this-&gt;consulta1 = $this-&gt;ejemplo-&gt;miMetodo()<br />
 &lt;joanhey&gt; segun la consulta<br />
 &lt;joanhey&gt; es mejor en uno o en otro<br />
 &lt;joanhey&gt; pero por lo demas da lo mismo<br />
 &lt;Deyabu&gt; aja&#8230;<br />
 &lt;CaChi&gt; pienso que iria bien en el modelo que tiene la FK del otro<br />
 &lt;CaChi&gt; el modelo padre por asi decirlo<br />
 &lt;joanhey&gt; es decir<br />
 &lt;Deyabu&gt; y en el modelo, como deberia estar ?<br />
 &lt;joanhey&gt; Articulos-&gt;conTags<br />
 &lt;joanhey&gt; Tags-&gt;articulos<br />
 &lt;joanhey&gt; eso depende de tu consulta<br />
 &lt;joanhey&gt; y como lo usaras<br />
 &lt;joanhey&gt; ahora te paso uno<br />
 * darghex1 (darghex@CZGfAu.DrI8H6.virtual) has joined #kumbia<br />
 &lt;Deyabu&gt; ok &#8230; grax<br />
 &lt;joanhey&gt; http://kumbia.pastebin.com/m259db340<br />
 &lt;joanhey&gt; alli tienes el buscar<br />
 &lt;joanhey&gt; y de paso lo puedes usar en otros controller<br />
 &lt;joanhey&gt; por ejemplo<br />
 &lt;Deyabu&gt; ahi lo estoy viendo..<br />
 &lt;joanhey&gt; http://www.copasapobla.com/club/rcd_mallorca/<br />
 &lt;joanhey&gt; en el controller club<br />
 &lt;joanhey&gt; lo uso para enseñar las noticias que hablan de ese club<br />
 &lt;joanhey&gt; al estar en el modelo es facil<br />
 &lt;joanhey&gt; en el controller club<br />
 &lt;joanhey&gt; hago 2 llamadas<br />
 &lt;joanhey&gt; una para que me de los datos del club<br />
 &lt;joanhey&gt; Clubs-&gt;find(id)<br />
 &lt;joanhey&gt; y despues<br />
 &lt;joanhey&gt; Articulos-&gt;buscar( $club-&gt;nombre=<br />
 &lt;joanhey&gt; )<br />
 &lt;Deyabu&gt; aja&#8230;<br />
 &lt;joanhey&gt; y no te repites<br />
 &lt;joanhey&gt; al estar en el modelo todo es mas facil<br />
 &lt;joanhey&gt; y mas reutilizable<br />
 &lt;Deyabu&gt; pero esta en el modelo del Club&#8230;.<br />
 &lt;joanhey&gt; la logica debe estar en el modelo siempre<br />
 &lt;joanhey&gt; no<br />
 &lt;joanhey&gt; mira el modelo que te pase<br />
 &lt;joanhey&gt; es el de Articulos<br />
 &lt;Deyabu&gt; ahh ahhh ya entendo :P<br />
 &lt;joanhey&gt; el modelo<br />
 &lt;joanhey&gt; esta para que crees tus propios metodos<br />
 &lt;joanhey&gt; sobre esa tabla<br />
 &lt;joanhey&gt; y tu despues lo llamas de donde quieras<br />
 &lt;Deyabu&gt; y lo llamas $this-&gt;articulos=$buscar()<br />
 &lt;Deyabu&gt; ?:P<br />
 &lt;joanhey&gt; la logica debe estar en el modelo<br />
 &lt;joanhey&gt; no<br />
 &lt;joanhey&gt; no se llama asi<br />
 &lt;CaChi&gt; :S<br />
 &lt;joanhey&gt; $this-&gt;Articulos-&gt;buscar($busqueda);<br />
 &lt;Deyabu&gt; :S perdi mis apuntes :P<br />
 &lt;Deyabu&gt; ok.. ahi guado eso :P<br />
 &lt;joanhey&gt; el ActiveRecord de KumbiaPHP<br />
 &lt;joanhey&gt; tiene creados por defecto ya<br />
 &lt;joanhey&gt; para tener la vida mas facil<br />
 &lt;joanhey&gt; tienes el find, find_all, update, &#8230;..<br />
 &lt;joanhey&gt; pero lo suyo es que tu crees los tuyos propios<br />
 &lt;joanhey&gt; con mas logica<br />
 &lt;joanhey&gt; que es diferente para cada app<br />
 &lt;joanhey&gt; por ejemplo<br />
 &lt;joanhey&gt; ultimos<br />
 &lt;joanhey&gt; me muestra los ultimos articulos a partir de hoy<br />
 &lt;joanhey&gt; en orden descendente de fecha<br />
 &lt;Deyabu&gt; sip&#8230;<br />
 &lt;joanhey&gt; Articulos-&gt;ultimos()<br />
 &lt;joanhey&gt; y listo<br />
 &lt;joanhey&gt; y lo puedo usar donde quiera<br />
 </em></p>
<p>La entrada <a href="https://kumbiaphp.com/blog/2009/08/07/como_usar_los_modelos_en_kumbiaphp/">Como usar los Modelos en KumbiaPHP</a> se publicó primero en <a href="https://kumbiaphp.com/blog">KumbiaPHP Framework PHP en español</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://kumbiaphp.com/blog/2009/08/07/como_usar_los_modelos_en_kumbiaphp/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">312</post-id>	</item>
	</channel>
</rss>
