mercury and web

Responder
ramirezosvaldo
Mensajes: 127
Registered for: 3 years 4 months
Mexico

mercury and web

Mensaje por ramirezosvaldo »

Buenas noches

Me gustaría saber si alguien tiene un ejemplo de integración den una vista usando tweb ?, claro usando mercury

Ejemplo, desde el menu lanzo route( "clientes"); este route esta definido como GET,POST como un CONTROLLER,
En el controller, mando llamar un modelo, un query de los últimos 100 Clientes ( Usando mysql con WDO ), luego al recibir, quiero enviarlos
a la vista con un GRID.

Ya llegue hasta hacer el query, ahora quiero diseñar un Form, y en el BROWSE usando tweb y dejarlo listo en la vista que reciba los parámetros
recibidos desde el controller.

Ya una vez desde ahi, iniciare a poner botones para agregar registros ( Abrir una ventana modal ), borrar ,exportar etc.

No se si me pude explicarme ?

Saludos
Osvaldo Ramirez

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 5 months

Mensaje por charly »

Hola Osvaldo,

Muy fácil :D

Partimos de la base que estas en el controller. En el controller puedes tener un código que conecta con un un modelo de datos y recoje datos. Una vez tengo los datos llamo a la view y le paso esos datos. Podria ser algo asi:

Código: Seleccionar todo

//----------------------------------------------------------------------------//

METHOD Browse( oController ) CLASS MyController 

	local oModelCustomer	:= CustomerModel():New()
	local aRows 		:= oModelCustomer:GetState( 'NY', 80 )	
	
	oController:View( 'MyBrowse.view', aRows )

RETU nil
Fijate como invocamos las vista y le pasamos 1 parámetro, en este caso aRows, que seran el contenido de los registros devueltos por el modelo de datos

Luego tengo de crear una vista en este caso que se llama src/view/mybrowse.view y podriamos poner un code parecido a este

Código: Seleccionar todo

<h3>Test View with browse - NY and age > 80</h3><hr>

<?prg 
    #include {{ TWebInclude() }}
	
    local aRows := pvalue(1)
	
    DEFINE WEB oWeb TITLE 'MyBrowse' TABLES INIT

    DEFINE FORM o			

	INIT FORM o  

		ROWGROUP o
			DEFINE BROWSE oBrw ID 'ringo' SEARCH HEIGHT 400 OF o

				ADD oCol TO oBrw ID 'first' 	HEADER 'First' 
				ADD oCol TO oBrw ID 'last'	HEADER 'Last'  					
				ADD oCol TO oBrw ID 'street'	HEADER 'Street'  					
				ADD oCol TO oBrw ID 'state'	HEADER 'St'  					
				ADD oCol TO oBrw ID 'age'	HEADER 'Age'

			INIT BROWSE oBrw DATA aRows	 
		END o				
					
    END FORM o RETURN	
?>
Por defecto las views ya se interpretan como codigo html. fijate la 1 linea q es un trozo html puro y duro.
Luego si quieres poner code harbour debe estar entr <?prg y ?>
Dentro del code harbour:
- Insertamos el fichero de cabecera si usamos TWeb -> #include {{ TWebInclude() }}
- Recuperamos parametro enviado desde controller -> local aRows := pvalue(1)
- Finalmente creamos un simple browse sacado de los ejemplos de TWeb
- Finate en la clausula final que hay un return -> END FORM o RETURN , esto es porque dentro <?prg ... ?> siempre ha de acabar devolviendo una cadena. Este comando lo provoca
Salutacions, saludos, regards.
Charly

"...programar es fácil, hacer programas es difícil..."

https://httpd2.blogspot.com/
https://forum.modharbour.app

ramirezosvaldo
Mensajes: 127
Registered for: 3 years 4 months
Mexico

Mensaje por ramirezosvaldo »

Mi estimado Charly

Como siempre, muchas gracias, y si, si funciono!!!!

Desde ahi parto.

Mi idea es que de entrada muetre unos pocos registros y que el usuario busque lo que quiera.
Ya dependera del cliente.

Voy a ver el código fuente del browse para ver que mas botones hay y ver si puedo agregar mas.

Saludos
Osvaldo Ramirez

ramirezosvaldo
Mensajes: 127
Registered for: 3 years 4 months
Mexico

Mensaje por ramirezosvaldo »

Mi estimado Charly, de nueva cuenta:

Hablando del browse:

Hay alguna forma de poner botones propios, como boton agregar, borrar, etc, pero al mismo nivel o altura

de los botones de tools, print, export ?

Gracias de antemano.

Saludos
Osvaldo Ramirez

Avatar de Usuario
charly
Mensajes: 145
Registered for: 3 years 5 months

Mensaje por charly »

Osvaldo,

TWeb usa bootstrap-table porque es un sencillo y potente pluggin --> https://bootstrap-table.com/

Se habria de investigar en sus numerosos ejemplos si existe la opcion de integrar botones en su propia barra...
Salutacions, saludos, regards.
Charly

"...programar es fácil, hacer programas es difícil..."

https://httpd2.blogspot.com/
https://forum.modharbour.app

mag071
Mensajes: 24
Registered for: 3 years 4 months
Venezuela

Mensaje por mag071 »

Saludos ;
Ejemplo de añadir botones en su propia barra

Código: Seleccionar todo

<link href="https://unpkg.com/bootstrap-table@1.18.0/dist/bootstrap-table.min.css" rel="stylesheet">

<script src="https://unpkg.com/bootstrap-table@1.18.0/dist/bootstrap-table.min.js"></script>

<table
  id="table"
  data-toggle="table"
  data-height="460"
  data-show-columns="true"
  data-show-refresh="true"
  data-show-columns-toggle-all="true"
  data-show-pagination-switch="true"
  data-show-toggle="true"
  data-show-fullscreen="true"
  data-buttons="buttons"
  data-url="json/data1.json">
  <thead>
    <tr>
      <th data-field="id">ID</th>
      <th data-field="name">Item Name</th>
      <th data-field="price">Item Price</th>
    </tr>
  </thead>
</table>

<script>
  function buttons () {
    return {
      btnUsersAdd: {
        text: 'Highlight Users',
        icon: 'fa-users',
        event: function () {
          alert('Do some stuff to e.g. search all users which has logged in the last week')
        },
        attributes: {
          title: 'Search all users which has logged in the last week'
        }
      },
      btnAdd: {
        text: 'Add new row',
        icon: 'fa-plus',
        event: function () {
          alert('Do some stuff to e.g. add a new row')
        },
        attributes: {
          title: 'Add a new row to the table'
        }
      }
    }
  }
</script>

Responder