{"id":299,"date":"2026-01-08T09:22:17","date_gmt":"2026-01-08T08:22:17","guid":{"rendered":"https:\/\/blog.ctr24.co.pl\/?p=299"},"modified":"2026-01-08T09:32:36","modified_gmt":"2026-01-08T08:32:36","slug":"uniwersalne-makro-multi_columnsitems-cols","status":"publish","type":"post","link":"https:\/\/blog.ctr24.co.pl\/?p=299","title":{"rendered":"Uniwersalne makro: multi_columns(items, cols)"},"content":{"rendered":"\n<p>Zawarto\u015b\u0107 pliku z makrem <em>macros.html<\/em><\/p>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"html\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">{% macro multi_columns(items, cols) %}\r\n    {% set total = items|length %}\r\n    {% set size = (total \/\/ cols) + (1 if total % cols > 0 else 0) %}\r\n\r\n    &lt;div style=\"display: flex; gap: 20px;\">\r\n\r\n        {% for col in range(cols) %}\r\n            &lt;div style=\"flex: 1;\">\r\n                {% set start = col * size %}\r\n                {% set end = start + size %}\r\n                {% for item in items[start:end] %}\r\n                    &lt;div class=\"row\">{{ item }}&lt;\/div>\r\n                {% endfor %}\r\n            &lt;\/div>\r\n        {% endfor %}\r\n\r\n    &lt;\/div>\r\n{% endmacro %}\r\n<\/pre><\/div>\n\n\n<p>Przyk\u0142ad u\u017cycia<\/p>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"html\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">{% import \"macros.html\" as ui %} \n{{ ui.multi_columns(dane, 3) }}<\/pre><\/div>\n\n\n<p>Je\u015bli elementy to obiekty wystarczy zmienic <em><strong>{{item}<\/strong>} <\/em>na oczekiwana zawarto\u015b\u0107 np.<\/p>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"php\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">&lt;div> \n    &lt;strong>{{ item.nazwa }}&lt;\/strong> \n    &lt;span>{{ item.opis }}&lt;\/span> \n    &lt;span>Warto\u015b\u0107: {{ item.wartosc }}&lt;\/span> \n&lt;\/div><\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Opcja zaawansowana<\/h2>\n\n\n\n<p>Opcja bardziej zaawansowana pozwalaj\u0105ca na uniwersalna funkcj\u0119 kt\u00f3ra mo\u017ce u\u017cy\u0107 funkcji formatuj\u0105cej item.<br>Dzi\u0119ki <code>caller()<\/code> mo\u017cesz przekaza\u0107 w\u0142asny spos\u00f3b renderowania elementu.<\/p>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"html\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">{% macro multi_columns(items, cols, caller=None) %}\r\n    {% set total = items|length %}\r\n    {% set size = (total \/\/ cols) + (1 if total % cols > 0 else 0) %}\r\n\r\n    &lt;div style=\"display: flex; gap: 20px;\">\r\n\r\n        {% for col in range(cols) %}\r\n            &lt;div style=\"flex: 1;\">\r\n                {% set start = col * size %}\r\n                {% set end = start + size %}\r\n                {% for item in items[start:end] %}\r\n                    {% if caller %}\r\n                        {{ caller(item) }}\r\n                    {% else %}\r\n                        &lt;div class=\"row\">{{ item }}&lt;\/div>\r\n                    {% endif %}\r\n                {% endfor %}\r\n            &lt;\/div>\r\n        {% endfor %}\r\n\r\n    &lt;\/div>\r\n{% endmacro %}\r\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Jak u\u017cywa\u0107 makra<\/h2>\n\n\n\n<p>Proste dane (stringi)<\/p>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"html\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">{% import \"macros.html\" as ui %}\n{{ ui.multi_columns(dane, 3) }}<\/pre><\/div>\n\n\n<p>Dane obiektowe (np. nazwa, opis, stan)<\/p>\n\n\n<div style=\"margin-bottom:50px\" class=\"wp-block-cblocks-coder-block\"><pre class=\"im-coder-block\" data-mode=\"html\" data-theme=\"twilight\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\">{% import \"macros.html\" as ui %}\r\n\r\n{% call(item) ui.multi_columns(dane, 3) %}\r\n    &lt;div class=\"row\">\r\n        &lt;strong>{{ item.nazwa }}&lt;\/strong>&lt;br>\r\n        {{ item.opis }}&lt;br>\r\n        Stan lodowy: {{ item.stan }}\r\n    &lt;\/div>\r\n{% endcall %}\r\n<\/pre><\/div>\n\n\n<p><a href=\"https:\/\/copilot.microsoft.com\/chats\/gnSGcTQzBLGZVzAuYFkXk\">https:\/\/copilot.microsoft.com\/chats\/gnSGcTQzBLGZVzAuYFkXk<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zawarto\u015b\u0107 pliku z makrem macros.html Przyk\u0142ad u\u017cycia Je\u015bli elementy to obiekty wystarczy zmienic {{item}} na oczekiwana zawarto\u015b\u0107 np. Opcja zaawansowana<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[36],"class_list":["post-299","post","type-post","status-publish","format-standard","hentry","category-python","tag-jinja"],"_links":{"self":[{"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/posts\/299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=299"}],"version-history":[{"count":3,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/posts\/299\/revisions"}],"predecessor-version":[{"id":302,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=\/wp\/v2\/posts\/299\/revisions\/302"}],"wp:attachment":[{"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.ctr24.co.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}