Files
dmtools/templates/npc/index.html.twig
T
FrankandClaude Sonnet 5 1ccab6ed68 Add NPC database table with server-side DataTable and per-NPC game notes
- Npc entity (village spreadsheet columns) + game_notes text field for
  the DM's live play notes, plus updated_at touched on every change
- Race / VillageStatus / BloodCartInvolvement / MysteryImportance as
  string-backed PHP enums, rendered as dropdowns on the edit form
- /npcs: server-side DataTables (paging, global search and column sort
  all run in the backend via NpcRepository::findForDataTable); name cell
  links to the edit page, game notes shown truncated
- /npcs/{id}: Bootstrap-themed edit form (all fields + a large game
  notes textarea); Symfony forms now use the bootstrap_5 theme
- app.js: generic server-side DataTable wiring driven by data-* on the
  <table>/<th> (data-datatable-src, data-row-url, data-format)
- app:npc:import console command - upserts from data/npcs.csv by
  (family, name), never overwrites game_notes; --purge / --dry-run
- data/npcs.csv: 180 villagers exported from the working spreadsheet

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-06 15:04:39 +02:00

35 lines
1.4 KiB
Twig

{% extends 'base.html.twig' %}
{% block title %}NPC's · dmtools{% endblock %}
{% block body %}
<div class="d-flex justify-content-between align-items-center mb-3">
<h1 class="h3 mb-0">NPC's</h1>
</div>
<div class="card shadow-sm">
<div class="card-body">
<table class="table table-striped table-hover align-middle datatable w-100"
data-datatable-src="{{ path('app_npcs_data') }}"
data-row-url="{{ path('app_npcs') }}/__ID__"
data-datatable-options='{"order": [[0, "asc"]]}'>
<thead>
<tr>
<th data-data="name" data-format="link">Name</th>
<th data-data="family">Family</th>
<th data-data="age">Age</th>
<th data-data="race">Race</th>
<th data-data="occupation">Occupation</th>
<th data-data="villageStatus">Village status</th>
<th data-data="bloodCartInvolvement">Blood cart</th>
<th data-data="mysteryImportance">Mystery</th>
<th data-data="gameNotes" data-format="truncate" data-orderable="false">Game notes</th>
<th data-data="updatedAt">Updated</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
{% endblock %}