Introducción al patrón MVC con CodeIgniter

Selección_066

Sigue leyendo

Anuncios

Instalar Codeigniter 2.0.2 y ocultar index.php

Instalar Codeigniter 2.0.2

– Descargar .zip http://codeigniter.com/

– Descomprimir directorio en la raíz del servidor. Este contiene :

  • application
  • system
  • index.php

– En application/config/config.php editar:

$config['base_url'] = 'http://localhost/directorio_descomprimido/';

Si hemos descomprimido en la raíz los elementos application, system y index.php

$config['base_url'] = 'http://localhost/';

Quitar la propiedad index.php

$config['index_page'] = '';

Configurar el lenguaje para algunas librerias(opcional)

$config['language'] = 'spanish';

El paquete de idioma se descarga de aquí , después se descomprime el directorio spanish en system/language.

Se configura una clave de cifrado para las sesiones(opcional)

$config['encryption_key'] = '*******************************';

– En application/config/autoload.php editar:

$autoload['helper'] = array('url');

Para usar base de datos, editar también

$autoload['libraries'] = array('database');

– En application/config/database.php editar:

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'user';
$db['default']['password'] = '*****';
$db['default']['database'] = 'db_name';
$db['default']['dbdriver'] = 'mysql';

– Añadir un .htaccess al mismo nivel que los directorio que conforman el sistema Codeigniter:

  • application
  • system
  • .htaccess
  • index.php

– asegurarnos que nuestro servidor apache tiene el modulo mod_rewrite activado.

– en el .htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    #Elimina el acceso de hackers a la carpeta del sistema
    #Además esto le permitirá crear un controlador de System.php
    #"system" puede ser reemplazado si ha cambiado el nombre la carpeta del sistema.
    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /directorio_CI/index.php?/$1 [L]

    #Cuando la carpeta de la aplicación no está dentro de system
    #Esto impide el acceso de hacker a la carpeta de la aplicación
    #'application' cambiarlo si el nombre de la carpeta application es otro.
    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /directorio_CI/index.php?/$1 [L]

    #Comprueba si el usuario está intentando acceder a un archivo válido,
    #como un documento de imagen o CSS, si esto no es cierto
    #se redirecciona a index.php
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /directorio_CI/index.php?/$1 [L]
</IfModule>

#si no esta activo el modulo mod_rewrite de apache
#para un recurso no encontrado se lanza un error 404 cargando index.php
<IfModule !mod_rewrite.c>
    ErrorDocument 404 /directorio_CI/index.php
</IfModule>

Si no tenemos los archivos dentro de ningún directorio por ejemplo “directorio_CI” :

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?/$1 [L]
</IfModule>

<IfModule !mod_rewrite.c>
    ErrorDocument 404 /index.php
</IfModule>

Integrar CKEditor y CKFinder

Pasos para integrar el editor CKEditor y el gestor de archivos CKFinder.

1 – Descargar los componentes.

http://ckeditor.com/download

http://ckfinder.com/download

2 – Descomprimirlos en un directorio del proyecto, por ejemplo en el directorio /js

3 – Añadir al head los scripts, se parte de un archivo al mismo nivel que el directorio js. En ese archivo hay también el formulario con el textarea.

<script type="text/javascript" src="js/ckeditor/ckeditor.js">
</script>
<script type="text/javascript" src="js/ckfinder/ckfinder.js">
</script>
<script type="text/javascript" src="js/ckscript.js"></script>

<textarea class="ckeditor" name="art_texto" cols="79" rows="15">
</textarea>

ckscript.js es el archivo javascript que servirá para establecer parametros de configuración del editor CKEditor(opcionalmente) y para integrar CKFinder con CKEditor.

En el textarea se añade un class=”ckeditor” para que el editor aparezca, el valor del name nos servirá para crear una instancia y relacionar ckeditor con ckfinder, esa instancia también puede servir para configurar parámetros del editor.

4 – Crear archivo ckscript.js y añadir lo siguiente:

se usa JQuery para asegurarse que el DOM se ha cargado.

$(document).ready(function(){
    var editor = CKEDITOR.replace('art_texto');
    CKFinder.setupCKEditor( editor, 'js/ckfinder/' ) ;
})

Primero se crea una instancia del editor y se guarda en una variable, en la siguiente instrucción se configura el CKFinder para enlazarlo con el editor. Para ello se indica la variable con la instancia en el primer parámetro y en el segundo parámetro la ruta del directorio ckfinder. (la ruta se parte del archivo donde se incluye el ckscript.js, el que tiene el head con el textarea)

5 – En el archivo config.php dentro del directorio ckfinder editar:

function CheckAuthentication()
{

	return true;
}

Establecer a true si esta en none.

$baseUrl = '/dir/js/ckfinder/userfiles/';

Indicar la ruta partiendo de la raíz del servidor hasta el directorio donde se desee que se guarden las imágenes. En este caso se ha indicado el directorio userfiles dentro de ckfinder pero podría ser otro distinto. Asegurarse que el directorio tiene permisos de escritura.

Agregar soporte de CodeIgniter en IDE

Trabajando con un IDE y CodeIgniter uno se encuentra que no hay soporte de complementación de código total ya que el IDE no deduce qué funciones o variables se desprenden de cada objeto.

Por ejemplo, dos líneas básicas de CodeIgniter:

</pre>
$this->load->library(“upload”);

$this->upload->do_upload(“file”);

En la primera línea cargamos la librería Upload de CodeIgniter, la cual queda instanciada en la propiedad $this->upload del controlador. No hay manera de que el IDE pueda deducir esto, ya que $this->upload es una propiedad que no está declarada explícitamente en la clase, en cambio es creada dinámicamente en tiempo de ejecución. En consecuencia, ningún IDE tiene manera de deducir que $this->upload contiene el método do_upload() ni ningún otro.

Solución:

Crear una extensión de la clase CI_Controller de system/core y añadir unas declaraciones por cada clase del sistema y por cada clase propia.

<?php

if (!defined('BASEPATH'))
    exit('No deseo permitir acceso directo a este script');

/**
 * @property CI_Benchmark $benchmark
 * @property CI_Calendar $calendar
 * @property CI_Cart $cart
 * @property CI_Config $config
 * @property CI_Email $email
 * @property CI_Encrypt $encrypt
 * @property CI_Upload $upload
 * @property CI_Form_validation $form_validation
 * @property CI_FTP $ftp
 * @property CI_Table $table
 * @property CI_Image_lib $image_lib
 * @property CI_Input $input
 * @property CI_Jquery $jquery
 * @property CI_Loader $load
 * @property CI_Language $lang
 * @property CI_Output $output
 * @property CI_Pagination $pagination
 * @property CI_Security $security
 * @property CI_Session $session
 * @property CI_Trackback $trackback
 * @property CI_Parser $parser
 * @property CI_Typography $typography
 * @property CI_Unit_test $unit
 * @property CI_URI $uri
 * @property CI_User_agent $agent
 * @property CI_Xmlrpc $xmlrpc
 * @property CI_Zip $zip
 * @property CI_Xmlrpcs $xmlrpcs
 * @property CI_Log $log
 * @property CI_Cache $cache
 * @property CI_Profiler $profiler
 * @property CI_SHA1 $sha1
 *
 * @property CI_DB_active_rec $db
 * @property CI_DB_forge $dbforge
 *
 * @property MY_Appconfig $appconfig
 * @property MY_Messages $messages
 * @property MY_Template $template
 * @property MY_Utilities $utilities
 */
class MY_Controller extends CI_Controller {

    //constructor, debe llamar al constructor de la clase parent
    public function __construct() {
        parent::__construct();
        // Your own constructor code
    }

}

?>

*las ultimas son librerías propias (Appconfig, Messages, Template y Utilities son librerías que pertenecen a la aplicación y no al system).

Esta extensión de CI_Controller lo guardamos como MY_Controller.php en application/core  y en los controladores que se vayan creando usar esta extensión.

class Inicio extends MY_Controller {

    //constructor en PHP5
    function __construct() {
        parent::__construct();

        // cargo una libreria para comprobar el soporte
        $this->load->library('form_validation');
        $this->form_validation->set_rules($field);
    }.....

*Se ha usado la versión 2.0.2 de Codeigniter

Para más información sobre las clases del sistema, su listado y propiedades visitar la documentación en línea.

http://codeigniter.com/user_guide/toc.html