Siteβ―Builder
Editing:
index4444444444.php
writable 0666
<?php /************************************************************************** * BUSINESS PROFILE INDEX β masonry edition (v4, 2025β07βXX) * ---------------------------------------------------------------------- * β’ CSSβGrid masonry (dense) β no vertical gaps, no stray white strips. * β’ Each module still renders only when it outputs real content. * β’ Drop in for /business/<slug>/index.php **************************************************************************/ declare(strict_types=1); require_once $_SERVER['DOCUMENT_ROOT'].'/pages/lib/helpers.php'; /* βββ profile --------------------------------------------------------- */ $profile = get_profile(); /* helpers ------------------------------------------------------------- */ function h(string $s):string{return htmlspecialchars($s,ENT_QUOTES,'UTF-8');} function st_slug(string $s):string{return strtoupper(trim($s));} function ct_slug(string $c):string{return strtolower(str_replace(' ','-',$c));} function fmt_phone(string $p):string{ $d=preg_replace('/\D/','',$p); return strlen($d)===10?sprintf('(%s) %sβ%s',substr($d,0,3),substr($d,3,3),substr($d,6)):$p; } /* fields -------------------------------------------------------------- */ $name =$profile['display_name']??'Business'; $slogan =$profile['slogan']??''; $desc =$profile['description']??''; $addr =$profile['address']??''; $city =$profile['city']??''; $state =$profile['state']??''; $zip =$profile['zip']??''; $phone =$profile['phone']??''; $site =$profile['website']??''; $slug =$profile['slug']??basename(__DIR__); $country='USA'; $stateslug=st_slug($state); $cityslug =ct_slug($city); /* meta --------------------------------------------------------------- */ $metaTitle="$name in $city, $state | BestDealOn"; $metaDesc =$desc?:($slogan?:$name); $canonical='https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; /* module list -------------------------------------------------------- */ $root=$_SERVER['DOCUMENT_ROOT']; $modsDir="$root/pages/modules"; $globCfg="$modsDir/modules.json"; $locCfg =__DIR__.'/config.json'; $globMods=is_readable($globCfg)?json_decode(file_get_contents($globCfg),true):[]; $locMods =is_readable($locCfg)?json_decode(file_get_contents($locCfg),true):[]; $ordered=[]; foreach($locMods as $m)$ordered[$m['name']]=$m; foreach($globMods as $g)if(!isset($ordered[$g['name']]))$ordered[$g['name']]=$g; $modules=array_filter($ordered,fn($m)=>($m['active']??false)===true); ?> <!doctype html><html lang="en"><head> <meta charset="utf-8"> <title><?=h($metaTitle)?></title> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="description" content="<?=h($metaDesc)?>"> <link rel="canonical" href="<?=h($canonical)?>"> <style> :root{ --fg:#1b334a;--link:#2357d7;--card-bg:#fff;--shadow:0 2px 16px #dde3fa26; font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif; } body{margin:0;background:#f5f8fb;color:var(--fg)} /*ββ header βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ*/ .top-bar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap; gap:.45rem;padding:.55rem 1rem;background:#eee;text-align:center} .logo{font-weight:900;letter-spacing:-.5px;color:var(--link);text-decoration:none} .breadcrumb a{color:var(--link);text-decoration:none} .breadcrumb span{margin:0 .25rem} /*ββ business card βββββββββββββββββββββββββββββββββββββββββββββββββββ*/ .biz-card{max-width:680px;margin:2rem auto;background:var(--card-bg); border-radius:20px;box-shadow:var(--shadow);padding:2rem 1.4rem; display:grid;gap:1rem;grid-template-columns:1fr 1fr} .biz-card h1{grid-column:1/-1;font-size:1.7rem;color:#2c61d7;margin:.1em 0} .biz-card .slogan{grid-column:1/-1;color:#2e6eb0;font-style:italic;font-size:1.1rem} .field{display:flex;gap:.6rem} .label{font-weight:600;min-width:95px;color:#23487b} .value{color:#364868} @media(max-width:600px){.biz-card{grid-template-columns:1fr}.field{flex-direction:column}} /*ββ modules grid β CSS masonry via dense grid βββββββββββββββββββββββ*/ .modules{ display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); grid-auto-flow:row dense; /* <ββ key to close gaps */ gap:1.4rem; max-width:960px;margin:0 auto 2.5rem;padding:0 1rem; } .mod-card{ background:var(--card-bg);border-radius:20px;box-shadow:var(--shadow); padding:1.6rem;overflow:hidden; /* mask inner white bg corners */ break-inside:avoid; /* for legacy column fallback */ } /* widen cards on big screens */ @media(min-width:1100px){.modules{grid-template-columns:repeat(auto-fill,minmax(380px,1fr))}} </style> </head><body> <!-- header --> <div class="top-bar"> <a class="logo" href="/">BESTΒ DEALΒ ON</a> <nav class="breadcrumb" aria-label="Breadcrumb"> <a href="/">Index</a><span>/</span> <a href="/geo/<?=h($country)?>/<?=h($stateslug)?>/"><?=h($stateslug)?></a><span>/</span> <?php if($city):?><a href="/geo/<?=h($country)?>/<?=h($stateslug)?>/<?=h($cityslug)?>/"><?=h($city)?></a><span>/</span><?php endif;?> <span><?=h($name)?></span> </nav> </div> <!-- business card --> <section class="biz-card"> <h1><?=h($name)?></h1> <?php if($slogan):?><div class="slogan"><?=h($slogan)?></div><?php endif;?> <?php if($addr||$city||$state||$zip):?> <div class="field"><span class="label">Address:</span><span class="value"> <?php if($addr)echo h($addr).'<br>';?> <?=h(trim(($city?$city.', ':'').$state.' '.$zip))?> </span></div> <?php endif;?> <?php if($phone):?> <div class="field"><span class="label">Phone:</span><span class="value"><b><?=h(fmt_phone($phone))?></b></span></div> <?php endif;?> <?php if($site):?> <div class="field"><span class="label">Website:</span><span class="value"><a href="<?=h($site)?>" target="_blank"><?=h($site)?></a></span></div> <?php endif;?> <?php if($desc):?> <div class="field" style="grid-column:1/-1"><span class="value" style="line-height:1.4"><?=h($desc)?></span></div> <?php endif;?> </section> <!-- modules --> <main class="modules"> <?php foreach($modules as $mod){ $abs=$modsDir.'/'.$mod['relative_path']; if(!is_file($abs))continue; ob_start(); try{include $abs;}catch(Throwable $e){error_log($e);} $out=trim(ob_get_clean()); if($out!==''){ echo "<section class='mod-card'>\n$out\n</section>"; } } ?> </main> </body></html>
Save changes
Create folder
writable 0777
Create
Cancel