2010-09-28 4 views
0

J'ai un tel tableau pour rendre TableGear:Utiliser Zend_Config INI ou XML avec les données dynamiques

array(
      "database" => array(
       'username' => $this->config->resources->db->params->username, 
       'password' => $this->config->resources->db->params->password, 
       'name' => $this->config->resources->db->params->dbname, 
       'table' => "projetos", 
       'fields' => array(
        'pro_cliente', 
        'pro_area', 
        'pro_evento', 
        'estado', 
        'cidade', 
        'pro_mes', 
        'pro_montagem_inicio', 
        'pro_montagem_fim', 
        'pro_evento_inicio', 
        'pro_evento_fim', 
        'pro_desmontagem_inicio', 
        'pro_desmontagem_fim', 
        'pro_atendimento', 
        'pro_projeto', 
        'pro_situacao' 
       ) 
       //"noAutoQuery" => true 
      ), 
      "selects" => array(
       'pro_situacao' => array('Aberto', 'Em Andamento', 'Fechado', 'Cancelado'), 
       'estado' => $this->estados->getEstados() 
      ), 
      "formatting" => array(
       'pro_valor' => 'currency[prefix=R$ ,pad]', 
       'pro_montagem_inicio' => 'date[d/m]', 
       'pro_montagem_fim' => 'date[d/m]', 
       'pro_evento_inicio' => 'date[d/m]', 
       'pro_evento_fim' => 'date[d/m]', 
       'pro_desmontagem_inicio' => 'date[d/m]', 
       'pro_desmontagem_fim' => 'date[d/m]' 
      ), 
      'headers' => array(
       'pro_id' => 'ID', 
       'pro_cliente' => 'Cliente', 
       'pro_area' => 'Area', 
       'pro_evento' => 'Evento', 
       'estado' => 'UF', 
       'cidade' => 'Cidade', 
       'pro_mes' => 'Mes', 
       'pro_montagem_inicio' => 'Inicio Montagem', 
       'pro_montagem_fim' => 'Fim Montagem', 
       'pro_evento_inicio' => 'Inicio Evento', 
       'pro_evento_fim' => 'Fim Evento', 
       'pro_desmontagem_inicio' => 'Inicio Desmontagem', 
       'pro_desmontagem_fim' => 'Fim Desmontagem', 
       'pro_atendimento' => 'Atendimento', 
       'pro_projeto' => 'Projeto', 
       'pro_situacao' => 'Situacao', 
       'pro_valor' => 'Valor', 
       'DELETE' => 'Deletar' 
      ), 
      'columns' => array(
       'pro_montagem_inicio' => 'date-picker', 
       'pro_montagem_fim' => 'date-picker', 
       'pro_evento_inicio' => 'date-picker', 
       'pro_evento_fim' => 'date-picker', 
       'pro_desmontagem_inicio' => 'date-picker', 
       'pro_desmontagem_fim' => 'date-picker' 
      ), 
      'allowDelete' => false, 
      'editable' => 'none' 
     ); // End of Tablegear 

Comme vous pouvez le voir. J'utilise les données dynamiques $this->config->resources->db->params->username et $this->estados->getEstados() (données de ma base de données) que je peux seulement obtenir à l'intérieur du contrôleur dans une donnée de forme de tableau. J'ai trouvé ces options trop grandes et inutiles pour être dans le contrôleur. Je voudrais utiliser Zend_Config avec un fichier INI ou XML. Mais comment puis-je récupérer ces données que j'utilise (c'est-à-dire $this->estados->getEstados())?

+1

moi confiance que vous ne voulez pas le faire. Laisse ça comme ça sera beaucoup plus rapide. –

Répondre

0

j'ai réussi à créer le modèle Tablegear pour gérer ce problème

<?php 

class Application_Model_Tablegear 
{ 
protected $_name = null; 
protected $_username = null; 
protected $_password = null; 
protected $_estados = null; 
protected $_allowDelete = false; 
protected $_editable = 'all'; 

public function allowDelete() { 
    $this->_allowDelete = true; 
    return $this; 
} 

public function setEditable($fields) { 
    $this->_editable = $fields; 
    return $this; 
} 

public function setEstados($estados) { 
    $this->_estados = $estados; 
    return $this; 
} 

public function setDatabase($params) { 
    $this->_username = $params->username; 
    $this->_password = $params->password; 
    $this->_name = $params->dbname; 
    return $this; 
} 

public function getOptions() { 
    return array(
      "database" => array(
       'username' => $this->_username, 
       'password' => $this->_password, 
       'name' => $this->_name, 
       'table' => "projetos", 
       'fields' => array(
        'pro_cliente', 
        'pro_area', 
        'pro_evento', 
        'estado', 
        'cidade', 
        'pro_mes', 
        'pro_montagem_inicio', 
        'pro_montagem_fim', 
        'pro_evento_inicio', 
        'pro_evento_fim', 
        'pro_desmontagem_inicio', 
        'pro_desmontagem_fim', 
        'pro_atendimento', 
        'pro_projeto', 
        'pro_situacao' 
       ) 
       //"noAutoQuery" => true 
      ), 
       "selects" => array(
        'pro_situacao' => array('Aberto', 'Em Andamento', 'Fechado', 'Cancelado'), 
        'estado' => $this->_estados 
       ), 
       "formatting" => array(
        'pro_valor' => 'currency[prefix=R$ ,pad]', 
        'pro_montagem_inicio' => 'date[d/m]', 
        'pro_montagem_fim' => 'date[d/m]', 
        'pro_evento_inicio' => 'date[d/m]', 
        'pro_evento_fim' => 'date[d/m]', 
        'pro_desmontagem_inicio' => 'date[d/m]', 
        'pro_desmontagem_fim' => 'date[d/m]' 
       ), 
       'headers' => array(
        'pro_id' => 'ID', 
        'pro_cliente' => 'Cliente', 
        'pro_area' => 'Area', 
        'pro_evento' => 'Evento', 
        'estado' => 'UF', 
        'cidade' => 'Cidade', 
        'pro_mes' => 'Mes', 
        'pro_montagem_inicio' => 'Inicio Montagem', 
        'pro_montagem_fim' => 'Fim Montagem', 
        'pro_evento_inicio' => 'Inicio Evento', 
        'pro_evento_fim' => 'Fim Evento', 
        'pro_desmontagem_inicio' => 'Inicio Desmontagem', 
        'pro_desmontagem_fim' => 'Fim Desmontagem', 
        'pro_atendimento' => 'Atendimento', 
        'pro_projeto' => 'Projeto', 
        'pro_situacao' => 'Situacao', 
        'pro_valor' => 'Valor', 
        'DELETE' => 'Deletar' 
       ), 
       'columns' => array(
        'pro_montagem_inicio' => 'date-picker', 
        'pro_montagem_fim' => 'date-picker', 
        'pro_evento_inicio' => 'date-picker', 
        'pro_evento_fim' => 'date-picker', 
        'pro_desmontagem_inicio' => 'date-picker', 
        'pro_desmontagem_fim' => 'date-picker' 
       ), 
       'allowDelete' => $this->_allowDelete, 
       'editable' => $this->_editable 
      ); 
    } 
} 

Je mis les méthodes dans mon contrôleur

$this->tgOptions = new Application_Model_Tablegear(); 
$this->tgOptions->setDatabase($this->config->resources->db->params) 
      ->setEstados($this->estados->getEstados()); 
0

Eh bien, vous pouvez simplement fusionner les choses ... par exemple vous permet de dire la majeure partie de votre configuration, vous pouvez dans les configuration du module ou de l'application faire une méthode appelée configureTableGearRendering:

protected function configureTableGearRendering(array $selects, $database = array(), $formatting = array(), $headers = array(), $allowDelete = null, $editable = null) 
{ 
    $config = $this->config->tableGear; 
    $config['selects'] = array_merge($config, $selects); 
    $config['database'] = array_merge($config, $database); 
    $config['fromatting'] = array_merge($config, $formatting); 

    if(null !== $allowDelete) 
    { 
    $config['allowDelete'] = $allowDelete; 
    } 

    if(null !== $editable) 
    { 
    $config['editable'] = $editable; 
    } 

    return $config; 
} 

Bien sûr, si vous ne devez option toutes ces choses oyu peut ajuster comme vous le souhaitez. Mais cela vous permet de passer dans un tableau pour ajouter ou remplacer des options pour toutes vos clés de niveau supérieur. Vous pouvez également écrire une fonction de fusion récursive pour vous permettre de fournir des options à une clé à n'importe quel niveau, même si les structures doivent être identiques. Ou, si vous avez seulement besoin de remplacer la clé selects, vous ne pouvez faire que celle-là.

Une autre chose que vous pouvez faire est de définir simplement certaine chose péché la configuration comme callbacks et supposons que la clé dans la configuration est le nom de la variable connecté au contrôleur et que la valeur de rappel est le nom de la méthode par exemple:

<selects> 
    <estados> 
    <callback>getEstados</callback> 
    </estados> 
</select> 

Ensuite, dans votre contrôleur, vous pouvez rechercher les clés de rappel dans la matrice et appliquer le rappel avec call_user_func ou call_user_func_array ... ou avec des méthodes dynamiques directes.

Cependant: POURQUOI NE CRÉEZ PAS DES CLASSES DE TABLE !?

+0

En fait, je suis mais j'ai découvert ce TableGear qui récupère de la base de données automatiquement. –

Questions connexes