php suprimir warnings

en el archivo .htaccess

# PHP error handling for development servers
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_flag log_errors on
php_flag ignore_repeated_errors off
php_flag ignore_repeated_source off
php_flag report_memleaks on
php_flag track_errors on
php_value docref_root 0
php_value docref_ext 0
php_value error_log /home/path/public_html/domain/php_errors.log
php_value error_reporting -1
php_value log_errors_max_len 0

Maximum Execution Time Exceeded in WordPress

en el archivo .htaccess  de la raiz de tu proyecto agregar las sgts lineas (en negrita)

<IfModule mod_rewrite.c>
php_value max_execution_time 300
php_value max_input_time 300
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

eclipse The declaration for the entity "ContentType" must end with '>'.

  • right click on Project -> Resource -> Resource Filters
  • click on Add filter....You should then select: Exclude all, Applies to folders, Name matches node_modules
  • Press ok and you should be good to go.

Conectar cliente Minecraft PC a server Pocketmine

1) en el cliente PC "edit profile" y en la opcion de "use version" seleccionar release 1.8
2)en el pocketmine-server colocar el phar del plugin BigBrother.
(descargarlo desde: https://github.com/shoghicp/BigBrother/releases)
3)startear el server
4)play el cliente PC, seleccionar multiplayer y aparecerá en la lista de servidores el de pocketmine




minecraft Crear plugin pocketmine

1) descargar el server de pocketmine e instalar con el wizard
http://www.pocketmine.net/

2) descargar los fuentes que nos serviran para extender nuestras clases
https://github.com/pmmp/pocketmine-mp

En ECLIPSE:
3) crear un proyecto PHP

4)  agregar los fuentes para extender nuestras clases
click derecho ->include parh->configure path

en la pestaña de libraries, click en el boton "add external source folder"
y seleccionar la carpeta entera extraida en el paso (2) o la subcarpeta "src"

5) crear nuestra carpeta source

click derecho ->build path->new source folder

llamarla "src" .

6) en src crear nuestra estructura de directorios (p.e: si es ar\com\cmd\mc\bugreport crear esas 5 carpetas)

7) crear nuestro archivo main , crearemos un archivo llamado BugReport.php

<?php
namespace ar\com\cmd\mc\bugreport;
use pocketmine\plugin\PluginBase;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;

class BugReport extends PluginBase{
    public function onEnable(){
        $this->getLogger()->info("onEnable() has been called!");
    }
    public function onDisable(){
        $this->getLogger()->info("onDisable() has been called!");
    }
    public function onLoad(){
        $this->getLogger()->info("onLoad() has been called!");
    }
    public function onCommand(CommandSender $sender, Command $command, $label, array $args){
        $commandName = $command->getName();
        $this->getLogger()->info("commando: ".$commandName);
        if($commandName === "bugs"){
           
       
            return true;
        }
        return false;
    }
}

8) en la raiz del proyecto crear el archivo plugin.yml

name: BugReport
main: ar\com\cmd\mc\bugreport\BugReport
version: 1.0.0
api: 1.0.0
commands:
  bugs:
    description: show latest bugs reported
    usage: /bugs <limit>

9) exportar el proyecto

click derecho-> export

seleccionar PHP/Phar export

y en la sgt pantalla seleccionar como destino la carpeta donde instalamos el pocket mine server (paso #1)
en mi caso será

C:\Users\ibazan\PocketMine-MP\plugins\bugreport.phar

10) si el server esta ejecutandose, recargarlo con el comando:

reload

fuente:
https://github.com/PocketMine/Documentation/wiki/Plugin-Tutorial


yii2 file input kartik widget

ejecutar este par de sentencias:
composer require kartik-v/bootstrap-fileinput "@dev"
composer require kartik-v/yii2-widget-fileinput "@dev"

la idea es poder guardar  una imagen en una carpeta del sitio:

nuestro modelo tiene una campo que guarda solo el nombre del archivo: $image_name

vamos a crear un campo virtual llamado $image que hace referencia al archivo de imagen que se envia desde el formulario:

class Notifications extends \yii\db\ActiveRecord
{

    var $image;




para usarlo en una vista:

use kartik\file\FileInput;

<?= $form->field($model, 'image')->widget(FileInput::classname(), [
              'options' => ['accept' => 'image/*'],
               'pluginOptions'=>['allowedFileExtensions'=>['jpg','gif','png'],'showUpload' => false,],
          ]);   ?>

en el controller:

use yii\web\UploadedFile;

public function actionCreate() {
        $model = new Notifications ();
      
        if ($model->load ( Yii::$app->request->post () )) {
            $image = UploadedFile::getInstance ( $model, 'image' );
            if (!is_null( $image )) {
                $model->full_image_url = $image->name;
                $ext = end ( (explode ( ".", $image->name )) );
                // generate a unique file name to prevent duplicate filenames
                $model->full_image_url = Yii::$app->security->generateRandomString () . ".{$ext}";
                // the path to save file, you can set an uploadPath
                $uploadPath = Yii::$app->basePath . '/upload-folder/';
                $path = $uploadPath. $model->image_name;
                $image->saveAs ( $path );
            }
            if ($model->save ()) {
                return $this->redirect ( [
                        'view',
                        'id' => $model->id
                ] );
            }
        }

fuente:
https://github.com/kartik-v/yii2-widget-fileinput


yii2 materialize

1) usando widget de wiisoft

fuente:
https://github.com/wiisoft/yii2-materialize

desde consola y dentro de la carpeta de tu proyecto recientemente creado ejecutar la sgt sentencia

composer require --prefer-dist wiisoft/yii2-materialize "*"
 
listo, ahora se debe cambiar hacer los sgts cambios en views/layouts/main.php
 
use wii\materialize\Nav;
use wii\materialize\NavBar;
 
<body>
<?php $this->beginBody() ?>

  <header>
      <?php
      NavBar::begin([... 
         ...
      NavBar::end();
      ?> 
  </header>
  <main>
     <div class="container">
      ... 
     <?= $content ?>
     </div>
  </main>
  <footer class="page-footer">

     <div class="container">
      ...
     </div>
     ...
  </footer> 




yii2 crear proyecto usando composer

abrir una consola e ir a la carpeta de acceso web,
en mi caso que uso xampp voy a htdocs
y ejecuto la siguiente sentencia:

composer create-project --prefer-dist --stability=dev yiisoft/yii2-app-basic NOMBRE_PROYECTO

MYSQL como remover de una tabla una columna con indice

Simplemente:

 DROP INDEX [nombre_de_columna] ON [nombre_de_tabla];

MYSQL como setear un campo con el valor de una tabla relacionada

en este ejemplo tengo una relacion recursiva de la tabla items
donde la columna parent_id hace referencia al id de algun registro de la misma tabla.

Lo que queria es setear el campo name de los hijos con el mismo name del padre, entonces:

UPDATE items i INNER JOIN items p
    ON i.parent_id = p.id
SET i.name = p.name

yii2 quitar la barra inferior de debug yii-debug-toolbar

en index.php (el que se encuentra en la raiz del proyecto)

//defined('YII_DEBUG') or define('YII_DEBUG', true); // desarrollo
//defined('YII_ENV') or define('YII_ENV', 'dev'); // desarrollo
defined('YII_DEBUG') or define('YII_DEBUG', false); // produccion
defined('YII_ENV') or define('YII_ENV', 'prod'); //produccion

yii2 convertir un controller en un webservice restful

1)

tomar un controller existente y crear otro igual con distinto nombre.
Por ejemplo ItemsController.php -> Ws_itemsController.php

2)

hacer las sgts modificaciones

class Ws_itemsController extends ActiveController
{
    /**
     * @inheritdoc
     */
    // adjust the model class to match your model
    public $modelClass = 'app\models\Items';

    public function behaviors()
    {
        return
        \yii\helpers\ArrayHelper::merge(parent::behaviors(), [
                'corsFilter' => [
                        'class' => \yii\filters\Cors::className(),
                ],
               
               
        ],

        [
                'verbs' => [
                        'class' => VerbFilter::className(),
                        'actions' => [
                                'delete' => ['POST'],
                        ],
                ]
        ]);
    }


3)

en web.php
...
'urlManager' => [
            ....
            'rules' => array(
                 ......
                ['class' => 'yii\rest\UrlRule', 'controller' => ['ws_items']],
            ),
        ],
...

4)

en web.php
Opcionalmente, para que pueda aceptar como imput json
 ....
'components' => [
                'request' => [
                        .....
                        'parsers' => [
                                'application/json' => 'yii\web\JsonParser',
                        ]

                ],

5)

GET /ws_items: list all books page by page;
HEAD /ws_items: show the overview information of book listing;
POST /ws_items: create a new book;
GET /ws_items/123: return the details of the book 123;
HEAD /ws_items/123: show the overview information of book 123;
PATCH /ws_items/123 and PUT /books/123: update the book 123;
DELETE /ws_items/123: delete the book 123;
OPTIONS /ws_items: show the supported verbs regarding endpoint /books;
OPTIONS /ws_items/123: show the supported verbs regarding endpoint /books/123.



Yii2 acceder a los controllers solo si se está logueado

en controller.php


en el metodo beforeAction($action){

if(Yii::$app->user->isGuest && !($action->controller->id == 'site' && $action->id == 'login'))
            {
                $this->redirect(array('site/login'));
            }

}

yii2 agregar codigo javascript jquery en una vista


<?php
use yii\web\View;
$this->registerJs("

$(document).ready(function(){

    $(':checkbox').each(function (index, value){
          var valor = $(this).val();
        if($.isNumeric(valor)){
            //console.log(index);
           var html=$('.dropdown-menu label:eq('+index+')').html();
           html=html+'<img src=http://www.minecraft-servers-list.org/plugins/MinecraftIdList/img/126-2.png>';
            $('.dropdown-menu label:eq('+index+')').html(html);
        }else{
            console.log('NO es numero');
       
        }
 
});

});
", View::POS_READY);

?>

MYSQL como hacer accesible una base de datos local en una red

ejecutar en alguna consola cliente de base de datos:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '<roots-password>' WITH GRANT OPTION;

yii2 quitar index.php de la url

crear un archivo llamado .htaccess en la raiz del proyecto con el sgt contenido:

RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php


en config/web.php agregar:

'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'showScriptName' => false,
            'enablePrettyUrl' => true,
            'rules' => array(
                  '<controller:\w+>/<id:\d+>' => '<controller>/view',
                  '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                  '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            ),
        ],

yii2 como sacar el web de la url

copie el contenido de la carpeta web a la raiz del proyecto

en index.php actualice los links

<?php
    defined('YII_DEBUG') or define('YII_DEBUG', false);
    defined('YII_ENV') or define('YII_ENV', 'dev');

    require(__DIR__ . '/../vendor/autoload.php');
    require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

    $config = require(__DIR__ . '/../config/web.php');
    (new yii\web\Application($config))->run();
 
 
por:
 
<?php
    defined('YII_DEBUG') or define('YII_DEBUG', false);
    defined('YII_ENV') or define('YII_ENV', 'dev');

    require(__DIR__ . '/vendor/autoload.php');
    require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');

    $config = require(__DIR__ . '/config/web.php');
    (new yii\web\Application($config))->run(); 

yii2 guardar modelos y sus relaciones

vamos a usar la siguiente extension


https://packagist.org/packages/la-haute-societe/yii2-save-relations-behavior

la descargamos usando composer

composer require --prefer-dist la-haute-societe/yii2-save-relations-behavior "*"
 
en mi caso tengo 2 clases una Grupo e Item, donde 
un grupo tiene muchos items y cada item pertenece a un solo grupo.
 
editamos el modelo de Grupo
 
use lhs\Yii2SaveRelationsBehavior\SaveRelationsBehavior;

class Grupo extends \yii\db\ActiveRecord
{
   
    public function behaviors()
    {
        return [
           'saveRelations' => [
                'class'     => SaveRelationsBehavior::className(),
                'relations' => ['items']
            ],
        ];
    }
 
 
 


yii2 usando composer

1) descargar e instalar composer para windows

https://getcomposer.org/download/

2) agregar en las variables de entorno PATH
 la carpeta donde se guardó composer.phar

usalmente será: C:\ProgramData\ComposerSetup\bin

3) instalando un widget
por ejemplo el multiselect

https://github.com/2amigos/yii2-multi-select-widget

en el readme dice que en la carpeta root del proyecto por consola tiremos este comando

php composer.phar require 2amigos/yii2-multi-select-widget "*"
 
pero vamos a usar
 
composer require 2amigos/yii2-multi-select-widget "*" 


esta será la salida

./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Reading bower.json of bower-asset/jquery (1.10.0)
Could not fetch https://api.github.com/repos/jquery/jquery-dist/contents/bower.j
son?ref=2c62b787b2cafb32af14edadc963b8ba3cb847b8, please create a GitHub OAuth t
oken to go over the API rate limit
Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+
on+CGWKS588+2016-08-18+2213
to retrieve a token. It will be stored in "C:/Users/ibazan/AppData/Roaming/Compo
ser/auth.json" for future use by Composer.
Token (hidden):


copiar la url que nos indican (https://github.com/settings/tokens/new?scopes=repo&description=Composer+
on+CGWKS588+2016-08-18+2213) ingresar con nuestro usuario de github y obtener el token, pegarlo (no se verá) y darle enter
para que continue con la bajada de archivos
 
 

Token stored successfully.
  - Installing 2amigos/yii2-multi-select-widget (0.1.1)
    Downloading: 100%

Writing lock file
Generating autoload files 






 



yii 2 empezando

1) instalarlo via composer o descargar el zip con la ultima version.

http://www.yiiframework.com/download/

en el zip al descomprimir hay una carpeta llamada basic, cambiarle el nombre al de tu proyecto y colocarlo en una carpeta de publicacion web.

xampp/htdocs

entrar a web.php y escribir un numero de clave cualquiera

config/web.php 

'cookieValidationKey' => 'enter your secret key here',
 
2) conectarse a la bd

en web/config.db

3) generar codigo con gii

http://localhost/economy-admin/web/index.php?r=gii

( en las secciones de model generator y crud generator tildar las opcion de i18n )

4) habilitar i18n:

en la carpeta del proyecto por linea de comando

yii message/config @app/config/i18n.php

esto creará el archivo i18n.php en config

se puede editar las sgts entradas del archivo para volver a generar las carpetas con los archivos de idiomas 
(por default ya vienen en vendor/yiisoft/yii2/messages)

...
'sourcePath' => __DIR__. DIRECTORY_SEPARATOR .'..',
'messagePath' => __DIR__ . DIRECTORY_SEPARATOR . 'messages',

'languages' => ['es'],
...

(en este caso le estamos diciendo que los genere dentro de la carpeta config/messages, que debemos crear previamente)

en la carpeta por linea de comando:

yii message/extract @app/config/i18n.php

luego editar config/web.php 
y agregar la sgt linea 

'language'=>'es', // spanish




esto generará 2 archivos en la carpeta messages/es:
yii.php con las entradas comunes a todo el proyecto
app.php  con las entradas particulares del proyecto como las labels de los modelos.
[no tengo manera de que lea las entradas de t('app','xxx xxx') BUG]



 


git repositorio remoto

1) crear un repositorio remoto en github

https://github.com

loguearte
y hacer click en el "+" del extremo superior derecho
seguir los pasos correspondientes.

en mi caso cree uno llamado webazan que tiene la sgt url

https://github.com/israelbazan76/webazan.git

2) agregar elrepositorio remoto

git remote add origin https://github.com/israelbazan76/webazan.git

3) ahora ya podemos enviar nuestros commits al servidor remoto.

The name of our remote is origin and the default local branch name is master. The -u tells Git to remember the parameters, so that next time we can simply run git push

(nos va a aparecer un popup para loguearnos al github por unica vez)

git push -u origin master

(al crear nuestro repositorio remoto nos indican que creemos un readme https://help.github.com/articles/create-a-repo/ lo que provocara que no podamos hacer el push, entonces vamos a mofificar el comando agregando el parametro -f para forzar el push)

git push -f origin master

Counting objects: 8, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (8/8), 2.25 KiB | 0 bytes/s, done.
Total 8 (delta 1), reused 0 (delta 0)
To https://github.com/israelbazan76/webazan.git
 + 0b296cd...627080b master -> master (forced update) 


4) si agregamos un nuevo archivo luego de agregarlo a nuestro master local con git add "*.php" 
y lo commiteamos con git commit -m "algun comentario"
ya lo podremos pushear asi:

git push origin master

Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 682 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
To https://github.com/israelbazan76/webazan.git
   627080b..4613798  master -> master 


5) si agregamos al stage

git add "datos.sql"

lo podemos quitar del stage

git reset datos.sql

6) para regresar todo lo local al estado del ultimo commit

git checkout -- datos.sql 

7) si en una carpeta iniciada en git (git init) clonamos un repo remoto (git clone https://github.com/israelbazan76/webazan.git) para poder pushear debemos hacer todo el proceso de add y commit que conocemos.
no solo eso sino que ademas debemos linkear la carpeta con el repo (git remote add origin https://github.com/israelbazan76/webazan.git) asi le asigna el nombre por default de "origin" y pullear con el parametro que permite mergear las historias no relacionadas (git pull origin master --allow-unrelated-histories) calculo que es por el "readme" que no se clona

8) si haces algun cambio en un archivo y quieres ver la diferencia con el que está en tu repo local
usa

C:\Users\ibazan\test-git-1>git diff head
diff --git a/webazan/view.php b/webazan/view.php
index e463698..14bc399 100644
--- a/webazan/view.php
+++ b/webazan/view.php
@@ -2,7 +2,7 @@
 /* @var $this UsersController */
 /* @var $model Users */

-/**holaaaaaaaaaaaaaaa**/
+/**holaaaaaaaaaaaaaaa chauuuuuuuuuuuuuu**/
 ?>

en el ejemplo se agregó "chauuuuuuuuuuuuuu"

entonces, luego de add y commit git diff head no devolverá nada (el archivo será el mismo no habiendo ninguna diferencia)

Crear JAVA RESTful Webservices con Jersey - dynamic web project maven project JSON

Jersey RESTful Web Services framework is an open source framework for developing RESTful Web Services in Java.

1)  Crear el proyecto
click derecho / new / dynamic web project

por ejemplo
en porject name : services-api

2) Crear el deployment descriptor file (osea el web.xml)

click derecho sobre el proyecto/ java EE tools/ generate deployment descriptor stub

3) editar el web.xml

ir a WebContent/WEB-INF/web.xml

agregar las sgts lineas
.....

<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
4) convertir el proyecto a uno de tipo maven
(eso lo hacemos para poder agregar librerias como por ejemplo para manipular json)
click derecho sobre el proyecto/ configure / convert to maven project
5) editar el archivo pom.xml 
agregar las sgts lineas
<dependencies>
<dependency>
<groupId>asm</groupId>
<artifactId>asm-all</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.14</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency>
</dependencies>
6) Crear la clase con los servicios
click dere. sobre el proyecto/ new / class
package> com.example
name> MyApiServices
en este ejemplo el servicio recibira por POST datos en formato json
y unicamente devolvera lo que recibe.
@Path("/")
public class MyApiServices {
@POST
@Path("/myApiService")
@Consumes(MediaType.APPLICATION_JSON)
public Response apiREST(InputStream incomingData) {
StringBuilder builder = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new InputStreamReader(incomingData));
String line = null;
while ((line = in.readLine()) != null) {
builder.append(line);
}
} catch (Exception e) {
System.out.println("Error Parsing: - ");
}
System.out.println("Datos recibidos: " + builder.toString());
// return HTTP response 200 in case of success
return Response.status(200).entity(builder.toString()).build();
}
 }
 7) agregar el proyecto al Tomcat Server

en la pestaña de Servers 
click derecho sobre el servidor creado previamente (en mi caso Tomcat v8.0 Server at localhost)

add/remove y agregamos nuestro pyecto.

8) ejecutar el Tomcat Server y testear el service

-click dere sobre el server y "start"

en firefox usamos la extension REstClient http://restclient.net/

en HEADER crear Content-type : application/json

Method: POST

Url: http://localhost:8080/services-api/api/myService

en el Body:
{
    "usuario": {
        "id": "1001",
        "nombre": "Juan",
        "apellido": "Perez"
    }
}

al hacer click en [send]
obtendremos

{ "usuario": { "id": "1001", "nombre": "Juan", "apellido": "Perez" }}
 fuente:
http://crunchify.com/create-very-simple-jersey-rest-service-and-send-json-data-from-java-client/

programar en yii como sacar de las urls el index.php?r=

1)
en protected/config/main.php habilitar el urlManager

'urlManager'=>array(
        'urlFormat'=>'path',
        'rules'=>array(
            '<controller:\w+>/<id:\d+>'=>'<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
            '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
        ),
  'showScriptName'=>false,
    ),
 
2)
 en la raiz de la aplicación el archivo .htaccess debe ser asi

RewriteEngine on

    # if a directory or a file exists, use it directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond $1 !^(index\.php)

    # otherwise forward it to index.php
    RewriteRule ^(.+)$ index.php?$1 [PT,L,QSA]

Programar en Yii 1 Bootstrap

1)
descargar la extension yiistrap desde aqui
http://www.yiiframework.com/extension/yiistrap/

(la version a descargar es yiistrap-1.1.1.zip)

2)
crear la carpeta "bootstrap"
protected/extensions/bootstrap

y copiar ahi el contenido de la carpeta de-zipeada de yiistrap

3)
editar el archivo de configuración protected/config/main.php

<?php
// main configuration
return array(
 ...
    // path aliases
    'aliases' => array(
        ...
        'bootstrap' => realpath(__DIR__ . '/../extensions/bootstrap'), // change this if necessary
    ),
    // import paths
    'import' => array(
        ...
        'bootstrap.helpers.TbHtml',
    ),
    // application modules
    'modules' => array(
        ...
        'gii' => array(
            'generatorPaths' => array('bootstrap.gii'),
        ),
    ),
    // application components
    'components' => array(
        ...
        'bootstrap' => array(
            'class' => 'bootstrap.components.TbApi',   
        ),
    ),
);
 
4) agregar la siguiente linea en la sección de head de protected/views/layouts/main.php
 
<?php Yii::app()->bootstrap->register(); ?> 
 
5) para ver los distintos elementos de bootstrap leer
 
http://www.getyiistrap.com/site/basics
  
 

programar en yii 1.1 - behavior auditoria

se busca que al crearse un nuevo usuario
o se modifique, se guarden automaticamente los campos de fecha de creacion y modificación.

1) crear la carpeta protected/behaviors

2) crear el archivo Timestampbehavior.php en la carpeta creada.

 class Timestampbehavior extends CActiveRecordBehavior
    {
        public function beforeSave($event){
            $currenttime=new CDbExpression('NOW()');
            if($this->owner->isNewRecord){
                    $this->owner->created=$currenttime;
            }
                    $this->owner->modified=$currenttime;       
            return true;
        }
    }

3) en el modelo Usuarios.php agregar la siguiente funcion:

 public function behaviors(){
       return array(
            'Timestampbehavior'=>array(
                   'class'=>'application.behaviors.Timestampbehavior',
                   ),
       );  
    }

programar en yii 1.1 - modelo, base de datos, crud

crear la sgt tabla:

CREATE TABLE usuarios (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(30) NOT NULL,
apellido VARCHAR(30) NOT NULL,
email VARCHAR(50),
created date not null,
modified date not null
)

en /protected/config/main.php

descomentar

/*
'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'Enter Your Password Here',
'ipFilters'=>array('127.0.0.1','::1'),
),
*/
 
en /protected/config/database.php
descomentar la parte de mysql colocar los datos de tu conexion y comentar la parte de sqlite
 
 //'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
    // uncomment the following lines to use a MySQL database
  
    'connectionString' => 'mysql:host=localhost;dbname=bibliotekbd',
    'emulatePrepare' => true,
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8',
 
 
abrir la sgt url:
http://localhost/bibliotek/index.php?r=gii
 
-crear el modelo basado en la tabla Usuarios
-crear el CRUD basado en el modelo Usuarios creado en el paso anterior
 

programar en yii 1.1

la ultima versión estable es la 1.1.17

1) descargarla de http://www.yiiframework.com/download/#yii1
2) descomprimirla y copiar la carpeta de yii en xampp/htdocs
3) abrir una consola y crear mediante la sgt linea de comandos tu primera aplicación

c:/xampp/php/php.exe c:/xampp/htdocs/yii-1.1.17/framework/yiic.php webapp c:/xampp/htdocs/bibliotek

4) levantar el apache desde le panel de control de xampp
5) abrir un browser y escribir la sgt url: http://localhost/bibliotek














Si trabajas con Eclipse

1) click derecho New PHP project
y continuar como indica la figura

instalar memcache y memcached en xampp 1.7.3 php 5.3.1

EDITAR C:/xampp/php/php.ini AGREGAR LAS SIGUIENTES LINEAS extension=php_memcache.dll [Memcache] memcache.allow_failover = 1 memcache.max_failover_attempts=20 memcache.chunk_size =8192 memcache.default_port = 11211 Download php_memecache.dll php_memcache-cvs-20090703-5.3-VC6-x86 (buscar esa version pues php fue compilada con vc6) Unzip el archivo tomar el php_memcache.dll y pegarlo en el folder ext .C:/xampp/php/ext/ Download memcached for windows unzip en c:/memcached/ Abrir consola rn modo Administrator Instalar el memcache service c:\memcached\memcached.exe -d install iniciaR MEMCACHED c:\memcached\memcached.exe -d start Restart Xampp Apache

linux ubuntu mint actualizar chrome

 desde una terminal: $ sudo apt update $ sudo apt install google-chrome-stable