Игорь Пушкарский:
А чего придумывать.
В админке я бы сделал так, добавил бы следующие поля:
изображение маленькое, изображение среднее, изображение стандартное и изобржанеи большое. Чтобы при переключении стиля блока, он выбирался как необходимо.
Так же, у вас есть 4 разновидности отображения блока (по картинкам соответственно). выбирать можно селектом.
А вот дальше самое интересное.
Предположим, у нас есть массив элементов, которые мы получили от сервера.
Далее, используем приблизительно след код:
/* type - 1-4, в зависимости от размера блока */
$elements = [];
$block = []; // маленькие элементы
$sizeblock = 0;
$tempblock= false; // временные элементы
$out = [];
foreach ($elements as $element) {
if (($element->type == 3) or ($element->type == 4)) {
$out[] = $element;
} else if (($element->type == 1) or ($element->type == 2)) {
if (($tempblock) and ($sizeblock < 3)) {
$block[] = $tempblock;
$tempblock = false;
$sizeblock = $sizeblock + 2; // размер $tempblock 2 как правило
}
if (($element->type == 2) and ($sizeblock >= 3)) {
$tempblock = $element;
}
if ($sizeblock != 4) {
$blockp[] = $element;
}
if ($sizeblock == 4) { // записываем и очищаем блоки
$out[] = $block;
$sizeblock = 0;
$block = false;
}