Automattic\WooCommerce\Blocks\BlockTypes

MiniCart::get_markup()protectedWC 1.0

Render the markup for the Mini-Cart block.

Метод класса: MiniCart{}

Хуков нет.

Возвращает

Строку. The HTML markup.

Использование

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->get_markup( $attributes );
$attributes(массив) (обязательный)
Block attributes.

Код MiniCart::get_markup() WC 9.8.5

protected function get_markup( $attributes ) {
	if ( is_admin() || WC()->is_rest_api_request() ) {
		// In the editor we will display the placeholder, so no need to load
		// real cart data and to print the markup.
		return '';
	}

	$classes_styles  = StyleAttributesUtils::get_classes_and_styles_by_attributes( $attributes, array( 'text_color', 'background_color', 'font_size', 'font_weight', 'font_family', 'extra_classes' ) );
	$wrapper_classes = sprintf( 'wc-block-mini-cart wp-block-woocommerce-mini-cart %s', $classes_styles['classes'] );
	$wrapper_styles  = $classes_styles['styles'];

	$icon_color          = array_key_exists( 'iconColor', $attributes ) ? esc_attr( $attributes['iconColor']['color'] ) : 'currentColor';
	$product_count_color = array_key_exists( 'productCountColor', $attributes ) ? esc_attr( $attributes['productCountColor']['color'] ) : '';
	$styles              = $product_count_color ? 'background:' . $product_count_color : '';
	$icon                = MiniCartUtils::get_svg_icon( $attributes['miniCartIcon'] ?? '', $icon_color );

	$product_count_visibility = isset( $attributes['productCountVisibility'] ) ? $attributes['productCountVisibility'] : 'greater_than_zero';

	$button_html = '<span class="wc-block-mini-cart__quantity-badge">
		' . $icon . '
		' . ( 'never' !== $product_count_visibility ? '<span class="wc-block-mini-cart__badge" style="' . esc_attr( $styles ) . '"></span>' : '' ) . '
	</span>
	' . $this->get_cart_price_markup( $attributes );

	if ( is_cart() || is_checkout() ) {
		if ( $this->should_not_render_mini_cart( $attributes ) ) {
			return '';
		}

		// It is not necessary to load the Mini-Cart Block on Cart and Checkout page.
		return '<div class="' . esc_attr( $wrapper_classes ) . '" style="visibility:hidden" aria-hidden="true">
			<button class="wc-block-mini-cart__button" disabled aria-label="' . __( 'Cart', 'woocommerce' ) . '">' . $button_html . '</button>
		</div>';
	}

	$template_part_contents = '';

	// Determine if we need to load the template part from the DB, the theme or WooCommerce in that order.
	$templates_from_db = BlockTemplateUtils::get_block_templates_from_db( array( 'mini-cart' ), 'wp_template_part' );
	if ( is_countable( $templates_from_db ) && count( $templates_from_db ) > 0 ) {
		$template_slug_to_load = $templates_from_db[0]->theme;
	} else {
		$theme_has_mini_cart   = BlockTemplateUtils::theme_has_template_part( 'mini-cart' );
		$template_slug_to_load = $theme_has_mini_cart ? get_stylesheet() : BlockTemplateUtils::PLUGIN_SLUG;
	}
	$template_part = get_block_template( $template_slug_to_load . '//mini-cart', 'wp_template_part' );

	if ( $template_part && ! empty( $template_part->content ) ) {
		$template_part_contents = do_blocks( $template_part->content );
	}

	if ( '' === $template_part_contents ) {
		$template_part_contents = do_blocks(
			// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
			file_get_contents( Package::get_path() . 'templates/' . BlockTemplateUtils::DIRECTORY_NAMES['TEMPLATE_PARTS'] . '/mini-cart.html' )
		);
	}

	return '<div class="' . esc_attr( $wrapper_classes ) . '" style="' . esc_attr( $wrapper_styles ) . '">
		<button class="wc-block-mini-cart__button" aria-label="' . __( 'Cart', 'woocommerce' ) . '">' . $button_html . '</button>
		<div class="is-loading wc-block-components-drawer__screen-overlay wc-block-components-drawer__screen-overlay--is-hidden" aria-hidden="true">
			<div class="wc-block-mini-cart__drawer wc-block-components-drawer">
				<div class="wc-block-components-drawer__content">
					<div class="wc-block-mini-cart__template-part">'
					. wp_kses_post( $template_part_contents ) .
					'</div>
				</div>
			</div>
		</div>
	</div>';
}