Foros del Web » Programando para Internet » PHP »

como modificar una array statica

Estas en el tema de como modificar una array statica en el foro de PHP en Foros del Web. Hola, Mirad tengo esta array; Código PHP: public static  $definition  = array(          'table'  =>  'customer' ,          'primary'  =>  'id_customer' ,          'fields'  => array(              'secure_key'  ...
  #1 (permalink)  
Antiguo 13/06/2013, 11:25
 
Fecha de Ingreso: junio-2010
Mensajes: 353
Antigüedad: 13 años, 10 meses
Puntos: 6
como modificar una array statica

Hola,

Mirad tengo esta array;

Código PHP:
public static $definition = array(
        
'table' => 'customer',
        
'primary' => 'id_customer',
        
'fields' => array(
            
'secure_key' =>                 array('type' => self::TYPE_STRING'validate' => 'isMd5''copy_post' => false),
            
'lastname' =>                     array('type' => self::TYPE_STRING'validate' => 'isName''required' => true'size' => 32),
            
'firstname' =>                     array('type' => self::TYPE_STRING'validate' => 'isName''required' => true'size' => 32),

                        
'email' =>                         array('type' => self::TYPE_STRING'validate' => 'isEmail''required' => true'size' => 128),
            
'passwd' =>                     array('type' => self::TYPE_STRING'validate' => 'isPasswd''required' => true'size' => 32),
            
'last_passwd_gen' =>            array('type' => self::TYPE_STRING'copy_post' => false),
            
'id_gender' =>                     array('type' => self::TYPE_INT'validate' => 'isUnsignedId'),
            
'birthday' =>                     array('type' => self::TYPE_DATE'validate' => 'isBirthDate'),
            
'newsletter' =>                 array('type' => self::TYPE_BOOL'validate' => 'isBool'),
            
'newsletter_date_add' =>        array('type' => self::TYPE_DATE,'copy_post' => false),
            
'ip_registration_newsletter' =>    array('type' => self::TYPE_STRING'copy_post' => false),
            
'optin' =>                         array('type' => self::TYPE_BOOL'validate' => 'isBool'),
            
'website' =>                    array('type' => self::TYPE_STRING'validate' => 'isUrl'),
            
'company' =>                    array('type' => self::TYPE_STRING'validate' => 'isGenericName'),
            
'siret' =>                        array('type' => self::TYPE_STRING'validate' => 'isSiret'),
            
'ape' =>                        array('type' => self::TYPE_STRING'validate' => 'isApe'),
            
'outstanding_allow_amount' =>    array('type' => self::TYPE_FLOAT'validate' => 'isFloat''copy_post' => false),
            
'show_public_prices' =>            array('type' => self::TYPE_BOOL'validate' => 'isBool''copy_post' => false),
            
'id_risk' =>                    array('type' => self::TYPE_INT'validate' => 'isUnsignedInt''copy_post' => false),
            
'max_payment_days' =>            array('type' => self::TYPE_INT'validate' => 'isUnsignedInt''copy_post' => false),
            
'active' =>                     array('type' => self::TYPE_BOOL'validate' => 'isBool''copy_post' => false),
            
'deleted' =>                     array('type' => self::TYPE_BOOL'validate' => 'isBool''copy_post' => false),
            
'note' =>                         array('type' => self::TYPE_HTML'validate' => 'isCleanHtml''size' => 65000'copy_post' => false),
            
'is_guest' =>                    array('type' => self::TYPE_BOOL'validate' => 'isBool''copy_post' => false),
            
'id_shop' =>                     array('type' => self::TYPE_INT'validate' => 'isUnsignedId''copy_post' => false),
            
'id_shop_group' =>                 array('type' => self::TYPE_INT'validate' => 'isUnsignedId''copy_post' => false),
            
'id_default_group' =>             array('type' => self::TYPE_INT'copy_post' => false),
            
'id_lang' =>                     array('type' => self::TYPE_INT'validate' => 'isUnsignedId''copy_post' => false),
            
'date_add' =>                     array('type' => self::TYPE_DATE'validate' => 'isDate''copy_post' => false),
            
'date_upd' =>                     array('type' => self::TYPE_DATE'validate' => 'isDate''copy_post' => false),
        ),
    ); 
Y en 'fields' quiero en función de un id, añadirle elementos a la array, pero no sé cómo modificar esa array y tampoco sé cómo añadirle campos a la array sin borrar los demas dats :/

Gracias de antemano
  #2 (permalink)  
Antiguo 13/06/2013, 12:05
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: como modificar una array statica

Estas funciones hacen lo que quieres: http://de3.php.net/manual/es/book.array.php
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 14/06/2013, 16:32
 
Fecha de Ingreso: junio-2010
Mensajes: 353
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: como modificar una array statica

Me sirvio, hice lo siguiente y me funciona que es lo importante xd, pero me gustaría saber cómo hacer lo mismo pero de alguna más correcta o elegante.

Código PHP:
        public static function addiotionalInfoRole() {
        if (
$_POST['rol_usuario'] == 3) {
            
CustomerCore::$definition array_merge(myclass::$definition['fields'], array('fields' => array('more_required_info' => array('type' => self::TYPE_STRING'validate' => 'isName''required' => true'size' => 32))));
        }
        if (
$_POST['rol_usuario'] == 4) {
            
CustomerCore::$definition array_merge(myclass::$definition['fields'], array('fields' => array('info_entitat_donant' => array('type' => self::TYPE_STRING'validate' => 'isName''required' => true'size' => 32))));
        }
        if (
$_POST['rol_usuario'] == 5) {
            
//$rol_extra_info = $_POST['info_entitat_demandant'];
            
CustomerCore::$definition array_merge(myclass::$definition['fields'], array('fields' => array('info_entitat_demandant' => array('type' => self::TYPE_STRING'validate' => 'isName''required' => true'size' => 32))));
        }
    }


    public function 
__construct($id null)
    {
            
// Modificación para llamar a la funcion
                
CustomerCore::addiotionalInfoRole();

Gracias de antemano
  #4 (permalink)  
Antiguo 14/06/2013, 16:58
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: como modificar una array statica

Mmm..Huelo prestashop desde lejos..
Pero...no estarás incluyendo campos en un modelo core de prestashop, según lo que te llega por $_POST, verdad?
  #5 (permalink)  
Antiguo 14/06/2013, 19:14
 
Fecha de Ingreso: junio-2010
Mensajes: 353
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: como modificar una array statica

si pero no me llegan los $_POST :/ ni con tools:getValue, ya lo mirare mañana estoy cansao z.z, sino lo pasare a session y listo
  #6 (permalink)  
Antiguo 15/06/2013, 04:57
 
Fecha de Ingreso: junio-2010
Mensajes: 353
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: como modificar una array statica

si que me llegan con POST, estaba algo confuso ayer. pero bueno estoy mirando de pasar el valor de alguna otra manera , como crear un smarty personalizada para pasarle los valores que añadiré , por no modificar tanto el core, aunq haga override de todos los ficheros que voy modificando no es muy ordenado y es algo bestia XD
  #7 (permalink)  
Antiguo 15/06/2013, 07:16
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: como modificar una array statica

Código PHP:
Ver original
  1. public static function addiotionalInfoRole() {
  2.  
  3.         switch($_POST['rol_usuario']){
  4.         case 3:
  5.         $param = 'more_required_info';
  6. break;
  7.         case 4:
  8.        //igual
  9.        case 5:
  10.       //etc ...
  11. }
  12.             CustomerCore::$definition = array_merge(myclass::$definition['fields'], array('fields' => array($param => array('type' => self::TYPE_STRING, 'validate' => 'isName', 'required' => true, 'size' => 32))));
  13.     }
__________________
Fere libenter homines, id quod volunt, credunt.
  #8 (permalink)  
Antiguo 15/06/2013, 10:58
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: como modificar una array statica

Cita:
Iniciado por marcwolf Ver Mensaje
si que me llegan con POST, estaba algo confuso ayer. pero bueno estoy mirando de pasar el valor de alguna otra manera , como crear un smarty personalizada para pasarle los valores que añadiré , por no modificar tanto el core, aunq haga override de todos los ficheros que voy modificando no es muy ordenado y es algo bestia XD
Has añadido columnas a la tabla Customer para que tenga sentido que modifiques su definición?
Si la respuesta es "no", mejor que dejes de tocar el core, porque no conoces lo suficiente su estructura, y es una mala idea en general.
Si la respuesta es "si", la pregunta entonces es que porqué, en vez de modificar la definición de Customer, no has hecho una tabla independiente, con su modelo independiente, para meter los campos extra, y que tenga como clave primaria el id_customer, y así no tocas ni el modelo ni la tabla core.
En cualquier caso...Lo que estás haciendo no tiene sentido.La definición estática que existe en CustomerCore, son (entre otras cosas) las columnas de la tabla Customer.
Esas columnas no existen "dependiendo de una variable $_POST".En todo caso, le darás un valor, dependiendo del POST.Pero las columnas en sí siempre existen.
  #9 (permalink)  
Antiguo 15/06/2013, 12:16
 
Fecha de Ingreso: junio-2010
Mensajes: 353
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: como modificar una array statica

la respuesta es sí.

"la pregunta entonces es que porqué, en vez de modificar la definición de Customer, no has hecho una tabla independiente, con su modelo independiente, para meter los campos extra, y que tenga como clave primaria el id_customer, y así no tocas ni el modelo ni la tabla core."

Porque no sé y es una opción que me funciona, y buscando por foros me encontre que modificando AuthController y Customer.php puedes añadir campos extra, pero quiero añadir campso extra en función del POST, xq por cada POST en el apartado de "crear cuenta" donde sale dni.. etc añado un campo diferente.

El problema que tengo ahora es que al poner esa funcion para añadir un campo a esa array en función del $_POST, si que me modifica la array pero cuando hace una validación de los campos en ObjectModel-> validateController, el array field sigue siendo el que ya estaba definido, sólo me valida los campos extra si lo escribo directamente en la definición de la array en CustomerCore

Básicamente quiero añadir campos extra en función de un ID enviado por POST, con su validación y inserción en la base de datos.

Para validación es todo esto que estamos tratando y para inserción lo puedo hacer con hook o a la hora de instalar el modulo, prk para todas estas modificaciones usare override para usar las clases que yo he modificado , seguramente existan otras maneras, pero no he sabido encontrarlas :/

Gracias de antemano y por contestar
  #10 (permalink)  
Antiguo 15/06/2013, 14:26
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: como modificar una array statica

Pero entiendes que esos campos se mapean a columnas de la tabla Customer? Y que tienes que modificar la tabla?
Entiendes que una cosa es AÑADIR campos, y otra DAR VALORES a los campos? Que el array de definición son las columnas existentes en la tabla, y que no tiene sentido decir que vas a cambiar qué columnas existen en la tabla, según qué variables POST te lleguen?
Según estas variables, DARÁS UN VALOR a unas columnas u otras, que es distinto que cambiar las columnas que EXISTEN en la tabla.Las columnas tienen que existir SIEMPRE.Según POST, darás valor a unas columnas u otras.

Y , exactamente el mismo trabajo te va a dar el crear tu propia tabla, darle su definición, y mantener los datos que quieres (dni,etc) en otro modelo, porque si no, no vas a tener forma de actualizar, aparte de que si empiezas a hacer este tipo de "parches", vas a acabar...bueno, con una instalación "típica" de prestashop.Un montón de basura.
En cualquier caso, a mí me conviene...Una de las cosas a las que me dedico es a reconstruir instalaciones de prestashop donde se han implementado este tipo de "ideas"..
  #11 (permalink)  
Antiguo 15/06/2013, 15:51
 
Fecha de Ingreso: junio-2010
Mensajes: 353
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: como modificar una array statica

Lo entiendo, se agradece la información pero mí consulta no era sobre esto.

Simplemente quería modificar esa array estática según el valor >;<, demomento he metido una validación en authController y a cascarla con la array estática, cuando tng tiempo ya veré cómo modificarla T_T

Y no modifico ningún archivo de prestashop, sino que los sobrescribo mediante un modulo, de echo estoy haciendo lo que tu dices pero con override XD

Etiquetas: html, modificar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:26.