queryBuilder = $queryBuilder; } protected function getExtraMarkup(CardData $acfCardData): string { return ''; } public function getMarkup( CardData $acfCardData, bool $isLoadMore = false, bool $isIgnoreCustomMarkup = false ): string { if (!$isIgnoreCustomMarkup && $acfCardData->customMarkup && !$isLoadMore) { $customMarkup = trim($acfCardData->customMarkup); if ($customMarkup) { return $customMarkup; } } $markup = ''; if (!$isLoadMore) { $markup .= sprintf( '
', esc_html($acfCardData->getBemName()), esc_html($acfCardData->getBemName()) ); $markup .= "\r\n"; $markup .= "\r\n\t{% if _card.post_ids %}\r\n"; $markup .= "\t\t"; $markup .= sprintf('
', esc_html($acfCardData->getBemName())); $markup .= "\r\n"; } $markup .= "\t\t\t{% for post_id in _card.post_ids %}\r\n"; $markup .= sprintf( "\t\t\t\t[%s view-id='{{ _card.view_id }}' object-id='{{ post_id }}']\r\n", ViewShortcode::NAME, ); $markup .= "\t\t\t{% endfor %}\r\n"; if (!$isLoadMore) { $markup .= "\t\t" . '
' . "\r\n"; if ($acfCardData->noPostsFoundMessage) { $markup .= "\t{% else %}\r\n"; $markup .= "\t\t"; $markup .= sprintf( '
{{ _card.no_posts_found_message }}
', esc_html($acfCardData->getBemName()) ); $markup .= "\r\n"; } // endif in any case $markup .= "\t{% endif %}\r\n"; $markup .= $this->getExtraMarkup($acfCardData); $markup .= "\r\n" . '
' . "\r\n"; } return $markup; } public function getLayoutCSS(CardData $acfCardData): string { if (!$acfCardData->isUseLayoutCss) { return ''; } $message = __( "Manually edit these rules by disabling Layout Rules, otherwise these rules are updated every time you press the 'Update' button", 'acf-views' ); $css = "/*BEGIN LAYOUT_RULES*/\n"; $css .= sprintf("/*%s*/\n", $message); $rules = []; foreach ($acfCardData->layoutRules as $layoutRule) { $screen = 0; switch ($layoutRule->screen) { case CardLayoutData::SCREEN_TABLET: $screen = 576; break; case CardLayoutData::SCREEN_DESKTOP: $screen = 992; break; case CardLayoutData::SCREEN_LARGE_DESKTOP: $screen = 1400; break; } $rule = []; $rule[] = ' display:grid;'; switch ($layoutRule->layout) { case CardLayoutData::LAYOUT_ROW: $rule[] = ' grid-auto-flow:column;'; $rule[] = sprintf(' grid-column-gap:%s;', $layoutRule->horizontalGap); break; case CardLayoutData::LAYOUT_COLUMN: // the right way is 1fr, but use "1fr" because CodeMirror doesn't recognize it, "1fr" should be replaced with 1fr on the output $rule[] = ' grid-template-columns:"1fr";'; $rule[] = sprintf(' grid-row-gap:%s;', $layoutRule->verticalGap); break; case CardLayoutData::LAYOUT_GRID: $rule[] = sprintf(' grid-template-columns:repeat(%s, "1fr");', $layoutRule->amountOfColumns); $rule[] = sprintf(' grid-column-gap:%s;', $layoutRule->horizontalGap); $rule[] = sprintf(' grid-row-gap:%s;', $layoutRule->verticalGap); break; } $rules[$screen] = $rule; } // order is important in media rules ksort($rules); foreach ($rules as $screen => $rule) { if ($screen) { $css .= sprintf("\n@media screen and (min-width:%spx) {", $screen); } $css .= "\n#card .acf-card__items {\n"; $css .= join("\n", $rule); $css .= "\n}\n"; if ($screen) { $css .= "}\n"; } } $css .= "\n/*END LAYOUT_RULES*/"; return $css; } }