Agrega tu contenido a @yiienespanol !

Tan sencillo como twittear algo, desde tu movil o escritorio

@yiienespanol

Comunidad de Desarrolladores en Yii Framework www.yiiframeworkenespanol.com




  • Doingiteasy Channel Ir a la Publicación
    https://www.youtube.com/watch?v=T8xM41I59PI

    • Albert Medina Ir a la Publicación
      Buenas tardes estimados, quisiera pedirles una sugerencia, estoy desarrollando web site para un colegio, en donde requiero hacer una especie de biblioteca virtual upload y download de archivos, subdividirlo en secciones según sea el grado de instrucción de los alumnos, alguna idea al respecto?
      • Botia Julian
        Podrías empezar por los casos de uso.
      • Laro Man
        Copia uno.. o agarra alguno ya hecho y modificalo.
      • Ivan Salomon
        Que te pidieron?

    • Jose Daniel Stilomio Ir a la Publicación
      [OFF TOPIC] Hey muchachos como estas. necesito hacer un proceso en PHP que cada cierto tiempo lea un directorio para verificar si existen nuevo archivos y moverlos a otra carpeta. conocen una tecnologia, componente q pueda ayudarme. Saludos
      • Edgar Ortega
        Programa un cron job que ejecute un script, en este caso tu lo deseas php, para que verifique los ficheros nuevos y los cambie cada que tu lo desees.
      • Jose Daniel Stilomio
        Okey Muchas Gracias
      • Daniel Caller
        A mi me sirvió esto
        http://www.yiiframework.com/wiki/91/implementing-cron-jobs-with-yii/

    • Vandro Alpi Ir a la Publicación
      http://www.yiiframework.com/news/80/yii-2-0-rc-is-released/

      • Miguel Ángel Lucas Sánchez Ir a la Publicación
        Chicos, buenos días, revisando y optimizando mi controllador he encontrado este error cuando hago uso de "Yii::app()->user->isGuest": 
        
        2014/09/30 12:33:30 [error] [system.db.CDbCommand] Error in preparing SQL: DELETE FROM 'YiiSession' WHERE expire<:expire
        in /var/zpanel/hostdata/zadmin/public_html/fijilabs_com/protected/modules/cruge/components/CrugeWebUser.php (45)
        in /var/zpanel/hostdata/zadmin/public_html/fijilabs_com/protected/controllers/SiteController.php (765)
        in /var/zpanel/hostdata/zadmin/public_html/fijilabs_com/index.php (13)
        
        2014/09/30 12:33:30 [error] [system.db.CDbCommand] CDbCommand::execute() falló: CDbCommand falló al preparar la sentencia SQL: SQLSTATE[HY000]: General error: 1 no such table: YiiSession. La sentencia SQL ejecutada fue: DELETE FROM 'YiiSession' WHERE expire<:expire.
        in /var/zpanel/hostdata/zadmin/public_html/fijilabs_com/protected/modules/cruge/components/CrugeWebUser.php (45)
        in /var/zpanel/hostdata/zadmin/public_html/fijilabs_com/protected/controllers/SiteController.php (765)
        in /var/zpanel/hostdata/zadmin/public_html/fijilabs_com/index.php (13)
        
        ¿A alguien le ha surgido esto? Uso cruge, pero no me había fijado en esto... trato de optimizar las peticiones a la bbdd y me he encontrado con este error. 
        
        ¡Gracias!
        • Miguel Ángel Lucas Sánchez
          http://www.yiiframework.com/forum/index.php/topic/6667-slow-db-session-table-reason-found/
        • Miguel Ángel Lucas Sánchez
          Christian Salazar, ¿hay algo a tener en cuenta, por cambiar CDbHttpSession por CCacheHttpSession? Me interesa mucho lo que dice ese articulo, y si reduzco la carga 400ms ¡sería genial!
        • Christian Salazar
          no deberia haber nada "especial" que tener en cuenta, para eso son las "interfaces", para que la aplicacion acceda al servicio que esas dos clases proveen mediante una via unica comun.
          si te interesa reducir los tiempos tanto entonces considera la implementacion de una cache, busca respecto a servicios cache para apache. hay algunos, no recuerdo nombres. son servicios que se paran delante de apache y oyen. lo otro es implementar un proxy, tambien ayuda porque mantiene una copia cache y devuelve esa cache en vez de rehacer consultas.
          es delicado el tema del server-overhelming
        • Miguel Ángel Lucas Sánchez
          Me ha mejorado la velocidad considerablemente
        • Laro Man
          Apc y memcache. Yii tiene implementado métodos para cachear vistas completas o keys. Buscar apc + yii en google o memcache + yii. Suerte
        • Christian Salazar
          gracias don Laro Man, no recordaba el nombre al que hice referencia en el post anterior:
          "..hay algunos, no recuerdo nombres. son servicios que se paran delante de apache.."  (el nombre es: APC).
        • Miguel Ángel Lucas Sánchez
          Apc lo tengo desde el principio, maravilla de extensión y si, ha mejorado todo considerablemente. La pregunta Christian fue más por si repercutía en algo, o necesitase tener en cuenta algo de cruge. Va perfecto ahora. Ahora toca optimizar algunas vistas. Llego casi a los 3 segundos en el TTFB(time to first byte) y es de lo poco optimizada que tengo algunas vistas... he aprendido más con ls logs que programando los últimos 6 meses... Muchas gracias chicos!
        • Christian Salazar
          hola miguel, cruge no hace cache, lee directo de la db. eso puede afectarte.
        • Miguel Ángel Lucas Sánchez
          Aja, esa fue mi pregunta, pero si yo en mi config cambio la clase a CCacheHttpSession... sigue haciendolo ¿verdad? de todas formas, ahora que eso ha mejorado voy a continuar con mi código que necesita un repaso jejejeje
        • Christian Salazar
          read the source luke..
        • Christian Salazar
          a ver, no he visto el codigo de ccach.. vs cdb.., asumo que CCache.. es una especializacion (como una decoradora) para CDbHttp...., es decir, se para delante de quien llama y dice: "..si cache expiro entonces te paso con CDbHttp, sino, toma esta copia que tengo aqui...".  hay que ver como la implementaron. deberia ser asi. si no es así, entonces, con un Breadcrum la resuelves.
        • Christian Salazar
          el hijo puta hizo un daño muy profundo en este grupo
        • Miguel Ángel Lucas Sánchez
          JAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJAJA ok ok que razón tienes!
        • Christian Salazar
          hablando en serio. bueno, asi deberia funcionar la cache, si el comportamiento que tiene no es el esperado, entonces, hacer una clase de especializacion de CDbHttpSession que haga exactamente eso con un archivo cache. es sencillo:
          me piden data de sesion de "alguien" ("alguien" es el token, el key), si el key tiene una entrada en la lista de archivos de la cache, entonecs verificar expiracion y devolver lo que esta en el archivo, sino, ir a CDbHttpSession, leer, y crear la cache, devolviendo lo leido.
        • Christian Salazar
          las optimizaciones separan a los hombres de los ñiños, asi que es harto bueno que estes en el troubleshooting de esta parte,
        • Christian Salazar
          y bueno, para finalizar estoy yo tambien en una de esas, bajando de 10 segundos a 3...y si la gente supiera lo costoso que es ganar "1 segundo"...
        • Miguel Ángel Lucas Sánchez
          Si he leído sobre lo del id, creo que está funcionando bien tal cual está, cruge está haciendo lo suyo y Ccache también, pero voy a revisarlo
        • Christian Salazar
          sigo en lo mio. viendo porque el breadcrum no hace cache.
        • Miguel Ángel Lucas Sánchez
          Dale duro, yo lo resolví con eso y fue super sencillo

      • Alejandro Benavides Ir a la Publicación
        Saludos colegas, voy a utilizar TCPDF para generar PDF, tengo una duda, necesita crear un pdf a partir del response de una llama AJAX. Vi los ejemplos de la documentación que hay en el sitio de Yii pero ninguno da ejemplos como el que necesito. Sigo googleando pero apreciaría conocer si alguien ya antes lo a echo ... saludos

        • Miguel Prieto Ir a la Publicación
          Hola gente como va, les cuento que estoy comenzando a probar los servicios de Digital Ocean (VPS) y me preguntaba si alguno sabe o tiene idea de como armar un auto-deploy con Yii - Git usando bitbucket :)

          • Kelch Acree Ir a la Publicación
            Rayban, The Top Brand of Sunglasses. 2014, Favorable, Durable, Newfangle of Rayban Sunglasses All At http://goodsunglass829.Lookin.At/. with Free shipping and Return. Many Options for You! Support Wholesale and Retail, All Price Will Let You Scream. 30000010.
            • Carlos Belisario
              Spaaaam

          • Miguel Ángel Lucas Sánchez Ir a la Publicación
            [OFF-TOPIC] Chicos, ya se que estamos poniendo muchos off-topics, pero tengo una urgencia. Administro a duras penas el servidor que aloja mi proyecto en yii, http://mzof.es El problema que me encuentro es que el TTFB (el primer byte de respuesta, es la primera vez que escuchaba este termino) es demasiado alto para páginas principales como "mzof.es/ofertas-sevilla" (a veces llega a los 3 segundos). Esto provoca que el señor Google se pasee poco por la web y te puntúe bajo en los ratings. Se que es una pregunta muy especializada, pero como somos familia ¿Alguien ha pasado por aquí? Muchas gracias de antemano.
            • Miguel Ángel Lucas Sánchez
              Por supuesto esto está hecho: http://stackoverflow.com/questions/7651458/caching-cdns-and-proxy-servers-whats-a-guy-to-do
            • Miguel Ángel Lucas Sánchez
              Y esta herramienta te da este valor: http://www.bytecheck.com/
            • Miguel Ángel Lucas Sánchez
              Voy a probar con CloudFlare y os cuento. jijiji
            • Ivan Salomon
              CloudFlare sin dudas Miguel Ángel
            • Ivan Salomon
              De paso te aseguras velocidad...
            • Miguel Ángel Lucas Sánchez
              Está activado, tiene toda la pinta que son peticiones sql :( optimizando me hallo
            • Ivan Salomon
              son externas las peticiones sql????
            • Miguel Ángel Lucas Sánchez
              no, te cuento. Es un portal de oferta y tengo varias tiendas, pero unas son "más importantes" que otras. Lo que hago es con un cron, una lista de id de ofertas "ordenado" para mis necesidades, crear la lista ordenada de ofertas se lleva un buen tirón de peticiones, y ahí ando a ver como coño optimizo esto
            • Ivan Salomon
              Ahhh esta claro... tal vez darle mas tiempo entre petición y petición. Igual hablo sin "ver" espero tengas suerte.. cualquier cosa aca estamos
            • Miguel Ángel Lucas Sánchez
              gracias maestro!

          • Alex Ferreras Ir a la Publicación
            Man Of steell Trailer

            • Lesther Peña Ir a la Publicación
              buenas mi problema es el siguiente yo por medio de un js que cree tomo el valor de un select y muestro el formulario que quiero llenar en la accion create lo hace perfecto 
              
              pero cuando llego al update que quiero modificar lo que llene el toma me trae el valor del select pero no me muestra el formulario como si no estuviera seteando el valor que ya tiene tengo que desmarcarlo y remarcalo para que me aparezca no lo hace automaticamente si me pueden ayudar

              • Christian Salazar Ir a la Publicación
                [OFF-TOPIC]   Queues.
                
                Quizá no sea un tema puramente YII pero sí con lo que se hace con YII, o mejor dicho lo que se deja de hacer con Yii.
                
                Queues ("colas") es un mecanismo para procesar una fila: de personas del banco, una lista de documentos que van a una impresora.  Un mismo objeto puede estar en varias colas: Una cola para ser impreso, otra para ser publicado en linea, pero es el mismo objeto. Igualmente hay dos tipos de colas: Aquellas de tipo productor-consumidor: en donde un consumidor toma un objeto y este desaparece de la cola (un sistema de tickets), y otro tipo de cola llamada publicador-suscriptor en donde un objeto puede ser tomado por un suscriptor pero no necesariamente es removido de la cola, queda disponible para otros consumidores (como el caso del publicador de nuevas propiedades de un sistema de real-estate, ejemplo mas abajo, en donde una propiedad nueva entra en una cola y es consumida por varios sistemas diferentes, distribuidos, que despachan la propiedad a un muro de facebook, otra a un twitter etc).
                
                Cómo aplica esto en Yii,  cómo aplica un Queue en el diseño de aplicaciones en Yii ? de la firme mano con CApplicationConsole.  Ejemplo, tienes un sistema de propiedades (Real Estate) compuesto por 5 servidores, cada uno leyendo obteniendo propiedades disponibles para los clientes, cada servidor dedicado a una zona de un estado de un pais, razón ? Florida tiene comun y normalmente 30.000 propiedades para la venta, unas 80.000 en arriendo, otras 30.000 para leasing, son muchas, y Florida tiene 200 ciudades, y para empeorar la situación necesitamos sistemas actualizados cada 2 minutos, o menos..sin hacerle el overhelming al pull de servidores.
                
                ¿ Dónde va el Queue en este sistema ? cada servidor dispone de aplicaciones de consola que ejecutan tareas en background, iniciadas por un cronjob, consumen propiedades de una fuente oficial, algunas seran viejas, otras nuevas y son las que mas nos importan. 
                
                Queremos que los clientes se informen cuando una nueva propiedad aparece en una determinada zona, via twitter, via facebook, pero además queremos que esa misma propiedad salga en un muro de facebook.  Debido al sistema distribuido no vamos a cometer el error estrepitoso y garrafal de darle a cada servidor la tarea de despachar propiedades nuevas a digamos una lista de interesados en facebook y twitter (overhelming) el servidor no fue hecho para eso, aunque pueda hacerlo y de hacerlo estamos colapsando los equipos y creando sistemas monolíticos.
                
                Cada servidor recibe propiedades, cuando alguna regla de negocio determina que la propiedad "es nueva" entonces hace lo suyo, pero además la envía a una cola, no necesariamente la cola esta en el mismo servidor, quizá esté en un servicio en la nube, son sistemas distribuidos, el servidor cierra su responsabilidad al momento de despachar la propiedad a la cola.  Esto lo hace normalmente mediante una llamada al api de la cola la cual proveerá el diseño de la cola, normalmente son interfaces hechas con REST.
                
                Windows Azure tiene un mecanismo de queues, Rackspace ofrece queues, no se que otro servicio en la calle ofreza queues. Un queue se parece a un servicio push, el cual es usado por los teléfonos para saber cuando algo ha cambiado de estado: "os ha llegado un nuevo mensaje" (dice la puta operadora virtual con acento español, como las odio).
                
                Ahora, quien consume los mensajes de esa cola, otra aplicación hecha con CApplicationConsole, especificamente diseñada para conectarse a una cola, aqui entra una relación llamada en UML:  Clases de asociación, es importante comprenderlo, [Consumidor]----[lee: LectorX]--->[Queue],  la clase de asociación: LectorX esta diseñada para proveerle una interfaz común a la clase Consumidor, de modo que si la clase LectorX cambia por otra entonces no afecte al consumidor, esta clase LectorX esta diseñada para manejar los detalles tecnicos para leer especificamente de la cola: Queue: si es una cola en windows Azure, pues sera una clase que implemente la interfaz que windows azrure require, si es rackspace entonecs otra implementación.   Finalmente la clase LectorX le da a Consumidor una lista de mensajes de esa cola, cada mensaje contiene por ejemplo el paquete JSON de la nueva propiedad detectada.  Finalmente la clase Consumidor despacha el mensaje a un usuario en facebook, a un muro de facebook, a un tweet. No necesariamente el Consumidor esta en el mismo servidor, quizá esté totalmente en otra nube, y quizá existan 10 consumidores para la misma cola: llegaron 500 propiedades nuevas en esta hora y hay 5000 interesados, un solo servidor ? entonces para evitar el overhelming se compran mas servidores: on-demand, solo para implementar el cosumo de colas, incluso, se puede "arrendar" un servicio en un servidor desocupado para que temporalmente ejecute una aplicacion de consola.  De nuevo, todo bajo CApplicationConsole.
                
                Referencias:
                
                http://stormmq.com/   (servicio gratuito de colas)
                http://www.rackspace.com/es/cloud/queues/ (el que uso yo)
                http://en.wikipedia.org/wiki/Message_queuing_service (wiki)
                
                Bienvenido al sistema distribuido. Con Yii, Queues, REST.
                • Gustavo Salgado Toledo
                  Gran aporte!
                • Christian Salazar
                  otro mensaje mas para que se actualice el feed.

              • Juan Rubén Medina Eliett Ir a la Publicación
                Excelente artículo
                • Esteban Monge Chacon
                  Muy bueno

              • Miguel Ángel Lucas Sánchez Ir a la Publicación
                Alerta vulnerabilidad en Bash [OFF TOPIC]:
                • Miguel Ángel Lucas Sánchez
                  Recursos Formacion
                • Recursos Formacion
                  J.... no se si prefieronosaber segunque....y ahora a correr....
                • Recursos Formacion
                  lo que es una gran p... es anunciarlo antes de tener solucion
                • Miguel Ángel Lucas Sánchez
                  Jajajajajaja todos los buitres esperando....
                • Alejandro Benavides
                  http://www.ubuntu.com/usn/usn-2362-1/
                • Max Blammo
                  Hay formas de evitar esto...  Un buen admin puede enjaular los servicios individualmente y así evitar no el ataque tal vez pero si el acceso y que los demas servicios sean afectados. También se puede denegar  acceso a ciertos comandos desde la configuración del vhost...es como profundo el tema.. Yo recibo ataques constantes de diferentes tipos en los servers, es un tema complicado, y agotador... Cuando uno es el que ataca es más divertido..
                • Richard Ob
                  Cuando uno desarrolla he implementa pensando en seguridad, estos problemas se minimizan... por ejemplo un error típico:
                  usar los usuarios "privilegiados" para correr los servicios (ej: Apache, nginx, php-fpm, mysql, postgresql, etc)
                  Por defecto, viene un usuario "limitado" para su uso en producción, pero a veces por "facilidad" se modifica para que sea el privilegiado y no estar "lidiando" con configuraciones....
                  Acá está la paga...
                  No digo que ahora seremos inmunes, pero sí se minimiza el impacto y dá más tiempo de reacción.
                • Christian Salazar
                  100% de acuerdo con Ricardo. 
                  Servidores que corren sus servicios apache bajo usuario SYSTEM. O directorios en linux con 777 (por facilidad), echando abajo la seguridad que por defecto da el usuario www-data.
                • Recursos Formacion
                  No entiendo como es posible que haya tanto ataque con exito con lo bien que trabajais todos.....
                • Miguel Ángel Lucas Sánchez
                  jummmmmm
                • Max Blammo
                  En mi caso en particular, el monitoreo constante y análisis de logs ayuda a evitar ataques que dejen fuera de servicio a los servidores. El ataque no se puede evitar, lo que se logra es que no sea efectivo. Un ejemplo, el uso de DenyHost detiene cada ataque que hay x ssh., también he desarrollado scripts que analizan los logs y bloquean ips de manera automática. 
                  Saber elegir las herramientas o desarrollarlas para tener un mejor control del server es fundamental para lograr el menor riesgo y optimizar la continuidad del servicio.

              • Andrés Ubilla Ir a la Publicación
                [OFF TOPIC]
                Estimados, alguien ha realizado el envío de una imagen a través de un JSON?, necesito realizar esa tarea, no puedo enviar solo el link de la imagen si no que la imagen propiamente tal.
                
                Saludos.
                • Esteban Adrián P
                  De curioso busqué en google y hay modos varios de lograrlo... ¿Consultaste allí? :) Quizá encuentras el que se ajusta a tu necesidad :)
                • Andrés Ubilla
                  lo que he encontrado hablan sobre codificarlos en base64, pero he leído que tiene un límite de tamaño creo de 30kb, de ser mayor se debería dividir en varias partes y ahí me fui al carajo jaja
                • Esteban Adrián P
                  Me parece que no te quedará mas remedio que dividir... si JSON tiene tope de 30kb... No hay otra manera de hacerlo? vía ftp?digo...
                • William Quitian
                  Y por qué no publica la imagen para que la acceda por URL?
                • Christian Salazar
                  //siteController.php:
                  public function actionImagen($id){
                      $model = Imagen::model()->findByPk($id);
                      header("..el header jpg...");
                      echo file_get_contents($model->safeLocalPath);
                  }
                  
                  //una vista:
                  <img src='index.php?r=site/imagen&id=123' />
                  
                  ....via ajax ? lo mismo, ejecutas un query ajax, y "onsuccess" mandas a poner el atributo "src" de una imagen en nulo, haces un sleep, y pones la nueva URL....sin andar trayendose fotos por ajax...para evitar que la cache no produzca cambio en la imagen entonces agrega un timestamp en la url de la imagen, eso lo forzará a cambiar.

              • Mauro Maximiliano Martinez Ir a la Publicación
                Buen dia gente, alguien pudo conectarse con yii a una base de datos MSSQL (2000) ?
                
                Estoy intentando realizar la conexion con Linux (kubuntu 14) y no puedo hallar la solucion al problema. Intenté de varias formas distintas en el array "db":
                
                'db'=>array(
                                'class'=>'application.extensions.PHPPDO.CPdoDbConnection',
                'pdoClass' => 'PHPPDO',
                
                'connectionString' => 'dblib:host=XXX.XXX.XXX.XXX\EJEMPLO;dbname=DBEJEMPLO',
                
                //'class'=>'CDbConnection', 
                //'connectionString' => 'dblib:host=GPS2HOST;dbname=DBREMOTA',
                 
                //'connectionString' => 'mssql:host=XXX.XXX.XXX.XXX\EJEMPLO;Database=DBEJEMPLO',
                 
                'username' => 'usuario',
                'password' => 'password',
                
                ),
                
                Leyendo varios articulos, pude llegar a esta extension que emula pdo con mssql:
                
                http://www.yiiframework.com/extension/phppdo
                
                Pero no logro hacerla funcionar correctamente. Cuando entro a gii, al creador de modelos, se queda colgado el apache y necesito reiniciarlo. 
                
                Alguna idea o experiencia similar?
                
                Gracias
                • Mauro Maximiliano Martinez
                  (Probé realizar lo mismo en una mac con OS X y pasa lo mismo, se queda colgado gii)
                • Esteban Adrián P
                  Así lo uso yo, sin problemas:
                              'connectionString' => 'dblib:host=ip_del_host;port=1433;dbname=nombreDB',
                              //'emulatePrepare' => false,
                              'username' => 'usuario',
                              'password' => 'contraseña',
                              'charset' => 'utf8',
                              'class' => 'CDbConnection',
                  probalo ;)
                • Mauro Maximiliano Martinez
                  Bueno, aparentemente encontré la punta del problema. El CDbSchema que devuelve las tablas tiene algo que no le gusta con SQL Server 2000. Por lo que pude ver, se manejan de formas distintas las sentencias para traer las tablas en SQL2000 y SQL2005 en adelante
                • Esteban Adrián P
                  Puedo asegurarte que con SQL2000 no tendrás inconvenientes... (es lo que uso en el caso que te pasé)
                • Mauro Maximiliano Martinez
                  Quizas sea alguna configuracion especial de esta db la que este jodiendo... Me pude conectar de la manera que me pasaste, pero cuando tengo en el modelo:
                  
                  public function tableName()
                   {
                   return 'hola_test';
                   }
                  
                  Y luego hago una instancia:
                  
                  $model = new HolaTest();
                  
                  No reconoce la tabla. Dice que no existe en la base de datos. Sin embargo hago:
                  
                  $sql = 'SELECT * FROM sysobjects';
                  $tables = Yii::app()->db->createCommand($sql)->queryAll();
                  
                  echo "<pre>";
                  print_r($tables);
                  echo "<pre>";
                  
                  y puedo encontrarla. Sin embargo, con un SQL 2005 me funciona correctamente. Seguiré investigando  >:(

              • Josh Zarate Parker Ir a la Publicación
                [OFF TOPIC]
                Hola buenas tardes tengo una pregunta de base de datos ojala que alguien pueda ayudarme dado un select donde filtro unos id de clientes necesita sacar de esa misma tabla de este filtrado que acabo de hacer las fechas de registro de estos usuarios
                • Botia Julian
                  más claro por favor, segun entiendo seria select id, fecha_registro from tabla where id in(filtro_ids);
                • Oscar Cortez
                  Creo que quieres hacer una subconsulta en la condicion (where) pero explicalo mejor. No entendi mucho
                • Josh Zarate Parker
                  ok haber tengo una tabla donde tengo registradas ventas esta el id de la venta id de usuario id del producto vigencia y status (2= activa)
                  ahora bien necesito saber de esta tabla cuales usuarios se vencio su vigencia y dados estos que en algun momento ya se vendio si volvieron a comprar
                • Botia Julian
                  vigencia es un campo de la tabla donde registras las ventas?
                • Josh Zarate Parker
                  asi es
                • Botia Julian
                  no entiendo esta parte "y dados estos que en algun momento ya se vendio si volvieron a comprar"
                • Oscar Cortez
                  Creo que la primera parte seria asi:
                  Select * from usuarios where idusuario in (select idusuario from venta where vigencia='vencido'). La condición lo arreglas
                • Damir Steaven Buitrago
                  WTF?!
                • Cristian Quagliozzi
                  Buenas, me parece que no esta claro el analisis que haces. Manda unos graficos, por favor.

              • Moises Rendon Terreros Ir a la Publicación
                Alguien a empleado Yii con mongoDB ????
                • Andrés Ubilla
                  Yo en pruebas solamente
                • Carlos Belisario
                  Creo que hay una extensión para eso, sino simplemente implementa un ORM tipo doctrine que tiene soporte ODM maduro
                • Esteban Adrián P
                  Carlos... Aparte de EMOtizarte volvés al ruedo con posteos... ¡Bienvenido de nuevo! :D
                • Carlos Belisario
                  jajaja hay que apoyar apesar de que este molesto con la gente de Yii =P
                • Esteban Adrián P
                  Esto es para MP...
                • Carlos Belisario
                  jajaja
                • Dvid Silva
                  Ha*, y no uses mongo en producción.
                • Carlos Belisario
                  ¿motivo, causa, razón y circunstancias?
                • Dvid Silva
                  Mongo es un sistema demasiado nuevo que tiene muchas fallas y problemas, uno de los más graves es que no garantizan la escritura. Las pocas razones legítimas que hay para usar MongoDB, como cache,  son escasas, en cambio las razones que dan para usar MongoDB es que es parche.
                • Dvid Silva
                  http://www.sarahmei.com/blog/2013/11/11/why-you-should-never-use-mongodb/
                • Carlos Belisario
                  añadido el link a favoritos, lo leo mañana, ya había escuchado antes el no usar mongo por eso la pregunta, no me ha tocado, pero conozco proyectos que les ha ido relativamente bien usarlo, es cuestión de leer probar y todo lo que nos toca como dev, lo interesante sería el ver por que mongo o algún noSql antes de una db relacional como las tadicionales que se vienen usando saludos
                • Dvid Silva
                  Pesima idea usar mongo como sistema primario por muchas razones, ese blog post es el más famoso al respecto. Se puede usar para cache, pero redis es mucho más efectivo para eso. MySql es suficiente potente para cualquier cantidad de cosas antes de abandonarlo hay que usarlo a su full capacidad.
                • Ivan Salomon
                  Dvid Silva lee un poco mas.. no opines sin saber esta mas que probado. Twitter entre otros funciona con mongoDB. al igual que FB en algunos casos.. Basta de hablar al pedo por hablar!!
                • Dvid Silva
                  jajajajajajajaja jajajajajaja espera espera jajajajajajajaja
                • Dvid Silva
                  ya me repuse :P si, lo usan para el cache, como lo que yo dije cuando escribi, no como metodo principal de almacenamiento de datos, y fb usa cassandra no MongoDB, lee antes de juzgarme. :P
                • Ivan Salomon
                  Yo leo, me parece que tu no lees... son dos Nsql distintas... de verdad lee por favor
                • Dvid Silva
                  instruiguime oh gran maestro de la sabiduria, asi como yo que cuando opino pongo informacion y links deberias hacer algo similar.
                • Dvid Silva
                  ah y leer articulitos de internet no siempre es simbolo de verdad, la gente decia que rails era la chimba porque twitter lo usaba y finalmente twitter entro en razon algun dia y dejo de usarlo
                • Ivan Salomon
                  no me hace falta demostrarte algo y menos a vos. Respeto tu punto de vista. veo que sos un poco intolerante...
                • Ivan Salomon
                  y pedante.. entre otras cosas
                • Dvid Silva
                  no ps todo bien no me lo demostres, yo se que es dificil demostrar cosas sin argumentos
                • Ivan Salomon
                  Bueno te la hago corta... di mi opinion... si no te gusta problema tuyo.. ok? y eso de gran maestro es de muy pelotudo!!!!
                • Dvid Silva
                  crei que estabamos entre gente razonable, defiende tu opinion como lo demas hemos hecho
                • Ivan Salomon
                  por las dudas sigue usando Rails Twitter!
                • Ivan Salomon
                  estamos... queres ver que razonable soy????

              • Henry Jhoan Jaimes Moncada Ir a la Publicación
                Hola...!!! Acabo de entrar al grupo (gracias por aceptarme), tal ves ya respondieron esto, pero como resuelven el problemita de las claves compuestas porque el gii no me genera el grub de estas tablas y manda el papa de los errores... escucho distintas propuestas porfavor...
                • Carlos Belisario
                  gii no tiene soporte para claves compuestas pero como tal yii, si, busca dentro del foro http://yiiframeworkenespanol.org/foro si mal no recuerdo christian hizo un post explicandolas
                • Henry Jhoan Jaimes Moncada
                  tnks
                • Christian Salazar
                  hola, bienvenido. 
                  usar claves compuestas es un tema técnico que depende de como se implemento el modelo de datos.  si ya esta diseñado el modelo de datos entonces es mucho mas sencillo que agregues un identificador de fila unico, solo para que CActiveRecord se sienta comodo, y para que los DataProviders tambien anden mejor.  No va a dañar nada, ni a perder espacio, ni nada de eso.
                  Idependientemente a que existan o no claves compuestas yii funcionará bien,.
                • Christian Salazar
                  ahora, yendo un poco mas allá y sin pretender herir ni atacar, solo hablo técnicamente y con experiencia en vieja y nueva escuela:  las claves compuestuas solo complican mas, son un viejo esquema que viene de la escuela en donde hacian a un lado al modelado y educaban diciendo que el modelo de datos era el sistema.  Eso solo causo sistemas hechos para satisfacer computadoras, no personas, sistemas con 500 tablas, que son hechos pensando en "como almacenar" en vez de ser hechos pensando en "como resolver un caso de uso".
                  trata de mover la idea hacia sistemas diseñados con fundamentos en UML. en donde el objetivo es el sistema que ve el usuario (u otra maquina) y no en cambio "como almacenar lo que tengo".
                  Los sistemas no deben ser diseñados en base a la persistencia, sino en cambio, la persistencia debe ser una opcion para almacenar lo que el sistema produce.
                  son esquemas nuevos, que van de cara en contra la vieja escuela y los indices compuestos.
                  una pregunta ayuda a aclarar y reafirmar lo que digo:
                  
                  que le sucede a un sistema hecho y pensando primero en persistencia cuando le dicen: "lindo, 500 tablas, 200 indices, y 700 relaciones, ahora....ya no usaremos sistemas relacionales, ahora es cloud, en gwt con almacenamiento en objetos"...ese sistema estatico se muere.  En cambio, un sistema hecho sin poner a la persistencia en primer plano se adapta y solo agrega un "plugin" que implemente la persistencia requerida: "almacenar en gwt cloud", o "almacenar en ram", o "almacenar en disco" o "almacenar en un webservice"....la logica de negocios, formularios, objetos ni supo ni le importó donde estan los objetos almacenados ni como estan relacionados, le importa en cambio decirle al API del sistema: "dame los clientes con este estatus", o "dame las facturas no pagas de este producto y este sistema".  A este nuevo sistema no le importa si la las facturas estan en CHIna y los productos en EEUU y los clientes en la India.  Asi de bonito es. pero para hacerlo realidad: hay que decirle adios al modelo anterior basado en persistencia estatica.

              • Juan Rubén Medina Eliett Ir a la Publicación
                Saludos. Estoy teniendo problemas con TbButtonGroup de la extension Yiibooster en dispositivos móviles. Sencillamente los items no responden, pero en la computadora funcionan sin problema. ¿Alguno ha tenido esta situación?

                • Julian Andres Garzon Morales Ir a la Publicación
                  Buenos días, tengo el siguiente código
                  
                   
                  $.getJSON('<?php if(isset($data) && is_array($data)) echo $this->createUrl("/reporte/DataInventario/", array("desde"=>$data["desde"], "hasta"=>$data["hasta"])); ?>', function(chartData){ 
                  ........
                  } 
                  pero no hace nada, es decir no me retorna los datos, como prueba de que la acción del controlador esta bien cree un botón que me envía a la acción y si retorna los datos o si pego la url en el navegador también me retorna los datos, usando yii debug tolbar me doy cuenta de que no entra a la acción debido a que no se realiza la consulta a la bd, mi pregunta es como puedo hacer para que me retorne por json los datos, muchas gracias
                  • Juan David Rodriguez
                    hableme por skype...
                  • Julian Andres Garzon Morales
                    listo gracias juan

                • Ataur Rahman Ir a la Publicación
                  Emmet Rocks :3
                  
                  Download emmet for Faster coding 
                  http://www.tutorialworld.net/download-emmet-faster-coding/
                  
                  Emmet Cheat sheet for faster Coding 
                  http://www.tutorialworld.net/emmet-cheat-sheet-faster-coding/

                  • Avraham Jurado Ir a la Publicación
                    [ OFF-TOPIC] Tengo un amigo que quiere poner una pagina web de una tienda virtual de insumos informáticos. Me pregunto a mi si se la podia hacer pero por temas de tiempo no le dije que no. Sin embargo, si alguien esta interesado en darle un presupuesto, me dice y lo pongo en contacto. Para que se den una idea de lo que mi amigo necesita les dejo este link http://www.mastersinformatica.com Le mostré esa pagina y me dijo algo asi es lo que el necesita.
                    • Jose Luis
                      Felipe Eduardo Ortiz López tu vendes de esto :P
                    • Hely Miguel Rojas
                      listo Avraham Jurado , dale mi contacto !
                    • Josh Zarate Parker
                      necesitas ke se te desarrolle el web?
                    • Avraham Jurado
                      un amigo lo necesita
                    • Josh Zarate Parker
                      yo puedo desarrollartelo mandame inbox para afinar detalles
                    • Jose Daniel Cifuentes
                      para estos casos no es mejor usar por ejemplo prestashop? U open cart?
                    • Max Blammo
                      La solución es un OpenCart o Prestashop, juega más el diseño que otra cosa aquí, también se puede usar un WP pero no lo idea si son muchos productos.  , Envíame un inbox y te preparo el presupuesto .Slds

                  • Alejo Peña Ir a la Publicación
                    Hola.
                    He instalado cruge tal cual como en la documentacion se explica.
                    La pregunta es: al momento de crear un rol y darle permisos,¿Por que los permisos no se aplican?
                    Es decir yo ya asigne ese rol a un usuario pero en todas las paginas me sale error 403 no autorizado... es decir que no se aplican los permisos..
                    ¿Cuales podrian ser las posibles causas?
                    • Carlos Belisario
                      a ciegas sin ver como lo haces no podemos adivinar, si te da 403 es porque no tiene permiso muestranos el accesRules a ver
                    • Alejo Peña
                      con CRUGE hay que configurar accesRules?
                    • Carlos Belisario
                      ¿really? muestra el access rule de tu action que te esta diciendo que no estas autorizado e indicanos el rol que tiene para poder ayudarte
                    • Alejo Peña
                      Haz usado CRUGE?
                    • Carlos Belisario
                      Obvio
                    • Alejo Peña
                      Por eso... me cree un rol desde el  ui de  administracion... asigne permisos y aplique el rol al user... la cosa es que no funciona...
                    • Carlos Belisario
                      como te indique si el accessRule no le da permiso a ese rol jamás te dejara ingresar al action muesra el accessRule de tu controller y dinos el rol y el action que te da el problema para poder ayudarte, de todas maneras una leída a la doc oficial http://www.yiiframework.com/doc/guide/1.1/es/topics.auth de autenticación no estaría de más
                    • Carlos Belisario
                      más info http://yiiframeworkenespanol.org/wiki/index.php?title=Cruge#Conviviendo_con_CAccessControl_filter.
                    • Alejo Peña
                      Es decir que en el accessRule debo especificar los roles y las acciones?
                    • Alejo Peña
                      Gracias por la ayuda, creo que ya pude... gracias por la ayuda y paciencia.. soy un poco nuevo en yii
                    • Alejo Peña
                      Una ultima pregunta, como se haria esto:  si usuario permiso action-sis_create?

                  • Andres Restrepo Ir a la Publicación
                    Hola comunidad Yii, es posible que al ejecutar una consulta a traves de ajax esta me devuelva los datos con el paginador incluido, es decir que me genere un gridview con paginador pero desde un ajax
                    alguien tiene algun ejemplo de esto ?
                    muchas gracias :)
                    • Esteban Adrián P
                      La respuesta corta es:
                      - Que el ajax llame al action que genera la grilla (admin, si no "tuneaste" tu desarrollo)
                      - Que el action detecte que es una llamada "ajax" (fijate como se resuelve en actionDelete)
                      - El action retorna un "renderPartial" de la grilla, pero con el parámetro "return" en verdadero (http://www.yiiframework.com/doc/api/1.1/CController#renderPartial-detail)
                      - El "ajax" cambia el contenido del div con lo que le envía el action...
                    • Andres Restrepo
                      Una pregunta estaban como se pueden tunear las peticiones ajax para que san seguras ya que mencionaste el tema gracias :)
                    • Esteban Adrián P
                      No es mi fuerte el tema "seguridad"... Ivan y Christian son los más "perseguidos" con ese tema... Pero deberías ser muy preciso en lo que querés averiguar :D
                    • Ivan Salomon
                      Andres explica un poco mejor. Pero del vamos te digo que sean peticiones ajax o la que sea tienen que ser seguras a nivel de protocolo, en este caso httpS . Se entiende?
                    • Christian Salazar
                      hola. no es sano, ni practico ni correcto hacer eso que pides. ajax no es para eso.
                    • Manuel Villafañe
                      es como dice Christian Salazar ajax no espara eso ademas CGridView  ya hace eso

                  • Alex Mikel Alba Ir a la Publicación
                    holas a todos ,talves alguien a utilizado en sus sistemas lector d codigo d barras , si alguien podria ayudar alguna extencion q utilizaron
                    • William Quitian
                      Solo se necesita una caja de texto para leer código de barras
                    • YonHaime Rocha
                      Es sólo un código generado que guardas como String
                    • Alex Mikel Alba
                      gracias ... es q como nunca e utilizado en una aplicacion web X eso lo decia nada mas
                    • Christian Salazar
                      es vez de que alguien escriba el codigo a mano lo hara un lector, no hay ningun cambio de ningun tipo y a la app no le importa si fue un lector o si fue a mano.
                    • Edgar Ortega
                      Funciona igual que un teclado, el usuario selecciona el input donde se escribirá el código, apunta la pistola y listo

                  • Kristhian E Figueroa Ir a la Publicación
                    Algún freelance, interesado en hacer proyecto? aprox un mes de desarrollo.
                    • Albert Medina
                      sobre que?
                    • Oscar Bravo
                      ¿Sobre qué?
                    • Felipe Eduardo Ortiz López
                      Jose Luis, creo quet llaman...
                    • Juan Cortes
                      Pues a mi me interesaria,
                    • Kristhian E Figueroa
                      Les suplico sea por inbox.
                    • Kristhian E Figueroa
                      Olvidé mencionar, de preferencia en Querétaro, México. o en México. por la cuestión fiscal.
                    • Alex Ferreras
                      Si yo quiero =D ...
                    • Alex Ferreras
                      ferrerasalexander@gmail.com
                    • Josh Zarate Parker
                      ke hay ke hacer
                    • Kelvin Jonathan Díaz
                      Hola soy de Caracas - Venezuela estoy interesado escribeme el mp
                    • Kelvin Jonathan Díaz
                      Me podrías cancelar con gif card

                  • Daniel Caller Ir a la Publicación
                    Buenas...una consulta cómo puedo filtrar los valores NULL o cadena vacía desde el cgridview? por ejemplo tengo un gridview donde muestro montos y algunas filas no tienen esos montos, y los relleno con ceros pero al ser el filtrado por ejemplo < 10 no me muestran las filas que tienen los "ceros".
                    Saludos!
                    • William Quitian
                      Los 0s están grabados en la bd?
                    • Juan Rubén Medina Eliett
                      Quizas la función scope del modelo sea de ayuda.. pero es importante saber qué estas guardando en ese campo de la base de datos
                    • Carlos Belisario
                      null no es tomado como un numero, simplemente agrega en el filtro de < a 10 que también traiga los nulos
                    • Daniel Caller
                      En realidad son datos calculados que los traigo a través de una vista en la BD... la consulta no arroja ceros, arroja nulos... pero para mostrar cambio el null por cero... algo leí que tengo que modificar el criteria... pero cómo? se supone que el filtro del gridview acepta <, > y demás osea el usuario pone 0, en el criteria tendría que hacer un if si cuando pone 0 se interprete como null, pero si el usuario pone < 10, < 2 , cómo hago para que también traiga los nulos?

                  • Christian Salazar Ir a la Publicación
                    [PRUEBA]
                    • Christian Salazar
                      <script>alert('este mensaje no deberia salir en el website');</script>
                    • Esteban Adrián P
                      ¿?
                    • Christian Salazar
                      un bug en el website que admite la ejecucion de scripts de javascript como este en el yiies,
                    • Christian Salazar
                      listo resuelto.
                    • Christian Salazar
                      prueba2:
                      
                      <script>alert('este mensaje tampoco deberia salir en el website');</script>
                    • Christian Salazar
                      verificado. bug resuelto.
                    • Cesar Gago Egocheaga
                      XSS :o
                    • Christian Salazar
                      no no tanto. era una tonteria.

                  • Ivan Salomon Ir a la Publicación
                    [IMPORTANTE] Publicada Guía del Desarrollador OWASP v4 - Para los que trabajamos asegurando aplicaciones web, sin duda... http://t.co/mLY29rW1tw

                    • Alejo Peña Ir a la Publicación
                      hola.
                      Como puedo traer datos de diferentas tablas desde un mismo modelo?
                      • Albert Medina
                        <?php echo $model->objetoDelaTabla;?>
                      • Josh Zarate Parker
                        Para ke necesitas eso???
                      • Daniel Caller
                        Sé más específico... si las tablas están relacionadas las puedes traer mediante $modelo->Relacion->atributodeOtromodelo... si no están relacionadas puedes usar el comando $modelo->findAllBySql($miconsultasql, $arraydeparametros)
                      • Carlos Belisario
                        este tipo de dudas se resuelve leyendo la doc oficial http://www.yiiframework.com/doc/guide/1.1/es/database.arr te aseguro que ahí encuentras lo que necesitas
                      • Christian Salazar
                        problema de conceptos:
                        
                        un modelo, implica el uso de varios sistemas o piezas. ahora, que llamen "modelo" a una tabla, es un grave error.  
                        
                        lo que Alejo pregunta es: "como puedo leer datos de varias -tablas- en un mismo formulario", cosa con describe mal al usar mal los conceptos y gracias a confundir "tabla" con "modelo".
                        
                        y en respuesta a la pregunta lee cuidadosamente esto (y josh tambien):
                        
                        http://www.yiiframeworkenespanol.com/post/como-crear-multiples-objetos-en-una-sola-sin/mybb/713
                      • Daniel Caller
                        Bueno si es como Christian dice entonces, debes crearte un modelo que extienda de CFormModel y declararle los atributos y métodos que necesites... 
                        http://www.yiiframework.com/doc/guide/1.1/es/form.model

                    • Andres Restrepo Ir a la Publicación
                      hola tengo un modelo de usuario donde registro sus datos con su clave de acceso, ahora este usuario no debe actualizar su propia clave y para tal motivo 
                      no muestro los campos de clave cuando se edita el registro pero si trato de guardar yii sigue preguntando por esos campos dado que estan en la validacion 
                      del modelo del usuario, entonces como puedo indicarle a yii que cuando estoy en el update no me pregunte por la validacion de esos campos que ya no estoy 
                      mostrando
                      
                      muchas gracias
                      • Carlos Belisario
                        Buenas, eso que quieres hacer se maneja con escenarios
                        http://www.yiiframework.com/wiki/266/understanding-scenarios/
                        
                        al agarrarle el hilo seguro que lo logras, cualquier duda nos indicas
                      • Botia Julian
                        Me imaginó que en el update haces un find, el campo contraseña debería venir seteado y ahí no habría ningún problema. Sin embargo la solución de escenarios es muy buena solucion
                      • Andres Restrepo
                        Lo voy a verificar muchas gracias por los aportes

                    • Albert Medina Ir a la Publicación
                      Buenos días, les presento el siguiente problema que surgió de imprevisto cuando todo estaba funcionando a la perfección en el sistema. En este punto hay un script---> 
                      
                      <script type="text/javascript">
                      $(document).ready(function() {
                       var value = "<?php echo $model->rubrosSum?>";
                       if(value<14){
                       $('#BaremosSolicitudes_resultado_baremo_0').attr('disabled', true);
                       $('#BaremosSolicitudes_resultado_baremo_1').attr('disabled', true);
                       $('#BaremosSolicitudes_resultado_baremo_2').attr('disabled', true);
                       }else{
                       $('#BaremosSolicitudes_resultado_baremo_0').attr('disabled', false);
                       $('#BaremosSolicitudes_resultado_baremo_1').attr('disabled', false);
                       $('#BaremosSolicitudes_resultado_baremo_2').attr('disabled', false);
                       }}); 
                      
                      </script>
                      
                      Este valida un radio button, pero ahora no me levanta un el modal para agragar porque no esta definida $model->rubrosSum y dicha variable esta funcional en este modelo, al momento de quitar el script el problema desaparece. Agradecería su ayuda.
                      • Albert Medina
                      • Juan Tierra
                        Ya verificaste la sintaxis de rubrosSum este exactamente así en el modelo BaremosRubros, porque si trabajas en linux es sensible a mayúsculas  y minusculas
                      • Albert Medina
                        No, el servidor es windows, y esa variable esta funcionando perfectamente desde hace tiempo, de hecho lo utilizo para hacer ciertos reportes en pdf y excel, lo que me indica es un problema en el script
                      • Dan Royus
                        Parece claro que esa variable no la tienes definida, al menos en ese escenario ;)
                        
                        Eso o como te indican... caseSensitive ;)
                      • Albert Medina
                        Existe una relación entre ambos modelos y justo sobre esa variable, en un principio no tenia problemas para validar y levantar el modal
                      • Albert Medina
                        Resuelto amigos, gracias por la ayuda.
                      • Dan Royus
                        Ahora di que pasaba hombre :D
                      • Albert Medina
                        Este modelo era del modal, el modelo del formulario es otro parecido, moví el script al otro formulario y asunto arreglado, me pase de bestia al invocar el script desde allí, en un principio lo tenía desde otro modelo y no se que lapsus me dio que lo moví y no recordaba.
                      • Dan Royus
                        Es decir, que esa propiedad no existía ;)
                      • Albert Medina
                        Duplicaba la función del script y reventaba todo, lo podría hacer desde este form pero no tendria sentido alguno

                    • Christian Salazar Ir a la Publicación
                      [DISCULPAS PIDO]  por unos tweets personales que salen hacia la cuenta twitter @yiienespanol, no se cual setting es el que esta tomando publicaciones de un muro de FB y los lleva a esta cuenta de TW...pronto se resolvera.
                      • Christian Salazar
                        resuelto.

                    • Figueroa Sosa Ir a la Publicación
                      Alguien puede ayudarme a realizar consultas  en yii..
                      • Robson TI
                        yes
                      • Figueroa Sosa
                        como ? :D
                      • Robson TI
                        Oq você precisa gerar?
                      • Figueroa Sosa
                        Quiero consultar los datos almacenados en una tabla
                      • Robson TI
                        show exemple
                      • Albert Medina
                        explica que quieres consultar y has preguntas con fundamentos
                      • Carlos Belisario
                        Lee los conceptos y seguro se te hará simple el encontrar tu respuesta
                        http://www.yiiframework.com/doc/guide/1.1/es/database.overview
                      • Esteban Adrián P
                        Concentrate en los métodos "actionIndex" y "actionAdmin" y sus vistas... No es tan complejo, de veras te digo :)
                      • Andrés Ubilla
                        Esto es querer que hagan todo por ti, queda claro que no has leído nada de la documentación de Yii.

                    • Marina Isolda Ir a la Publicación
                      Hola estoy comenzando con yii y tengo un problema al cargar los datos a un cgridview, aparece este msj de error. Alguien sabe por que ocurre?
                      • Fredy Balaguera
                        Hola, normalmente se trata de los nombres de los campos o variables, necesitaríamos ver cómo tienes el código, pero por lo pronto, revisa el #7 donde dice unknown items
                      • Christian Salazar
                        es un problema en la forma como declaraste alguna expresion usada en alguna columna del CGridView.  deduzco debido al error de "opcode"...nada mas puedo adivinar eso, no saques fotos del stacktrace, copia y pega el stacktrace porque eso ayuda a saber de donde provino el error.
                      • Marina Isolda
                        PHP notice
                        
                        Undefined offset: 0
                        
                        C:\xampp\htdocs\redesceba\yii\framework\base\CComponent.php(606) : eval()'d code(1)
                        
                        Stack Trace
                        #0 
                        +  C:\xampp\htdocs\redesceba\yii\framework\base\CComponent.php(606): eval()
                        #1 
                        +  C:\xampp\htdocs\redesceba\yii\framework\zii\widgets\grid\CDataColumn.php(131): CComponent->evaluateExpression("substr($data->conceptosCotizacions[0]->descripcion,0,30)", array("data" => Cotizacion, "row" => 2))
                        #2 
                        +  C:\xampp\htdocs\redesceba\yii\framework\zii\widgets\grid\CGridColumn.php(144): CDataColumn->renderDataCellContent(2, Cotizacion)
                        #3 
                        +  C:\xampp\htdocs\redesceba\yii\framework\zii\widgets\grid\CGridView.php(589): CGridColumn->renderDataCell(2)
                        #4 
                        +  C:\xampp\htdocs\redesceba\yii\framework\zii\widgets\grid\CGridView.php(545): CGridView->renderTableRow(2)
                        #5 
                        +  C:\xampp\htdocs\redesceba\yii\framework\zii\widgets\grid\CGridView.php(455): CGridView->renderTableBody()
                        #6 
                        +  C:\xampp\htdocs\redesceba\yii\framework\zii\widgets\CBaseListView.php(160): CGridView->renderItems()
                        #7 
                         unknown(0): CBaseListView->renderSection(array("{items}", "items"))
                        #8 
                        +  C:\xampp\htdocs\redesceba\yii\framework\zii\widgets\CBaseListView.php(143): preg_replace_callback("/{(\w+)}/", array(CGridView, "renderSection"), "{summary} {items} {pager}")
                        #9 
                        +  C:\xampp\htdocs\redesceba\yii\framework\zii\widgets\CBaseListView.php(128): CBaseListView->renderContent()
                        #10 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CBaseController.php(173): CBaseListView->run()
                        #11 
                        –  C:\xampp\htdocs\redesceba\sis.adm\protected\views\cotizacion\admin.php(129): CBaseController->widget("zii.widgets.grid.CGridView", array("id" => "cotizacion-grid", "dataProvider" => CActiveDataProvider, "itemsCssClass" => "table table-striped table-bordered table-hover", "enablePagination" => true, ...))
                        124                         'imageUrl' => Yii::app()->request->baseUrl . '/img/icons/file.png',
                        125                     ),
                        126                 ),
                        127             ),
                        128         ),
                        129     )); ?>
                        130 </div>
                        131 <?php $this->endWidget();?>
                        132                             
                        133                             
                        #12 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CBaseController.php(126): require("C:\xampp\htdocs\redesceba\sis.adm\protected\views\cotizacion\adm...")
                        #13 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CBaseController.php(95): CBaseController->renderInternal("C:\xampp\htdocs\redesceba\sis.adm\protected\views\cotizacion\adm...", array("model" => Cotizacion), true)
                        #14 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CController.php(869): CBaseController->renderFile("C:\xampp\htdocs\redesceba\sis.adm\protected\views\cotizacion\adm...", array("model" => Cotizacion), true)
                        #15 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CController.php(782): CController->renderPartial("admin", array("model" => Cotizacion), true)
                        #16 
                        –  C:\xampp\htdocs\redesceba\sis.adm\protected\controllers\CotizacionController.php(574): CController->render("admin", array("model" => Cotizacion))
                        569         if (isset($_GET['Cotizacion']))
                        570             $model->attributes = $_GET['Cotizacion'];
                        571 
                        572         $this->render('admin', array(
                        573             'model' => $model,
                        574         ));
                        575     }
                        576 
                        577     /*public function actionAdminBp()
                        578     {
                        579         $this->validarSession();
                        #17 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\actions\CInlineAction.php(49): CotizacionController->actionAdmin()
                        #18 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CController.php(308): CInlineAction->runWithParams(array())
                        #19 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\filters\CFilterChain.php(133): CController->runAction(CInlineAction)
                        #20 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\filters\CFilter.php(40): CFilterChain->run()
                        #21 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CController.php(1145): CFilter->filter(CFilterChain)
                        #22 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\filters\CInlineFilter.php(58): CController->filterAccessControl(CFilterChain)
                        #23 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\filters\CFilterChain.php(130): CInlineFilter->filter(CFilterChain)
                        #24 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CController.php(291): CFilterChain->run()
                        #25 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CController.php(265): CController->runActionWithFilters(CInlineAction, array("accessControl", "postOnly + delete"))
                        #26 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CWebApplication.php(282): CController->run("admin")
                        #27 
                        +  C:\xampp\htdocs\redesceba\yii\framework\web\CWebApplication.php(141): CWebApplication->runController("cotizacion/admin")
                        #28 
                        +  C:\xampp\htdocs\redesceba\yii\framework\base\CApplication.php(169): CWebApplication->processRequest()
                        #29 
                        –  C:\xampp\htdocs\redesceba\sis.adm\index.php(13): CApplication->run()
                        08 defined('YII_DEBUG') or define('YII_DEBUG',true);
                        09 // specify how many levels of call stack should be shown in each log message
                        10 defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
                        11 
                        12 require_once($yii);
                        13 Yii::createWebApplication($config)->run();
                      • Marina Isolda
                        ok revisare la linea 7, es que mi problema es que aparte de que estoy comenzando con yii
                      • Christian Salazar
                        ves q es mas facil ?  el error esta en esta expresion:
                        
                        CComponent->evaluateExpression("substr($data->conceptosCotizacions[0]->descripcion,0,30)", array("data" => Cotizacion, "row" => 2))
                      • Christian Salazar
                        por ejemplo, supon que una columna quiere esto de un "modelo" llamado Cliente:
                        
                        array("name"=>"username")   
                        // por defecto imprimirá: "csalazar", pero quieres que diga: "Christian Salazar, Asesor de Sistemas"
                        
                        entonces, en vez de hacer:
                        array("name"=>"username", "value"=>"$data->nombre.\" \".$data->apellido.\" \"....blablabla").....(tipos de expresiones "inline" que causan errores de opcode como el tuyo con facilidad extrema)
                        
                        entonces haces:
                        array("name"=>"friendlyusername"),
                        
                        en consecuencia veras que "Cliente.friendlyusername" NO EXISTE en tu tabla manejada por el modelo Cliente, pero, para eso usas un MagickGetter:
                        
                        
                        // Cliente.php
                        class Cliente extends CActiveRecord {
                           ..
                           public function getFriendlyUserName(){
                               return sprintf("%s %s (%s)", $this->nombre, $this->apellido,$this->cargo);
                           }
                        }
                        
                      • Marina Isolda
                        <div id="gridctizacionap">
                            <?php $this->widget('zii.widgets.grid.CGridView', array(
                                'id'=>'cotizacion-grid',
                                'dataProvider'=>$model->search(2),
                                'itemsCssClass'=>'table table-striped table-bordered table-hover',
                                //'filter'=>$model,
                                'enablePagination' => true,
                         'pager'=>'LinkPager',//anulando la clase ClinkPager default
                         'pagerCssClass'=>' pager pagination',
                                'columns'=>array(
                                    array(
                                        'name'=>'',
                                        'header'=>'Empresa',
                                        'value'=>'$data->idCliente->idEmpresa->razon_social',
                                    ),
                                    array(
                                        'name'=>'',
                                        'header'=>'Contacto',
                                        'value'=>'$data->idCliente->nombre." ".$data->idCliente->apellidos'
                                    ),
                                    array(
                                        'name'=>'',
                                        'header'=>'Cotización',
                                        'value'=>'$data->no_cotizacion',
                                    ),
                                    array(
                                        'name' => '',
                                        'header' => 'Partida',
                                        'type'=>'raw',
                                        'value' => 'substr($data->conceptosCotizacions[0]->descripcion,0,30)'
                                    ),
                                    array(
                                        'name' => '',
                                        'header' => 'Cantidad',
                                        'type'=>'raw',
                                        //'value' => '$data->idCliente->id_usuario=='.Yii::app()->user->id.'?$data->id_banco==1?($data->total+($data->total*0.16)):$data->total:0',
                                        'value'=>'number_format($data->obtencionTotal(),2)',
                                    ),
                                    array(
                                        'class' => 'CButtonColumn',
                                        'template' => ' {pdf} {enviar} {envia} {copiar} {datosficales}',
                                        'buttons' => array(
                                            'pdf' => array(
                                                'label' => 'Pdf',
                                                'url' => "CHtml::normalizeUrl(array('verPdf', 'id'=>\$data->id_cotizacion))",
                                                'imageUrl' => Yii::app()->request->baseUrl . '/img/icons/search.png',
                                            ),
                                            'enviar' => array(
                                                'label' => 'Enviar Cotizacion',
                                                'url' => "CHtml::normalizeUrl(array('preEnviarCotizacion', 'id'=>\$data->id_cotizacion))",
                                                'imageUrl' => Yii::app()->request->baseUrl . '/img/icons/mailrojo.png',
                                                'options' => array('class' => 'pdf'),
                                                'visible'=>'$data->envio_cotizacion != 1',
                                            ),
                                            'envia' => array(
                                                'label' => 'Enviar Cotizacion',
                                                'url' => "CHtml::normalizeUrl(array('preEnviarCotizacion', 'id'=>\$data->id_cotizacion))",
                                                'imageUrl' => Yii::app()->request->baseUrl . '/img/icons/mailverde.png',
                                                'options' => array('class' => 'pdf'),
                                                'visible'=>'$data->envio_cotizacion == 1',
                                            ),
                                            'copiar' => array(
                                                'label' => 'Copiar cotizacion',
                                                'url' => "CHtml::normalizeUrl(array('copiarCotizacion', 'id'=>\$data->id_cotizacion))",
                                                'imageUrl' => Yii::app()->request->baseUrl . '/img/icons/text.png',
                                                'options' => array('class' => 'pdf'),
                                            ),
                                            'datosficales' => array(
                                                'label' => 'Enviar datos fiscales',
                                                'url' => "CHtml::normalizeUrl(array('/datosFiscales/envioDatosFiscales', 'id'=>\$data->id_cotizacion))",
                                                'imageUrl' => Yii::app()->request->baseUrl . '/img/icons/file.png',
                                            ),
                                        ),
                                    ),
                                ),
                            )); ?>
                      • Marina Isolda
                        ese es mi data grid
                      • Marina Isolda
                        y tengo otros 4 con el mismo codigo y no me han dado problemas
                      • Marina Isolda
                        la cuestion es que yo no diseñe la aplicacion unicamente mi trabajo es modificarla, y entonces cuando migre la aplicacion a mi servidor local, ese fue el unico problema con el que me encontre

                    • Julian Andres Garzon Morales Ir a la Publicación
                      Buenas noches estoy trabajando con highcharts, estoy haciendo una gráfica combinada, no se como crear las series por medio de JSON intente algo así pero la gráfica aparece en blanco
                      
                      'series' => array( $this->createUrl('reporte/getDataInventario')),
                      y en la accion getDataInventario
                      $data = array();
                      foreach($inventario as $evento){
                       $data[] = array(
                                 'type'=>'column',
                                 'name'=>$evento['nombre'],
                                 'data'=> array($evento['cantidad']),
                       );
                      } 
                      echo CJSON::encode($data);
                      Yii::app()->end();
                      
                      Si alguien puede ayudarme lo agradezco infinitamente o si tienen algun codigo o pagina donde pueda investigar como hacerlo, buena noche
                      • Jhon J Toloza
                        http://www.highcharts.com/ supongo que usa estos highcharts ? si es asi ahi esta la pagina basicamente se trata de un <div id="chart"></div> luego un script que empieza asi $(function () {
                            $('#chart').highcharts({ ... y la libreria claro .... puede ver la api y hasta ejemplos de como funciona en la pagina para mas info aqui un ejemplo ...
                      • Jhon J Toloza
                        http://jsfiddle.net/gh/get/jquery/1.9.1/highslide-software/highcharts.com/tree/master/samples/highcharts/demo/line-basic/
                      • Jhon J Toloza
                        lo que debe ud hacer es construir este script dinamicamente con php y luego registrarlo en la pagina y listo ...
                      • Julian Andres Garzon Morales
                        muchas gracias por responder, ya he hecho varias gráficas dinamicamente pero son de tipo pie, pero en la que tengo problemas es una gráfica combinada de tipo pie y column pero ya encontré un ejemplo de como hacerlo, voy a probar si así me funciona  dejo el enlace por si a alguien mas le interesa el articulo. :D http://www.ponomaryov.org/yii-tutorials/handling-statistics-pulling-data-from-yii-and-displaying-with-highcharts/
                      • Jhon J Toloza
                        bueno el tutorial esta bien aunque, lo que mas importa es como se contruye el script, en tutorial se muestra xAxis: {
                        categories: json.dates
                        }, donde json.dates viene siendo algo como ... categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
                                        'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
                      • Julian Andres Garzon Morales
                        correcto yo consulto la base de datos y creo el array con los datos el problema estaba en que yo pretendia que con esta linea de codigo se crearan las series 'series' => array( $this->createUrl('reporte/getDataInventario')), debido a que no se puede hacer un foreach dentro del widget por que me genera error, lo que no sabia era que se podia crear un script para generar los datos, la verdad es que soy muy novato en yii y me cuesta bastante entender la estructuras de los codigos :)

                    • Ivan Salomon Ir a la Publicación
                      [CONSULTA POPULAR] Amigos alguien ha utilizado YiiBoilerplate?
                      el que lo uso, que le parece?
                      Dejo el link para los que NO lo conocen. Saludos
                      https://github.com/clevertech/yiiboilerplate#yiiboilerplate
                      • Esteban Adrián P
                        [OFF TOPIC]
                        http://www.slacktory.com/wp-content/uploads/2012/11/memes-in-commercials-aliens-guy-Alienware-ad.jpg
                      • Ivan Salomon
                        Troll !!! :P
                      • Esteban Adrián P
                        3:)
                      • Julian Calvo
                        Lo use y esta bien, pero opte por el yiistrap.
                      • Ivan Salomon
                        Hola Julian . Creo que te confundes con el yiibooster. Esto es otra cosa ;)
                      • Julian Calvo
                        Teienes razon, estabe refiriendome unicamente al aspecto de integracion con el twitter bootstrap.
                      • Ivan Salomon
                        Abrazos

                    • Sergio Cabrera Ir a la Publicación
                      Curso de Frondtend Mejorandola
                      http://sh.st/yex66

                      • Alejo Peña Ir a la Publicación
                        Como puedo hacer un panel de administracion con checking de permisos?
                        • Juan Rubén Medina Eliett
                          cruge
                        • Alejandro Benavides
                          Te recomiendo investigues sobre RBAC si lo que quieres es tener roles y otorgar permisos
                        • Ivan Salomon
                          Cruge
                        • Christian Salazar
                          cruge o rights, 
                          cruge trae la UI para hacerlo en linea,

                      • Lesther Peña Ir a la Publicación
                        Buenas tengo un formulario de multiples modelos y por medio de un archivo js que diseñe muestro el modelo que necesito llenar segun la opción que elija del select
                        el select es de dos opciones
                        Copia dura 
                        Electronico
                        mi pregunta si existe una forma que de acuerdo a lo que eliga los modelos que permanecen ocultos no se envien ya que no me interesa que se cargue datos en sus tablas con columnas vacias lo ideal es que logre enviar lo que necesito nada mas
                        • William Quitian
                          Podría eliminar el attribute name de cada input al momento de ocultar el campo, esto se podría hacer con jquery
                        • Lesther Peña
                          willian yo use el metodo o la funcion de remover el dato que esta oculto y no me funciono por que al eliminarlo no se manda lo que llene a la tabla tengo como 6 dias enfrascado en como seria la opcion que me dices
                        • William Quitian
                          Envía el código que estas utilizando
                        • Recursos Formacion
                          Dejando aparte otras opciones, suponiendo que envies la opcion del formulario elegido, porque no controlas la carga en PHP directamente?
                        • Lesther Peña
                          por que no supe donde debia colocar la funcion y como yii tiene la bondad que puedes crear un archivo js y lo puedes llamar pero si me puedes orientar como se hace por php. Es bueno tener conocimientos de varias opciones
                        • Recursos Formacion
                          el js lo sigues utilizando para que seleccione el formulario adecuado, pero a partir de ahi, puedes seleccionar distintos formularios enteros, o un unico formulario, seleccionando campos
                          
                          Cuando vuelves a PHP, en el controlador, preguntas que formulario has recibido, si son distintos formularios, o si es uno solo, compruebas el campo que utilizaste en javascript para hacer la seleccion, y manejas los campos adecuados en funcion de dicho valor
                        • Miguel Jaimes
                          Hay programadores que ocultan los campos dependiendo las opciones que elija el usuario, pero si te fijas bien alguien podrian romper estas validaciones desde el navegador, Podrias trabajarlo con Ajax dependiendo la opción que elija el usuario renderizas la vista en un Div en la controladora recibes con un $_POST y dependiendo el tipo muestra esto o lo otro. Ejemplo : $form->dropDownList($model, 'fk_tipo', CHtml::listData(Tabla::model()->findAll(array('condition' => 'id_tabla', 'order' => 'descripcion ASC')), 'id_tabla', 'descripcion'), array('empty' => 'Seleccione..', 'title' => 'Seleccione..',
                                      'ajax' => array(
                                          'type' => 'POST',
                                          'url' => CController::createUrl('/Controlador/accion'),
                                          'data' => array("'id_tabla" => "js:this.value",'ValorSelect' => 'js:$("input:radio[name=fk_condicion]:checked").val()',),
                                          'beforeSend' => 'js:function(data){  //aca yo limpio Mis Campos o declaras valores que quieren que se ejecuten algo
                                  }',
                                          'success' => 'function(data) {
                          //aca Traigo el formulario o la vista y lo cargo en un Div
                                                                $("#contenido").html(data);
                                                                                          
                                                          }',
                                          'error' => 'function(){alert("Ocurrio un Error en su solicitud !");}',
                                      )), array('class' => 'span6'));
                        • Francisco Martinsky
                          arma los formularios  en diferentes vistas y en tu principal  los llamas  con un renderpatrial segun tu opcion del select . Así lo hago yo.  O  también puedes hacerlo por ajax, cargas el formulario segun tu opcion y al hacer submit llamas a la funcion que le corresponda. cada uno.
                        • Daniel Caller
                          Me parece más lógico que cargues los formularios mediante Ajax

                      • Sergio Cabrera Ir a la Publicación
                        Cursos de Capacity
                        http://sh.st/y0jta
                        • Robson TI
                          password please ..
                        • Javier Lema
                          El enlace no funciona :(
                        • Sergio Cabrera
                          El enlace si esta funcionando ahorita pude probar.

                      • Jose Luis Ir a la Publicación
                        Hola, buen día, para quienes usaron CRUGE y tuvieron el requerimiento que no se desconectara la sesión, sino que sólo si había inactividad por parte del usuario, cómo lo solucionaron?
                        • Arley Romero
                          En algún momento me enfrente a este caso, la solución fue reiniciar el tiempo de sesión cada vez que el usuario realizará alguna acción en la página, para esto modifique la función beforeaction del CController. 
                          Nota: Con esta modificación el generador Gii deja de funcionar;  Christian Salazar  en algun momento explicaba los pros y los contras de modificar esta funcionalidad.
                        • Jose Luis
                          Podrías pasarme el código para que vea? aprovechando, te ha pasado que la sesión aún tiene tiempo de vida, pero por alguna razón (que aún ando revisando) se desconecta y queda activo el usuario invitado? Hay personas que se loggean, y unos 10min después sucede la desconexión, no es que sea asi en todo momento, sino que pasa, otras veces, después de unas horas, he notado que no dan loggout, sino que cierran la pestaña y la sesión queda activa, entonces cuando se loggean de nuevo, se "reabre" la que tenían, pero no se si por ahi esté dando lata algo.
                        • Arley Romero
                          Ya te colaboro con el código, lo de la sesión si me ha pasado pero me canse de buscar la causa y me decante por errores en conectividad.
                        • Jose Luis
                          mmmmm y cómo lo solicionaste o qué hiciste, es decir, tampoco puedo decirle al usuario que es por su red y que se va a estar desconectando :P  jajajajaj
                        • Arley Romero
                          public function beforeAction($action) {
                                  //Yii::log(__METHOD__ . ' isGuest: ' . (Yii::app()->getUser()->isGuest ? 'Si' : 'No'));
                                  // Cada vez que se ejecuta una acción se actualiza el tiempo de expiración
                                  // TODO: integrar con cruge o mejorar
                                  $sys = Yii::app()->user->um->getDefaultSystem();
                                  $duration = $sys->getn('sessionmaxdurationmins');
                                  // Encuentra la última sesión y actualiza la fecha de expiración
                                  $model = CrugeSession::model()->findLast(Yii::app()->user->id);
                                  if ($model != null) {
                                      $model->expire = CrugeUtil::makeExpirationDateTime($duration);
                                      $model->save();
                                  }
                                  return true;
                              }
                        • Arley Romero
                          en el archivo...framework/web/ccontroller.php
                        • Arley Romero
                          pruebalo y me cuentas
                        • Jose Luis
                          Gracias Arley Romero, lo implemento y te digo. Gracias
                        • Ariel Richard Condori Rodriguez
                          Un plan b, alguna vez lo hice de esta forma, agregar este codigo a views/layouts/main.php   
                          
                          <script type="text/javascript">
                                      var tstampActual = 0;
                                      var comprobar = 300000; //60*5= 300000 = 5 minutos
                          
                                      function actividad() {
                          
                                          var tstamp = new Date().getTime();
                          
                                          if (Math.abs(tstampActual - tstamp) > comprobar) {
                                                   alert("Se detecto inactividad en la aplicacion, por seguridad ingrese nuevamente. Gracias");
                                                   window.location = '<?php echo yii::app()->baseurl?>'+'/index.php?r=site/logout';
                                          } 
                                      }
                                      window.addEventListener('load', function() {
                                          document.body.addEventListener('mousemove', function() {
                                              tstampActual = new Date().getTime();
                                          }, false);
                                          setInterval(function() {actividad()}, comprobar);
                                      });
                          </script>
                        • Christian Salazar
                          no es cruge...es de Yii.
                        • Christian Salazar
                          y hay varios casos de ejemplo (2 o 3) en el foro (donde solo los valientes buscan).    No es cruge, es yii, por qué ? porque el dueño de la autentiaccion es yii, cruge solo gestiona en alto nivel, puden hacer un script ajax que diga si la sesion cliente murió y por tanto hacer algo del lado cliente...nada complicado.
                        • Ariel Richard Condori Rodriguez
                          mi estimado Christian Salazar  el código que comparto es parte de Yii sólo que se aumenta javascript
                        • Ariel Richard Condori Rodriguez
                          window.location = '<?php echo yii::app()->baseurl?>'+'/index.php?r=site/logout';  donde accemos a logout termina la "session"
                        • Christian Salazar
                          no lo he visto, solo te comento que hay varios casos en el foro..
                        • Ariel Richard Condori Rodriguez
                          Comparto nuevamente el código para todos, sólo es agregar este codigo en views/layouts/main.php :
                          
                          <script type="text/javascript">
                          var tstampActual = 0;
                          var comprobar = 300000; //60*5= 300000 = 5 minutos
                          
                          function actividad() {
                          
                          var tstamp = new Date().getTime();
                          
                          if (Math.abs(tstampActual - tstamp) > comprobar) {
                          alert("Se detecto inactividad en la aplicacion, por seguridad ingrese nuevamente. Gracias");
                          window.location = '<?php echo yii::app()->baseurl?>'+'/index.php?r=site/logout';
                          }
                          }
                          window.addEventListener('load', function() {
                          document.body.addEventListener('mousemove', function() {
                          tstampActual = new Date().getTime();
                          }, false);
                          setInterval(function() {actividad()}, comprobar);
                          });
                          </script>
                        • Christian Salazar
                          repito lo que puse en el foro en algun momento:
                          en el lado cliente hay que insertar un script al final, que incruste una llamada ajax, esta llamando a un action, y, devolviendo este el numero de sesion (oculto, enmascarado, boolean como sea), si ese numero se vuelve "false" entonces, tambien será "false" cuando un action normal quiera acceder a funciones protegidas para usuarios autorizador, por tanto asi se sabe si del lado cliente la sesion expiro.  Ese ajax, cuando detecte un "false", entonces toma acciones: hace un redirect a pantalla de login, o pone una nota en la cabecera, etc.
                        • Christian Salazar
                          tu script esta orientado a "actividad del usuario", pero no a "actividad de la sesion", seria bueno combinar...y hacer una extensión. eso ayudaría.
                        • Dan Royus
                          No creo que modificar el core de Yii sea la solución Ariel Richard Condori Rodriguez, más bien todo lo contrario ;)
                        • Christian Salazar
                          se me ocurren unas 10 vias para hacerlo sin alterar el core...el 90% de ellas basadas en el temido, olvidado, desconocido: override.
                        • Dan Royus
                          HAhahaha, como me gusta la ironía.... :D
                        • Ariel Richard Condori Rodriguez
                          estimado Dan Royus, "Mucho ruido y pocas nueces", no veo tu solición, encantado por verlo.
                        • Christian Salazar
                          bueno vamos al punto, y para ayudar a Arley Romero, quien fue el promotor de la idea de alterar CController. (no fue Ariel Richard Condori Rodriguez) :
                          
                          1. si miras mas allá, verás que la aplicación por defecto que se te da tiene un componente llamado Controller.php, que extiende de CController. No está ahi de adorno.
                          
                          2. Todas tus controladoras "Deben" derivar de esa controladora Controller.php 
                          
                          [php]
                           // gii lo hace por ti, 
                          class SiteController extends Controller {  ... 
                          [/php]
                          
                          3. si se necesita algo extra como ejemplo insertar un script en todas las paginas (el script de Ariel Richard), entonces, se hace "override" del metodo beforeAction: En "tuapp/components/Controller.php".....no en CController.
                          
                          4. entonces, toda controladora que tengas hara uso de ese script.
                          
                          5. Y el script se inserta asi:
                          
                          [php]
                          class Controller extends CController {
                          
                          public function verificadorSesion($login_url){
                          Yii::app()->getClientScript()->registerScript(
                          "verificador_sesion_script_id",
                          "
                          var tstampActual = 0;
                          var comprobar = 300000; //60*5= 300000 = 5 minutos
                          function actividad() {
                          var tstamp = new Date().getTime();
                          if (Math.abs(tstampActual - tstamp) > comprobar) {
                          alert("Se detecto inactividad en la aplicacion, por seguridad ingrese nuevamente. Gracias");
                          window.location = '{$login_url}'}}
                          window.addEventListener('load', function() {
                          document.body.addEventListener('mousemove', function() {
                          tstampActual = new Date().getTime();
                          }, false);
                          setInterval(function() {actividad()}, comprobar);
                          });
                          ",CClientScript::POS_LOAD);
                          }
                          
                          public function beforeAction($norecuerdocual){
                              $this->verificadorSesion(CHtml::normalizeUrl(array("/site/login")));
                              parent::beforeAction($norecuerdocual);
                          }
                          /php]
                        • Dan Royus
                          Iba a decir lo mismo.
                          
                          Incluso, si creas un módulo como el Blog, suele extender del Controller de la aplicación, por lo que todo controlador del Blog tiraría del controlador de tu aplicación, que a su vez, extendería del controlador del framework. Sería un override sobre otro override ;)
                        • Christian Salazar
                          para eso son,
                        • Dan Royus
                          No obstante Ariel Richard, aunque tienes razón en parte, creo que a veces se abusa en exceso, de "la facilidad" de lanzar una preguntar al aire y que nos resuelvan la vida en pocos minutos.
                          
                          Con el simple ejercicio de hacer el trainning de Yii y seguir los tutoriales de la guía rápida, muchas de las preguntas que aquí salen, no se realizarían, un trabajo que en una semana, exagerando bastante, haces en tu casa.
                          
                          Y no es que me importe ayudar a otra personas, es que respondiendo a veces, perjudicas más que ayudas ;)

                      • Carlos Belisario Ir a la Publicación
                        [SUPER OFF-POPIC]
                        Alguno ha pensado un poco en que va a pasar cuando se haga el release de Yii 2.0 con los proyectos recién empezados en Yii 1.X? al igual que le paso a la gente con symfony y zend framework nos toca pasar de trabajar de una manera a otra totalmente distinta ya que las versiones son totalmente incompatibles. Toca hacer refactory? mandar a la mierda Yii2 y matar y mantener el proyecto con Yii1.X?  que hacer si tenemos que empezar un proyecto en estos momentos donde están diciendo que lanzarán otra versión (que todavía esta en beta y no se puede usar para producción y esto tiene que quedar muy claro es un beta) y que la versión 1 no esta muerta pero en algún momento no muy lejano lo estará o simplemente no será la estable de nuestro querido framework.
                        
                        Es algo que me da vuelta, empezar una app con Yii usar otro framework que hacer, no me malentiendan me gusta usar YiiFramework y me alegra que se estén actualizando a las "nuevas features" que está brindando el php (ojo no son conceptos nuevos son cosas que tienen mucho tiempo ya usandose en otros lenguajes pero recientemente aplicadas al php). Pero donde esta el plan de migración de versiones?  Si ando dando vuelta por una nueva app que me va a tocar hacer y me encuentro en el que hacer y por supuesto tenía que berrinchear un poco, saludos
                        • Miguel Ángel Lucas Sánchez
                          Me temo que es inevitable la confrontación de situaciones. Personas que tengan una api a màs del 90%  no veran con buenos ojos volver al inicio y cambiar toda la base de todo. Supongo también que aunque sea una versión estable habrá que esperar algo más, pero claro, tarde o temprano habrá que dar el salto, es inevitable. Está bien recordarlo para ir terminando cosas y prepararse para lo nuevo...
                        • Arley Romero
                          Me encuentro en este dilema justamentem, no se, si iniciar un nuevo proyecto con Yii2 o Yii1.1.15 que recomiendan los expertos; es mas alguno sabe la fecha en la cual se lance la version estable del Yii2?
                        • Christian Salazar
                          es inevitable. analizando la modalidad de trabajo del 90% de los devs de php, y gracias a la maña tan arraigada de hacer las cosas como les venga del forro..pues entonces no queda otra:  si quieren Yii2, a aprender de nuevo y les tocará hacer sus codigos de nuevo. son dos mundos. yii1 y yii2.
                        • Esteban Adrián P
                          Hace años, muchos, unos 20, estudiaba Ingeniería en Sistemas...
                          Un profesor (Programación I, Pascal) asaba para programar "chwritte"...
                          Por entonces ya hacía mis pininos con Clipper Summer '87 y se "amenazaba" la salida del 5 (y en meses del 5.3)...
                          Dijo algo, por entonces que no comprendí hasta este momento:
                          "Uso chwritte xq lo entiendo, a pesar que hay otros editores mucho mejores y potentes... Pero a mi chwritte me alcanza..."
                          No hace mucho George R. R. Martin (Game of Thrones) confesó en una entrevista que la computadora donde "pare" sus escritos tiene DOS y usa WordStar O.o
                          Entonces, pregunto: ¿Es importante la herramienta o el obrero?
                          Si sabés utilizar Yii 1.x, y te alcanza.. ¿Para qué cambiar?...
                          Esa carrera absurda de ver qué estrella decora tu escalafón porque usás tal o cual herramienta, me parece estúpida (RAE, consultar)...
                          No estoy de acuerdo con eso de usar una versión más nueva xq ¿es nueva? Si la que tengo me alcanza, y listo... :D
                        • Christian Salazar
                          porque es importante cambiar. por haber cambiado estas usando .GIT, por haber cambiado pasaste de hacer aplicaciones de consola con NCURSES a aplicaciones Deskto y de ahi a aplicaciones Web...hay que cambiar.  namespaces es la via correcta para sacar a ese viejo php de ese estado antiguo aunque funcional, tan funcional como Wordstar.
                        • Christian Salazar
                          lo que digo es: "no cambiar con miedo".  cambiarse es cambiarse, si eso implicar hacer cosas de cero, a hacerlas. Ahora, si una aplicacion web puede hacerse con Yii1x, pues haganla, pero, mejor será hacerla con Yii2, por que el tiempo pasa rapido...y si un dia (5 años despues) te dicen sabes ? esta cosa X es muy buena..necesita que sepas "A", para saber "A" necesitas saber "B", y esta implica "C"...y tu ni siquiera llegas a "M"...te faltan 10 letras..es decir...5 años para entender C, B y A....estas muerto.
                        • Christian Salazar
                          ahora, que hace uno para evitar el "cero y empezar de cero"....hacer desde ya aplicaciones capaces de ser reutilizables, desarmando la funcionalidad en piezas que funcionen solas, cada pieza por cuenta, migrar las piezas es migrar la aplicacion.
                        • Esteban Adrián P
                          50/50... Convengamos que subirse a la alocada carrera de usar siempre lo último es tan dañino como quedarse en el tiempo. :)
                        • Christian Salazar
                          exacto...y si no fuera por los cambios, internet no existiría, las familias seguirían enviandose cartas que llegaban cada 45 dias...(esto lo saben los que se fueron, no los que se quedaron)
                        • Dan Royus
                          Si no cambiáramos, no habría sitio para tanto programador. Cambiar implica que se renueva el parque de programadores, que unos se quedan en un modelo, y otros que llegan aprenden.
                        • Carlos Belisario
                          El problema no es el cambio, el problema es que no hay transición para cambio, simplemente como bien puede verse en las discusiones del framework y el código que ya han liberado son dos mundos distintos, ¿que hacia allá tenía que irse? claro que por supuesto que si, pero por la tardanza pensé que debía haber un plan para hacer el cambio de Yii1 a Yii2 menos traumático, que como paso con Zf y symfony, la sintaxis namespace, closures, di, etc, etc que tiene nuevo yii2 no es nada del otro mundo ni nada nuevo, incluso en el php ya hay frameworks mas maduros en la aplicación de esto "nuevo" que brindo el php (miren sf2, zf2, laravel, y puedo seguir nombrando), lo que berrincheo (y vuelvo y lo digo que es puro berrinche que tenía que hacer con gente que me entendiera =S) es que no hubo un buen plan para no hacer tan traumático el cambio de versiones, que es lo que a la final me hace pensar.
                          
                          Ojo no estoy en desacuerdo con que se mejore ni se implementen features de versiones mas recientes de php, de hecho lo apoyo y bastante incluso creo que Yii se quedo un poco dormido en empezar a implantarlos, lo que vi traumático es que no hay transición, de hecho la decisión que se tomo en el caso de la nueva app con mis compañeros fue el cambio de fw pensando justamente en ese detalle.
                        • Christian Salazar
                          de acuerdo.  aunque hacer una transicion mas suave es muy dificil...namespaces son  o no son...
                        • Carlos Belisario
                          seeee e imagino que no era parte de las prioridades porque como bien se ha visto en las comunidades php Yii era uno de los que se esta quedando en 5.2, sin uso de namespace, etc incluso cosa buena de la versión 2 es la facilidad para usar composer con ella, el autoload usa el standar que se discutio para la interoperatibilidad entre fw, etc y a todo eso se tenía que empezar a llegar e incluso debió cocinarse hace mucho, saludos ya dejo de berrinchar pa que no me regañen =)

                      • Alejo Peña Ir a la Publicación
                        Hola.
                        Yo hice una copia exacta de un proyecto en yii desde un pc a otro..
                        Cuando pruebo mi app en el otro pc me sale el siguiente error..
                        Cual podria ser la causa?
                        (Obviamente hice todas las configuraciones necesarias)
                        • Carlos Belisario
                          pues la línea que indicas no tiene nada llamado idemp seguro que es el archivo que te esta dando problemas? lo más seguro es que en tu otra pc tengas los warning ocultos por el php ini y en la pc "nueva" por llamarla de una manera tegas el error_reporting E_ALL lo cual muestra cualquier error o warning en algún código
                        • Recursos Formacion
                          o no copiaste el framework, o no en el mismo sitio.....
                        • Recursos Formacion
                          Si dices "hice todas las configuraciones necesarias" la respuesta es facil....revisalas
                        • Christian Salazar
                          si algun dia, por el amor de dios, se entendiera para qué es un STACK TRACE.....entonces, los programadores dejarían de enviar "fotos" del error y mandarían el stacktrace....viendo el stacktrace se ve quien causo la llamada y donde se produjo el error....por cierto, tambien existe el log....con el Log, y el Stacktrace se ve el causante del error...el resto es Adivinanza.

                      • Angelika Hernandez Ir a la Publicación
                        Hola  tengo el siguiente problema realice un crud con el generador para la tabla llamada ,ahora  quiero hacer una consulta a  esa misma tabla para contabilizar las llamadas que se han realizado,utilice un query pero no me funciona....espero alguna sugerencia Gracias
                        public function actionIndex()
                         {
                          $sql="SELECT * FROM llamada";
                         $sqlLlamada= Yii::app()->db->createComand($sql)->queryAll();
                         
                         $dataProvider=new CActiveDataProvider('Llamada');
                         $this->render('index',array(
                         'dataProvider'=>$dataProvider,
                         'sqlLlamada'=>$sqlLlamada,
                         ));
                         }
                        Esto lo coloque en el index.php de la views de llamda
                        <?php
                        if($sqlLlamada!==null){ ?>
                        <table border="1">
                        <tr>
                        <th>ejemplo de prueba</th>
                        </tr>
                        <tr>
                        <th>Id_Llamada </th>
                        <th>Num_Orden </th>
                        <th>Num_Llamada </th>
                        </tr>
                        <?php foreach ($llamada as $data){ ?>
                        <tr>
                        <td><?php echo $data->Id_Llamada;?></td>
                        <td><?php echo $data->Num_Orden;?></td>
                        <td><?php echo $data->Num_Llamada;?></td>
                        </tr>
                        <?php } ?>
                        </table>
                        <?php } else{
                        echo "No se encontraron registros!!";
                        } ?>
                        • Juvenal Claros
                          Hola buenas. por lo que veo en tu codigo, estas haciendo redundante, porque  basta con el CActiveDataProvider, checka todas las funciones que este clase...suerte!!!!!!!!1
                        • Mauro Maximiliano Martinez
                          Hola angelica, para comenzar, esta mal la logica ya que no respeta mucho el patron mvc y ademas estas realizando algo redundante. Con realizar la instancia de CActivedataProvider y enviarla a la vista alcanza. En tu vista index.php te conviene utilizar un widget para realizar la tabla con los datos. Ahi podes utilizar el "CGridView", al cual, con enviarle el $dataProvider te renderizara la tabla que necesitas.
                        • Angelika Hernandez
                          Gracias tenian razon!

                      • Daniel Caller Ir a la Publicación
                        Hola tengo el siguiente problema, uso cruge y además he implementado una extensión para el envío de email... Al momento de enviar el formulario de contacto en el servidor local lo envío correctamente pero en el servidor on-line me causa problemas con cruge... Pongo el error que me arroja
                        CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away. The SQL statement executed was: SELECT *
                        FROM `cruge_authitem`
                        WHERE name=:name
                        
                        Este es el código que generar el error:
                        
                        'visible'=>Yii::app()->user->checkAccess('action_contrato_update'),
                        
                        • Daniel Caller
                          Según he leído esto se genera por sobre carga en la BD ... he revisado la tabla cruge_authitem y tengo como 700 registros...
                        • Daniel Caller
                          Le he quitado todos los checkAccess y me manda esto
                          CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away. The SQL statement executed was: SELECT * FROM `cruge_session` `t` WHERE `t`.`idsession`=49 LIMIT 1
                        • Christian Salazar
                          1. te garantizo que el problema, ni es yii, ni menos cruge (que no tiene nada que ver con el issue que tienes).  el problema debe estar en alguna limitacion del hosting, una falta a la norma del mysql instalado (no se cual falta), cualquier otra cosa...700 registros es nada....7000 es nada...70.000 es nada...7.000.000 (es algo, y sin embargo funciona y bien).
                          
                          2. si ya existe el framework de correos de crugemailer, que te abstrae toda la app de detalles de correos y que permite incorporarle cualquier motor de correos...probada, requeteprobada, se sabe anda muy bien en ambientes extremos, y tiene 2 años de depuracion encima...(leiste sobre crugemailer ? algo de ella no te funciono ? que cosa falló ?).
                          Si tu app tiene necesidades especiales de correos, simplemente usando una clase override en MiCrugeMailer permite que toda tu app use eso, y comparta el motor y mecanismo de envio de correos, llamadas como la siguiente hacen que a tu sistema ni le importa que harás al momento de "enviar un correo", pudieras estar enviando correos, un sms, un mensaje por chat, un log, y un registro de control....todo bajo el caso de uso: "enviar un reporte de inventario al usuario para una lista de productos"
                          
                            Yii::app()->crugemailer->reporteInventario($usuario, $productos);
                          
                          3. que dicen los Logs ? application.log ? no los veo en tu reporte...
                        • Daniel Caller
                          Hola Christian gracias por responder... sí yo sé que el problema no es cruge, funciona bastante bien, lo cual agradezco infinitamente que te hayas tomado el trabajo de realizarlo, el motivo de mi consulta era saber por qué la aplicación le echa la culpa a cruge... 2. no uso crugemailer porque no necesito renderizar vistas para los correos y no quería extender la clase para sobreescribir el método de sendMail... el envío de correos lo tengo dentro de un método de un componente que entre otras tantas cosas revisa saldos y envía un correo plano como alerta... El log que pongo abajo es probando el formulario de contacto que trae Yii
                          2014/09/14 00:26:14 [error] [exception.CDbException] exception 'CDbException' with message 'CDbCommand falló al ejecutar la sentencia SQL: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away. The SQL statement executed was: SELECT *
                          FROM `cruge_authitem`
                          WHERE name=:name' in /home/u525160496/yii/framework/db/CDbCommand.php:543
                          Stack trace:
                          #0 /home/u525160496/yii/framework/db/CDbCommand.php(415): CDbCommand->queryInternal('fetch', Array, Array)
                          #1 /home/u525160496/public_html/protected/modules/cruge/components/CrugeAuthManager.php(825): CDbCommand->queryRow()
                          #2 /home/u525160496/public_html/protected/modules/cruge/components/CrugeWebUser.php(123): CrugeAuthManager->getAuthItem('action_proceso_...')
                          #3 /home/u525160496/public_html/themes/osatacna/views/layouts/main.php(60): CrugeWebUser->checkAccess('action_proceso_...')
                          #4 /home/u525160496/yii/framework/web/CBaseController.php(126): require('/home/u52516049...')
                          #5 /home/u525160496/yii/framework/web/CBaseController.php(95): CBaseController->renderInternal('/home/u52516049...', Array, true)
                          #6 /home/u525160496/yii/framework/web/widgets/CContentDecorator.php(76): CBaseController->renderFile('/home/u52516049...', Array, true)
                          #7 /home/u525160496/yii/framework/web/widgets/CContentDecorator.php(54): CContentDecorator->decorate('<div id="conten...')
                          #8 /home/u525160496/yii/framework/web/widgets/COutputProcessor.php(44): CContentDecorator->processOutput('<div id="conten...')
                          #9 /home/u525160496/yii/framework/web/CBaseController.php(206): COutputProcessor->run()
                          #10 /home/u525160496/yii/framework/web/CBaseController.php(300): CBaseController->endWidget('CContentDecorat...')
                          #11 /home/u525160496/public_html/themes/osatacna/views/layouts/column1.php(8): CBaseController->endContent()
                          #12 /home/u525160496/yii/framework/web/CBaseController.php(126): require('/home/u52516049...')
                          #13 /home/u525160496/yii/framework/web/CBaseController.php(95): CBaseController->renderInternal('/home/u52516049...', Array, true)
                          #14 /home/u525160496/yii/framework/web/CController.php(784): CBaseController->renderFile('/home/u52516049...', Array, true)
                          #15 /home/u525160496/public_html/protected/controllers/SiteController.php(186): CController->render('contact', Array)
                          #16 /home/u525160496/yii/framework/web/actions/CInlineAction.php(49): SiteController->actionContact()
                          #17 /home/u525160496/yii/framework/web/CController.php(308): CInlineAction->runWithParams(Array)
                          #18 /home/u525160496/yii/framework/web/filters/CFilterChain.php(133): CController->runAction(Object(CInlineAction))
                          #19 /home/u525160496/public_html/protected/modules/cruge/components/CrugeAccessControlFilter.php(90): CFilterChain->run()
                          #20 /home/u525160496/yii/framework/web/filters/CFilter.php(38): CrugeAccessControlFilter->preFilter(Object(CFilterChain))
                          #21 /home/u525160496/yii/framework/web/filters/CFilterChain.php(130): CFilter->filter(Object(CFilterChain))
                          #22 /home/u525160496/yii/framework/web/CController.php(291): CFilterChain->run()
                          #23 /home/u525160496/yii/framework/web/CController.php(265): CController->runActionWithFilters(Object(CInlineAction), Array)
                          #24 /home/u525160496/yii/framework/web/CWebApplication.php(282): CController->run('contact')
                          #25 /home/u525160496/yii/framework/web/CWebApplication.php(141): CWebApplication->runController('site/contact')
                          #26 /home/u525160496/yii/framework/base/CApplication.php(180): CWebApplication->processRequest()
                          #27 /home/u525160496/public_html/index.php(13): CApplication->run()
                          #28 {main}
                          REQUEST_URI=/index.php?r=site/contact
                        • Daniel Caller
                          Y repito en el local me funciona correctamente, en el hosting es el suplicio...
                        • Christian Salazar
                          General error: 2006 MySQL server has gone away,  por eso, #2, revisa q el hosting no imponga limitantes al numero de consultas, normalmente "has gone away" ocurre cuando el cliente mysql ha sido desconectado del servidor..desde el servidor, es decir, mysql dijo: "chao, no te oigo mas, kill socket".  razones ? muchas. timeouts cortos, etc.
                        • Daniel Caller
                          Sí estuve leyendo sobre eso... aunque no entiendo que tanto trabajo hace el servidor enviando un correo y diciéndome que el problema está en una consulta que hace cruge... Gracias Christian igual son sólo pruebas la aplicación es para una intranet sólo que la colgue en el hosting para probarla desde otras máquinas, ya que yo no uso windows ni el IExplorer y en el lugar donde la voy a poner sí
                        • Christian Salazar
                          por ejemplo. un "has gone away" ocurre cuando un script consume mucho tiempo y el servidor lo mata...hay variables PHP que controlan el tiempo maximo de ejecución, y si tu script php entero dura mas que todo eso...entonces va a ser colgado, y mysql vera que la conexion se cayó..terminando en ese error.
                        • Christian Salazar
                          claro que hace trabajo...autenticando, esperando respuestas, revalidando..etc etc etc...un email puede tardar 5 segundos en enviarse, si tu servidor tiene un PHP settting que diga que mas de 5 segundos es "matable" entonces matara a tu script....
                        • Christian Salazar
                          quieres simular el error en tu aplicacion local ? pon una llamda:
                          
                          public function actionMiAction(){
                             ...bla...
                             sleep(30);
                             $this->render(...);
                          }
                          tendrás un lindo "gone away"...busca el setting de php que da el maximo de ejecución por script. las aplicaciones de consola no sufren de ese mal. Eso sucede por el envio de emails, y mucho tiempo de ejecución en un mismo script...
                        • Daniel Caller
                          muchas gracias por tus explicaciones y tu tiempo Christian, al igual que muchos he estado leyendo las publicaciones que haces sobre modelado y realmente son verdaderos "quita vendas" de los ojos
                        • Christian Salazar
                          q bueno, me alegro que haya una voluntad de ver mas alla del teclado, el tiempo dedicado a sacarse la venda dara frutos,

                      • Percy Ivan Miranda Moreano Ir a la Publicación
                        Reliable Server for PHP on Laravel, RubyonRails.We provide web hosting, domain registration. http://www.hostinglaravel.com

                        • Pedro Gonzalo Soto Soto Ir a la Publicación
                          hola, estoy iniciando en el uso de yii, tengo que implementar algo llamado bootstrap, pero también encontré algo llamado yiistrap y yiibooster, cual me recomiendan? es para un proyecto de un ramo, espero sus respuestas, gracias
                          • Junior Cabrera Vasquez
                            bootstrap es la base de ambos!
                          • Pedro Gonzalo Soto Soto
                            Cual es más completo de los otros 2?
                          • Jose Gabriel Paredes Oduber
                            El bootstrap es el mejor
                          • Oscar Cortez
                            Yii booster usa bootstrap 3.1.1 y yiistrap usa bootstrap 2.3.2. Ambos incorporan gii (generador de crud). Yo uso yiibooster. Bootstrap es un framework frontend. Yiibooster y yiistrap son extensiones de yii para manejar componentes (widget) al estilo bootstrap
                          • Pedro Gonzalo Soto Soto
                            gracias por sus respuestas, una duda, el yiistrap me da una opcion en el gii para generar el crud, pero en yiibooster no encontre esa opcion (probe ambos), es normal o el yiibooster lo implemente mal?
                          • Oscar Cortez
                            Yiibooster igual tiene. Pero no hay mucha info en su pag oficial. Googlealo con: yiibooster gii config (jejeje como si no supiéramos googlear)
                          • Mauro Maximiliano Martinez
                            Utiliza yiibooster. Esta actualizado a la ultima version de bootstrap, y tiene los mismos widgets de yiistrap.

                        • Ramiro Anacona Meneses Ir a la Publicación
                          Hola Christian, dale una revisada a esto: http://www.yiiframeworkenespanol.org/foro/showthread.php?tid=832
                          
                          Gracias.
                          • Christian Salazar
                            respondido en el foro.
                          • Ramiro Anacona Meneses
                            (y)