- the freshly attached card images did not show: text_only is the explicit no-image variant, so vitec:attach-card-images now flips a card to "vertical" whenever it carries (or receives) an image; and the new placeholder PNGs sat in the sshfs 770 trap - fix-asset-perms covers them, with public/product-audit added to its targets - new generic vitec:wrap-cards-grid --page=<slug>: wraps a page's cards into vitec_cols_33_33_33 containers (b13 columns 221/222/223), three per container, section-aware - every top-level intro paragraph starts a section, other element types close it, so the category headings on /products keep their grids beneath them. Existing grid containers are pooled and reused, surplus ones hidden - the first apply aborted mid-move and left a half state (15 empty shells, three cards moved; diagnosis migrations/check_grid_447.php, kept) - v2 repairs such states by design: global container pool, hard asserts after the create pass, try/catch around the move pass, and a final "no card left top-level" verification - applied on /products and verified live: 38 cards in 15 grids (sections 5/7/3/6/2/4/2/6/3 -> 2/3/1/2/1/2/1/2/1 containers), order intro -> grids -> banner -> faq intact, children delivered in the known items/contentElements shape Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
42 lines
1.6 KiB
PHP
42 lines
1.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/**
|
|
* Diagnose: state of the /products grid wrap (vitec:wrap-cards-grid run,
|
|
* 2026-10-27). Cards and containers on pid 447 with colPos /
|
|
* tx_container_parent / sorting / hidden / deleted.
|
|
*
|
|
* READ-ONLY. Usage: php migrations/check_grid_447.php
|
|
*/
|
|
|
|
error_reporting(E_ALL);
|
|
ini_set('display_errors', '1');
|
|
|
|
$root = null;
|
|
$dir = __DIR__;
|
|
for ($i = 0; $i < 5; $i++) {
|
|
if (is_file($dir . '/config/system/settings.php')) { $root = $dir; break; }
|
|
$dir = dirname($dir);
|
|
}
|
|
if ($root === null) { exit("no project root\n"); }
|
|
$settings = require $root . '/config/system/settings.php';
|
|
$db = $settings['DB']['Connections']['Default'];
|
|
$pdo = new PDO(
|
|
sprintf('mysql:host=%s;port=%s;dbname=%s;charset=utf8mb4', $db['host'] ?? 'localhost', $db['port'] ?? 3306, $db['dbname'] ?? ''),
|
|
$db['user'] ?? '', $db['password'] ?? '',
|
|
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
|
|
);
|
|
|
|
echo "=== all vitec_card / vitec_cols_33_33_33 / vitec_introparagraph on pid 447 ===\n";
|
|
$rows = $pdo->query(
|
|
"SELECT uid, CType, LEFT(header,32) h, colPos, tx_container_parent par, sorting, hidden, deleted
|
|
FROM tt_content WHERE pid = 447 AND CType IN ('vitec_card','vitec_cols_33_33_33','vitec_introparagraph')
|
|
ORDER BY deleted, colPos, sorting, uid"
|
|
)->fetchAll();
|
|
foreach ($rows as $r) {
|
|
printf(" #%-6d %-22s col=%-4d par=%-6d sort=%-6d hid=%d del=%d %s\n",
|
|
$r['uid'], $r['CType'], $r['colPos'], $r['par'], $r['sorting'], $r['hidden'], $r['deleted'], $r['h']);
|
|
}
|
|
echo "\ncounts: " . count($rows) . " rows\n";
|