Ir al contenido
Nibiru docsv0.9.2

Inicio Rápido

Construye una página mínima de Productos en cinco minutos — controlador, vista, entrada de navegación.

Stable Reading time ~ 2 min Edit on GitHub

Al final de esta página tendrás una página /products funcional renderizada por Smarty, alimentada por un controlador y listada en el menú lateral.

Ventana de terminal
./nibiru -c products

Esto crea dos archivos:

application/controller/productsController.php
application/view/templates/products.tpl

Abre productsController.php y reemplaza el cuerpo con:

<?php
namespace Nibiru;
use Nibiru\Adapter\Controller;
class productsController extends Controller
{
public function pageAction()
{
View::assign([
'title' => 'Products — Nibiru',
'products' => [
['id' => 1, 'name' => 'Marduk Gold Plating', 'price' => 99.0],
['id' => 2, 'name' => 'Tiamat Hull Sealant', 'price' => 49.0],
['id' => 3, 'name' => 'Anu Stardust Polish', 'price' => 19.5],
],
'css' => Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS]['smarty.css'],
'js' => Config::getInstance()->getConfig()[View::NIBIRU_SETTINGS]['smarty.js'],
]);
}
public function navigationAction()
{
JsonNavigation::getInstance()->loadJsonNavigationArray();
}
}

Dos métodos son convencionales y siempre llamados por el despachador:

  • navigationAction() — llena el menú de navegación global.
  • pageAction() — renderiza la página en sí misma.

Cualquier cosa que coincida con ?_action=foo llamará además al método fooAction() entre ellos.

Abre application/view/templates/products.tpl:

{include 'shared/header.tpl'}
<body>
{include file="navigation.tpl"}
<main class="container">
<h1>{$title}</h1>
<table class="table">
<thead>
<tr><th>#</th><th>Name</th><th>Price</th></tr>
</thead>
<tbody>
{foreach $products as $p}
<tr>
<td>{$p.id}</td>
<td><a href="/products/detail/{$p.id}">{$p.name|escape}</a></td>
<td>{$p.price|string_format:"%.2f"} €</td>
</tr>
{/foreach}
</tbody>
</table>
</main>
{include 'shared/footer.tpl'}
</body>

Las variables pasadas a View::assign() aparecen como {$variable} en Smarty.

Edite application/settings/config/navigation/main.json y agregue:

{
"label": "Products",
"href": "/products",
"icon": "shopping-bag"
}

La navegación se carga mediante JsonNavigation y se renderiza mediante navigation.tpl.

Si tienes el servidor integrado de PHP a mano:

Ventana de terminal
APPLICATION_ENV=development php -S localhost:8080 -t .

Visite http://localhost:8080/products/. Debería ver sus tres productos con el tema cósmico de su CSS.

En el mismo controlador:

public function detailAction()
{
$id = (int) ($_REQUEST['id'] ?? 0);
View::assign([
'title' => "Product #$id",
'id' => $id,
]);
}

El Router ya entiende /products/detail/42 y /products/marduk-gold-plating/42 (forma de URL SEO — el id y el slug se llenan automáticamente en $_REQUEST).

Cree application/view/templates/products/detail.tpl con cualquier marcado que desee, y tendrá una aplicación de dos páginas.