oglas v mrezi enak kartici: okvir prevzame visino vrstice, fiksna enota 300x400 centrirana v njem

This commit is contained in:
2026-08-31 17:09:37 +02:00
parent c847f526d3
commit 22cdb79c0e
2 changed files with 14 additions and 15 deletions
+8 -13
View File
@@ -177,22 +177,17 @@ export function GridBannerAd() {
}
export function ArticleCardAd() {
const seed = useMemo(() => adSeedCounter++, []);
const [filled, setFilled] = useState<boolean | null>(null);
if (filled === false) return null;
// 31. 8. 2026: oglas mora biti enak kartici, torej cela celica in ne nizji
// blok z luknjo pod njim. Okvir je zato h-full in prevzame visino vrstice,
// oglas pa je v njem centriran. Enota 9916590834 je fiksna 300x400: fiksne
// mere Googlova skripta ne prevaja, zato se ne razteguje kot responsive.
return (
// 31. 8. 2026: enota 3854634730 je v AdSense nastavljena kot fluid in-feed
// in si visino racuna sama (248 px), inline visine pa Googlova skripta
// prepise — z minHeight/height 400 je celico raztegnil na 600 in vrstica
// je narasla. Zato pustimo fluid, okvir pa se prilagodi vsebini in stoji
// na vrhu celice, da pod njim ni vidne luknje.
// Vzorec z imeni izvajalcev je bil pod oglasom viden kot prazna grafika,
// ker je fluid enota nizja od celice. Zdaj je okvir samo okoli oglasa in
// se skrci na njegovo visino.
// 31. 8. 2026: fiksna Display enota 300x400, ki jo je Sebastjan naredil
// posebej za mrezo. Fluid In-feed (3854634730) si je visino racunal sam in
// se ustavil pri 258 px, zato je pod njim ostajala luknja.
<div className="self-start w-full flex justify-center rounded-md border border-card-border bg-card overflow-hidden">
<div
className="h-full w-full flex items-center justify-center rounded-md border border-card-border bg-card overflow-hidden"
data-testid="ad-card"
>
<AdSense
slot="9916590834"
responsive={false}
+6 -2
View File
@@ -924,13 +924,17 @@ export default function Home() {
// Oglas gre le v vsako drugo vrstico. Meritev 31. 8. 2026: od 13 enot na
// naslovnici jih je 9 vrnilo unfilled, torej je mest vec, kot jih Google
// za to stran zapolni. Manj mest z visjo zapolnjenostjo prinese vec.
let adCount = 0;
let vidCount = 0;
const totalRows = items.length / 4;
for (let r = 0; r < totalRows; r++) {
const rowStart = r * 4;
const hasWidget = items.slice(rowStart, rowStart + 4).some((it) => it.type === "widget");
if (hasWidget) continue;
if (r > 0 && videos.length) {
if (r % 2 === 1) {
const pos = r === 1 ? 3 : adCount % 2 === 0 ? 0 : 3;
items[rowStart + pos] = { type: "ad", key: `ad-row-${adCount++}` };
} else if (r > 0 && videos.length) {
// video namesto zadnjega clanka v vrstici brez oglasa
const v = videos[vidCount % videos.length];
vidCount += 1;
@@ -1065,7 +1069,7 @@ export default function Home() {
item.type === "widget"
? <div key={item.key}>{item.widget!.el}</div>
: item.type === "ad"
? <div key={item.key} className="flex items-start empty:hidden" data-testid={`ad-grid-${item.key}`}><ArticleCardAd /></div>
? <div key={item.key} className="h-full empty:hidden" data-testid={`ad-grid-${item.key}`}><ArticleCardAd /></div>
: item.type === "video" && item.video
? <VideoCard key={item.key} video={item.video} />
: item.article