dropdown + listbox

56 views
Skip to first unread message

Jose Puertas

unread,
Jul 25, 2015, 3:13:19 AM7/25/15
to ZnetDK
Buenos dias Pascal, ¿cómo se podria hacer para que en la base de datos se añada un id seleccionado en un dropdown para todos los registros seleccionador en un listbox?, me explico, el dropdown contendria el id_categoria y en el listbox estarian todos los productos, se seleccionaria la categoria y en el listbox los productos que deben pertenecer a esa categoria, registrando en el id_categoria de cada producto el id_categoria seleccionado en el dropdown. 

Saludos

Pascal Martinez

unread,
Jul 25, 2015, 11:33:10 AM7/25/15
to ZnetDK, joses...@gmail.com
Hola José,

Puedes inspirarte del método ZnetDK \UserManager::addProfilesToUser llamado para añadir los perfiles seleccionados en el listbox.

Por ejemplo, en tu controlador:

static protected function action_save() {
        $request
= new \Request();
        $selectedProducts
= $request->myproducts; // Array of the selected products in the listbox
        $selectedCategory
= $request->category_id; // Product category selected in the dropdown
        $productsDAO
= new \app\model\ProductsDao(); // The custom DAO used to store the product data

       
foreach ($myproducts as $value) {
                $productRow
= array('product_id' => $value, 'category_id' => $selectedCategory);
                $productsDAO->store($productRow);
       
}
        ....
        ....
}


Buenas tardes 

Pascal MARTINEZ.

Jose Puertas

unread,
Jul 30, 2015, 5:15:44 PM7/30/15
to ZnetDK, joses...@gmail.com
Buenas noches pascal, he probado lo que me comentaste y me sale el siguiente error:

"CTL-006: the response returned by the action 'RecJugEquipos' of the controller 'app\controller\asigjugadoresctrl' is not an object of type \Response!"

Controlador

 static protected function action_RecJugEquipos() {
        
        $request = new \Request();
        $selectJugadores = $request->jugadores; // Array of the selected products in the listbox
        $selectEquipo = $request->equipo; // Product category selected in the dropdown
        $jugadoresDAO = new \app\model\asigjugaDAO(); // The custom DAO used to store the product data

        foreach ($myproducts as $value) {
                $jugadoRow = array('id_jugador' => $value, 'id_equipo' => $selectEquipo);
                $jugadoresDAO->store($jugadoRow);
        }
       
}


Modelo

namespace app\model;

class AsigJugaDAO extends \DAO {

    protected function initDaoProperties() {
        $this->table = "jugadores";
        $this->IdColumnName = "id_jugador";
        $this->query = "select jugadores.*, equipos.nombre_equipo from jugadores ";
        $this->query .= "left join equipos using (id_equipo) ";
       /* $this->query .= "left join entrenadores using (id_entrenador) ";*/
        $this->filterClause = "where jugadores.id_jugador = ?";
    }

}

a ver si me puedes ayudar.

Saludos

Pascal Martinez

unread,
Jul 30, 2015, 5:52:02 PM7/30/15
to ZnetDK, joses...@gmail.com
Hola José,

Tu controlador tiene que devolver un objeto \Response.

static protected function action_RecJugEquipos() {
       
        $request
= new \Request();
        $selectJugadores
= $request->jugadores; // Array of the selected products in the listbox
        $selectEquipo
= $request->equipo; // Product category selected in the dropdown
        $jugadoresDAO
= new \app\model\asigjugaDAO(); // The custom DAO used to store the product data


       
foreach ($myproducts as $value) {
                $jugadoRow
= array('id_jugador' => $value, 'id_equipo' => $selectEquipo);
                $jugadoresDAO
->store($jugadoRow);
       
}

       
    
        // JSON Response
        $response = new \Response();
        $response->setSuccessMessage("My response", "Action is OK");
              return $response;
}

Di me si es OK ahora.

Buenas noches,

Pascal MARTINEZ

Jose Puertas

unread,
Jul 31, 2015, 9:09:26 AM7/31/15
to ZnetDK, joses...@gmail.com
Hola Pascal, he modificado el controlador, (vaya fallo el mio), pero continua sin funcionarme, aunque el mensaje me muestra que ha sido correcto, pero en la base de datos no se han grabado los datos.

controlador modificado:

 static protected function action_RecJugEquipos() {
        
        $request = new \Request();
        $selectJugadores = $request->jugadores; // Array of the selected products in the listbox
        $selectEquipo = $request->equipo; // Product category selected in the dropdown
        $jugadoresDAO = new \app\model\asigjugaDAO(); // The custom DAO used to store the product data

        foreach ($jugadores as $value) {
                $jugadoRow = array('id_jugador' => $value, 'id_equipo' => $selectEquipo);
                $jugadoresDAO->store($jugadoRow);
        }
        
        // JSON Response
        $response = new \Response();
        $response->setSuccessMessage("Asingación", "Asignacion correcta");
              return $response;
}


Saludos

Pascal Martinez

unread,
Jul 31, 2015, 4:08:45 PM7/31/15
to ZnetDK, joses...@gmail.com
Buenas noches José,

Abajo, tu código fuente con una corrección en amarillo (tu variable $jugadores no existe, creo que quieres decir $selectJugadores).

 static protected function action_RecJugEquipos() {

       
        $request
= new \Request();
        $selectJugadores
= $request->jugadores; // Array of the selected products in the listbox
        $selectEquipo
= $request->equipo; // Product category selected in the dropdown
        $jugadoresDAO
= new \app\model\asigjugaDAO(); // The custom DAO used to store the product data


       
foreach (
$selectJugadores 
as $value) {
                $jugadoRow = array('id_jugador' => $value, 'id_equipo' => $selectEquipo);
                $jugadoresDAO
->store($jugadoRow);
       
}
       
       
// JSON Response
        $response
= new \Response();
        $response
->setSuccessMessage("Asingación", "Asignacion correcta");
             
return $response;
}

Tendría que funcionar ahora.

Pascal

Jose Puertas

unread,
Jul 31, 2015, 4:34:33 PM7/31/15
to ZnetDK, joses...@gmail.com
Perfecto Pascal, ahora funciona bien, lo único que si incluyo un nuevo equipo no me aparece en el dropdown hasta que saldo de la aplicación y vuelvo a entrar.

Saludos

Pascal Martinez

unread,
Jul 31, 2015, 5:12:29 PM7/31/15
to ZnetDK, joses...@gmail.com
José,

Tienes que refrescar el contenido de tu dropdown llamando su método 'refresh'.

Puedes añadir por tu vista en la que se encuentra tu 'dropdown', una llamada al método 'refresh', antes de la apertura del formulario.
Puedes inspirarte de la vista de gestión de los usuarios ZnetDK. Encontraras en el script 'engine/core/view/users-ui-events.php' una llamada al metodo 'refresh' por el listbox de los perfiles:
 
<script>
    $
(document).ready(function () {


       
/********* When the form is reset **********/
        $
('#znetdk_user_actions').zdkactionbar({
            whenadd
: function() {
               
// Refresh profiles in the listbox
                $
('#znetdk_user_dialog .zdk-listbox').zdklistbox('refresh');
               
// ....
           
},
            whenedit
: function() {
               
// Refresh profiles in the listbox keeping current selection
                $
('#znetdk_user_dialog .zdk-listbox').zdklistbox('refresh',true);
           
}
       
});


   
});
</script>


Buenas noches.

Pascal

Jose Puertas

unread,
Aug 1, 2015, 1:03:12 PM8/1/15
to ZnetDK
Buenas tardes, le he aplicado el siguiente código en el documento:

<script>
    $(document).ready(function () {

        /********* When the form is reset **********/
        $('#zdk_user_asigna').zdkactionbar({
            whenadd: function () {
                // Refresh equipos in the dropdown
                $('#dlg_asigna .zdk-dropdown').zdkdropdown('change');
                // Refresh jugadores in the listbox
                $('#dlg_asigna .zdk-listbox').zdklistbox('refresh');

            }
        }
    });


</script>

y no funciona, he estado mirando que el dropdown no acepta el método refresh, sin embargo acepta change, pero sigue sin funcionar, supongo que será porque lo implementas en la próxima versión.

Saludos

Pascal Martinez

unread,
Aug 3, 2015, 2:49:34 AM8/3/15
to ZnetDK
Hola José,

El metodo 'refresh' existe por el widget zdkdropdown (ver la demo ZnetDK 'Datos remotos') desde la version 0.98.

Saludos,

Pascal Martinez

Jose Puertas

unread,
Aug 3, 2015, 5:24:12 AM8/3/15
to ZnetDK
Muchas gracias, me habia liado con el método que utilizas con los usuarios.

Saludos

Pascal Martinez

unread,
Aug 4, 2015, 5:35:58 PM8/4/15
to ZnetDK
Perfecto 😉
Reply all
Reply to author
Forward
0 new messages