Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Joomla »

[SOLUCIONADO] Campo personalizado lista desplegable

Estas en el tema de Campo personalizado lista desplegable en el foro de Joomla en Foros del Web. Hola a todos: Trabajo con la 2.5.7. En este enlace, por cierto bien desarrollado http://www.estilocss.com/14-tutorial...en-joomla.html , hay un desarrollo de campo personalizado. Ahora, como hacerlo ...
  #1 (permalink)  
Antiguo 17/04/2013, 01:07
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 16 años, 4 meses
Puntos: 2
Campo personalizado lista desplegable

Hola a todos:

Trabajo con la 2.5.7.

En este enlace, por cierto bien desarrollado http://www.estilocss.com/14-tutorial...en-joomla.html, hay un desarrollo de campo personalizado.

Ahora, como hacerlo para que es vez de que muestre el campo de la base de datos sea una lista desplegable con los datos seleccionados de una base de datos.

Y cuando muestras todos los datos del registro, en el campo personalizado se posicione en el valor del campo. por ejemplo si un articulo tiene la categoria de "LABORAL", se muestra laboral, pero la lista desplegable esta compuestra por en orden: FISCAL, LABORAL, MERCANTIL. La lista desplegable se situa en el segundo dato.

En el fichero view/tmpl/edit tengo esto:
Código PHP:
<li><?php echo $this->form->getLabel('genero'); ?>
    <?php echo $this->form->getInput('genero'); ?></li>
En el fichero models/form/subgenero.xml esto:
Código PHP:
        <field name="genero" type="genero" class="inputbox" 
            
label="Genero"    description="Este Sub-genero pertenece a">
        </
field
Tengo un fichero en libraries/joomla/html/html/genero.php con este codigo
Código PHP:
defined('JPATH_PLATFORM') or die;
abstract class 
JHtmlGenero  {
protected static 
$items = array();
public static function 
listado()    {
    
$db     JFactory::getDbo();
    
$query  $db->getQuery(true);
    
$query->select('a.id, a.title');
    
$query->from('#__documentos_generos AS a');
    
$db->setQuery($query);
    
$genero $db->loadObjectList();
  
$items JHtml::_('select.genericlist'$generonull'idgenero''id''title');
  return 
$items

, me nuestra una lista desplegable, pero sin datos.

Un Saludo.
  #2 (permalink)  
Antiguo 26/04/2013, 11:20
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Campo personalizado lista desplegable

He cambiado el codigo anterior por este. Con este codigo salen todos los registros de la base de datos, pero no se situa en el campo correcto. Lo hace en el primero.

Código PHP:
<?php
/** libraries/html/html/genero.php  */
defined('JPATH_PLATFORM') or die;

abstract class 
JHtmlGenero  {

public static function 
listado($name$selected$attribs ''$params true$id)    {
    
$db JFactory::getDbo();
    
$query $db->getQuery(true);
    
$query->select('a.id AS value, a.title AS text');
    
$query->from('#__documentos_generos AS a');
    
$query->group('a.id, a.title, a.ordering');
    
$query->order('a.ordering ASC');
    
$query->order($query->qn('title') . ' ASC');
    
$db->setQuery($query);
    
$options $db->loadObjectList();

  
print_r($options);
  
var_dump(get_defined_vars()); die;
        
    if (
$db->getErrorNum())    {
        
JError::raiseWarning(500$db->getErrorMsg());
        return 
null;
    }
    if (
is_array($params))        {
        
$options array_merge($params$options);
    }    elseif (
$params)    {       // If all levels is allowed, push it into the array.
        
array_unshift($optionsJHtml::_('select.option'''JText::_('JOPTION_ACCESS_SHOW_ALL_LEVELS')));
    }
    return 
JHtml::_('select.genericlist',    $options,    $name,    array('list.attr' => $attribs,    'list.select' => $selected,    'id' => $id));    
}
}
el print_r me sale todos los campos.
el volcado de las variables con Var_dump me sale las variables pero el compo selected es igual ' ' y es aqui donde tenia que salir el campo que hay que seleccionar.

Si alguien sabe como poser en $selected el valor correcto podria comentar.

Un saludo.

PD. El codigo esta sacado del accesslevel.
  #3 (permalink)  
Antiguo 29/04/2013, 02:18
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Campo personalizado lista desplegable

Siguiendo con el tema.

Hay que definir una clase de campo en libraries/joomla/form/fields/genero.php como un input.

Código PHP:
<?php
defined
('JPATH_PLATFORM') or die;

JFormHelper::loadFieldClass('list');

class 
JFormFieldGenero extends JFormFieldList {
  
public 
$type 'Genero';    /** The form field type.*/

protected function getInput()    {
    
$attr '';
    
$attr .= $this->element['class'] ? ' class="' . (string) $this->element['class'] . '"' '';
    
$attr .= ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' '';
    
$attr .= $this->element['size'] ? ' size="' . (int) $this->element['size'] . '"' '';
    
$attr .= $this->multiple ' multiple="multiple"' '';
    
$attr .= $this->element['onchange'] ? ' onchange="' . (string) $this->element['onchange'] . '"' '';
    
$options $this->getOptions();
  
print_r($this->value);
  
print_r($options);  
  die;  
    return 
JHtml::_('genero.listado'$this->name$this->valuenull$options$this->id);
}
}
Este valor "$this->value" me sale en blancos (ninguno), en cambio si lo haces en libraries/joomla/form/filelds/accesslevel.php el valor de $this->value es el valor del nivel de acceso de la tabla viewlevels, que son 1 para publico, 2 = Registrado y 3 especial, y los puedas que puedas haber creado tu.

Si alguien sabe como hacer que la variable $this->value recoga el valor del campo del registro que es el id de otra tabla ("la tabla es la que se comenta anteriormente") para que este sea el selected en la etiqueta html. Esto hace que se muestre el valor del campo de la segunda tabla en la lista desplegable con el valor de su registro.

Un saludo
  #4 (permalink)  
Antiguo 29/04/2013, 06:27
Avatar de ManelGomez  
Fecha de Ingreso: diciembre-2007
Ubicación: El Prat de llobregat
Mensajes: 180
Antigüedad: 16 años, 4 meses
Puntos: 2
Respuesta: Campo personalizado lista desplegable

Listo:

El error, paa quien le sirva esta que el nombre de campo en models/form/subgenero.xml
Código PHP:
<field name="genero" type="genero" class="inputbox"  
            
label="Genero"    description="Este Sub-genero pertenece a"
        </
field
el name tiene que ser igual al nombre del campo en la base de datos.

Solucionado.

Etiquetas: campo, desplegable, lista, personalizado, php
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 02:33.