From 2eb170bdbd4f56dd75a8413f3d256ef346a79b74 Mon Sep 17 00:00:00 2001 From: Marek Bachmann Date: Sat, 10 Dec 2022 23:37:03 +0100 Subject: [PATCH] Added some logic for image grid column balancing --- src/Model/Item.php | 66 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/src/Model/Item.php b/src/Model/Item.php index 165e31d12d..dedf905162 100644 --- a/src/Model/Item.php +++ b/src/Model/Item.php @@ -3151,26 +3151,70 @@ class Item // @todo add some fany ai to divide images equally on both columns $img_tags_fc = array(); $img_tags_sc = array(); - if (count($img_tags_landscape) == 0) { - // only portrait - for ($i = 0; $i < count($img_tags_portrait); $i++) { - ($i % 2 == 0) ? ($img_tags_fc[] = $img_tags_portrait[$i]) : ($img_tags_sc[] = $img_tags_portrait[$i]); + if (count($img_tags_landscape) == 0 || count($img_tags_portrait) == 0) { + if (count($img_tags_landscape) == 0) { + // only portrait + for ($i = 0; $i < count($img_tags_portrait); $i++) { + ($i % 2 == 0) ? ($img_tags_fc[] = $img_tags_portrait[$i]) : ($img_tags_sc[] = $img_tags_portrait[$i]); + } } - } - if (count($img_tags_portrait) == 0) { - // ony landscapes - for ($i = 0; $i < count($img_tags_landscape); $i++) { - ($i % 2 == 0) ? ($img_tags_fc[] = $img_tags_landscape[$i]) : ($img_tags_sc[] = $img_tags_landscape[$i]); + if (count($img_tags_portrait) == 0) { + // ony landscapes + for ($i = 0; $i < count($img_tags_landscape); $i++) { + ($i % 2 == 0) ? ($img_tags_fc[] = $img_tags_landscape[$i]) : ($img_tags_sc[] = $img_tags_landscape[$i]); + } } + } else { + // Mix of landscape and portrait images + $domformat = (count($img_tags_landscape) > count($img_tags_portrait)) ? 'landscape' : 'portrait'; + if ($domformat == 'landscape') { + // More landscapes than portraits + for ($l = 0; $l < count($img_tags_landscape); $l++) { + // use two landscapes for on portrait + if ((count($img_tags_landscape) > $l + 1) && (count($img_tags_portrait) > $l)) { + // we have one more landscape that can be used for the l-th portrait + $img_tags_fc[] = $img_tags_landscape[$l]; + $img_tags_fc[] = $img_tags_landscape[$l + 1]; + $img_tags_sc[] = $img_tags_portrait[$l]; + $l++; + } elseif (count($img_tags_portrait) <= $l) { + // no more portraits available but landscapes + $img_tags_fc[] = $img_tags_landscape[$l]; + } + } + } + if ($domformat == 'portrait') { + // More portraits than landscapes + $l = 0; + for ($p = 0; $p < count($img_tags_portrait); $p++) { + // use two landscapes for on portrait + if ((count($img_tags_landscape) > $l + 1)) { + // we have one more landscape that can be used for the p-th portrait + $img_tags_sc[] = $img_tags_landscape[$l]; + $img_tags_sc[] = $img_tags_landscape[$l + 1]; + $img_tags_fc[] = $img_tags_portrait[$p]; + // used to landscapes: + $l += 2; + } else { + // no more landscapes available + if ($p % 2 == 0 ) { + $img_tags_fc[] = $img_tags_landscape[$l]; + } else { + $img_tags_sc[] = $img_tags_landscape[$l]; + } + + } + } + } + } - $media = Renderer::replaceMacros(Renderer::getMarkupTemplate('content/image_grid.tpl'), [ + return Renderer::replaceMacros(Renderer::getMarkupTemplate('content/image_grid.tpl'), [ 'columns' => [ 'fc' => $img_tags_fc, 'sc' => $img_tags_sc, ], ]); - return $media; } /**