Aller au contenu
Nibiru docsv0.9.2

Démarrage rapide

Construisez une page Produits minimale en cinq minutes — contrôleur, vue, entrée de navigation.

Stable Reading time ~ 2 min Edit on GitHub

À la fin de cette page, vous aurez une page /produits fonctionnelle rendue par Smarty, alimentée par un contrôleur et listée dans le panneau latéral.

Fenêtre de terminal
./nibiru -c products

Cela crée deux fichiers :

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

Ouvrez productsController.php et remplacez le corps par :

<?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();
}
}

Deux méthodes sont conventionnelles et appelées toujours par le dispatcheur:

  • navigationAction() — remplit le menu de navigation global.
  • pageAction() — rend la page elle-même.

Tout ce qui correspond à ?_action=foo appellera en outre une méthode fooAction() entre eux.

Ouvrez 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>

Les variables transmises à View::assign() apparaissent sous la forme {$variable} dans Smarty.

Modifiez application/settings/config/navigation/main.json et ajoutez :

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

La navigation est chargée par JsonNavigation et rendue par navigation.tpl.

Si vous avez le serveur intégré de PHP à portée de main :

Fenêtre de terminal
APPLICATION_ENV=development php -S localhost:8080 -t .

Visitez http://localhost:8080/products/. Vous devriez voir vos trois produits avec le thème cosmique de votre CSS.

Dans le même contrôleur :

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

Le Router comprend déjà /produits/détail/42 et /produits/marduk-gold-plating/42 (forme d’URL SEO — id et slug sont automatiquement remplis dans $_REQUEST).

Créez application/view/templates/products/detail.tpl avec n’importe quel balisage que vous souhaitez, et vous avez une application à deux pages.