images-portfolio
This commit is contained in:
@@ -0,0 +1,151 @@
|
|||||||
|
.portfolio-page {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero {
|
||||||
|
padding: 72px 0 54px;
|
||||||
|
background: var(--color-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero__inner,
|
||||||
|
.portfolio-gallery__inner,
|
||||||
|
.portfolio-lead__inner {
|
||||||
|
width: min(100% - 40px, var(--container));
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero__inner {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr) minmax(220px, 0.32fr);
|
||||||
|
align-items: end;
|
||||||
|
gap: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero__content {
|
||||||
|
display: grid;
|
||||||
|
gap: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero__eyebrow {
|
||||||
|
color: var(--color-accent);
|
||||||
|
font-size: var(--fz-xs);
|
||||||
|
font-weight: 800;
|
||||||
|
letter-spacing: 0.12em;
|
||||||
|
text-transform: uppercase;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero__title {
|
||||||
|
max-width: 780px;
|
||||||
|
font-size: var(--fz-xxl);
|
||||||
|
font-weight: 800;
|
||||||
|
line-height: var(--lh-tight);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero__lead {
|
||||||
|
max-width: 720px;
|
||||||
|
color: var(--color-muted);
|
||||||
|
font-size: var(--fz-md);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero__meta {
|
||||||
|
display: grid;
|
||||||
|
gap: 6px;
|
||||||
|
border: 1px solid var(--color-line);
|
||||||
|
border-radius: var(--radius-md);
|
||||||
|
background: var(--color-surface);
|
||||||
|
padding: 24px;
|
||||||
|
box-shadow: var(--shadow-soft);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero__meta-number {
|
||||||
|
color: var(--color-accent-dark);
|
||||||
|
font-size: var(--fz-xl);
|
||||||
|
font-weight: 800;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-hero__meta-text {
|
||||||
|
color: var(--color-muted);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery {
|
||||||
|
padding: 28px 0 76px;
|
||||||
|
background: var(--color-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery__inner {
|
||||||
|
display: grid;
|
||||||
|
gap: 64px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery__section {
|
||||||
|
display: grid;
|
||||||
|
gap: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery__head {
|
||||||
|
display: grid;
|
||||||
|
gap: 12px;
|
||||||
|
max-width: 820px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery__title {
|
||||||
|
font-size: var(--fz-xl);
|
||||||
|
font-weight: 800;
|
||||||
|
line-height: var(--lh-tight);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery__lead {
|
||||||
|
color: var(--color-muted);
|
||||||
|
font-size: var(--fz-md);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery__grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
|
||||||
|
gap: 16px;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery__item {
|
||||||
|
aspect-ratio: 1;
|
||||||
|
border: 1px solid var(--color-line);
|
||||||
|
border-radius: var(--radius-md);
|
||||||
|
overflow: hidden;
|
||||||
|
background: var(--color-surface-soft);
|
||||||
|
box-shadow: var(--shadow-soft);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery__image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
transition: transform 0.24s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-gallery__item:hover .portfolio-gallery__image {
|
||||||
|
transform: scale(1.04);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-lead {
|
||||||
|
padding: 70px 0;
|
||||||
|
background: var(--color-surface-soft);
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-lead__inner {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 0.82fr) minmax(360px, 0.68fr);
|
||||||
|
gap: 44px;
|
||||||
|
align-items: start;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-lead__content {
|
||||||
|
display: grid;
|
||||||
|
gap: 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.portfolio-lead__text {
|
||||||
|
max-width: 560px;
|
||||||
|
color: var(--color-muted);
|
||||||
|
font-size: var(--fz-md);
|
||||||
|
}
|
||||||
@@ -9,7 +9,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.service-hero__title,
|
.service-hero__title,
|
||||||
.policy-hero__title {
|
.policy-hero__title,
|
||||||
|
.portfolio-hero__title {
|
||||||
font-size: 2.8rem;
|
font-size: 2.8rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -46,7 +47,10 @@
|
|||||||
.home-categories,
|
.home-categories,
|
||||||
.home-steps,
|
.home-steps,
|
||||||
.policy-hero,
|
.policy-hero,
|
||||||
.policy-content {
|
.policy-content,
|
||||||
|
.portfolio-hero,
|
||||||
|
.portfolio-gallery,
|
||||||
|
.portfolio-lead {
|
||||||
padding: 44px 0;
|
padding: 44px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +59,9 @@
|
|||||||
.service-process__inner,
|
.service-process__inner,
|
||||||
.service-lead__inner,
|
.service-lead__inner,
|
||||||
.home-hero__inner,
|
.home-hero__inner,
|
||||||
.home-steps__inner {
|
.home-steps__inner,
|
||||||
|
.portfolio-hero__inner,
|
||||||
|
.portfolio-lead__inner {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,13 +100,17 @@
|
|||||||
.home-steps__inner,
|
.home-steps__inner,
|
||||||
.site-footer__inner,
|
.site-footer__inner,
|
||||||
.policy-hero__inner,
|
.policy-hero__inner,
|
||||||
.policy-content__inner {
|
.policy-content__inner,
|
||||||
|
.portfolio-hero__inner,
|
||||||
|
.portfolio-gallery__inner,
|
||||||
|
.portfolio-lead__inner {
|
||||||
width: min(100% - 20px, var(--container));
|
width: min(100% - 20px, var(--container));
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-hero__title,
|
.service-hero__title,
|
||||||
.home-hero__title,
|
.home-hero__title,
|
||||||
.policy-hero__title {
|
.policy-hero__title,
|
||||||
|
.portfolio-hero__title {
|
||||||
font-size: 2.2rem;
|
font-size: 2.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,7 +129,8 @@
|
|||||||
font-size: 1.7rem;
|
font-size: 1.7rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.service-lead__inner {
|
.service-lead__inner,
|
||||||
|
.portfolio-lead__inner {
|
||||||
gap: 28px;
|
gap: 28px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ function sev_tort_enqueue_assets() {
|
|||||||
$responsive_dependencies = array( 'sev-tort-layout' );
|
$responsive_dependencies = array( 'sev-tort-layout' );
|
||||||
|
|
||||||
if ( $page ) {
|
if ( $page ) {
|
||||||
$style = isset( $page['style'] ) ? $page['style'] : 'service-page.css';
|
$style = 'portfolio' === $page['slug'] ? 'portfolio-page.css' : ( isset( $page['style'] ) ? $page['style'] : 'service-page.css' );
|
||||||
wp_enqueue_style( 'sev-tort-page', $uri . '/assets/css/' . $style, array( 'sev-tort-layout' ), $theme_version );
|
wp_enqueue_style( 'sev-tort-page', $uri . '/assets/css/' . $style, array( 'sev-tort-layout' ), $theme_version );
|
||||||
$responsive_dependencies = array( 'sev-tort-page' );
|
$responsive_dependencies = array( 'sev-tort-page' );
|
||||||
} elseif ( is_front_page() ) {
|
} elseif ( is_front_page() ) {
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ function sev_tort_template_include( $template ) {
|
|||||||
return get_stylesheet_directory() . '/page-templates/page-policy.php';
|
return get_stylesheet_directory() . '/page-templates/page-policy.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( 'portfolio' === $page['slug'] ) {
|
||||||
|
return get_stylesheet_directory() . '/page-templates/page-portfolio.php';
|
||||||
|
}
|
||||||
|
|
||||||
return get_stylesheet_directory() . '/page-templates/page-service.php';
|
return get_stylesheet_directory() . '/page-templates/page-service.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,125 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
$page = sev_tort_current_page_config();
|
||||||
|
|
||||||
|
if ( ! function_exists( 'sev_tort_portfolio_image_groups' ) ) {
|
||||||
|
function sev_tort_portfolio_image_groups() {
|
||||||
|
$base_dir = get_template_directory() . '/assets/images/images';
|
||||||
|
$base_uri = get_template_directory_uri() . '/assets/images/images';
|
||||||
|
$groups = array(
|
||||||
|
array(
|
||||||
|
'title' => 'Бенто и праздничные торты',
|
||||||
|
'lead' => 'Компактные торты, надписи, минималистичный и яркий декор для личных поводов.',
|
||||||
|
'path' => '',
|
||||||
|
'alt' => 'Бенто торт на заказ в Севастополе',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'title' => 'Медовые торты и классические работы',
|
||||||
|
'lead' => 'Подборка тортов с натуральным декором, ягодами, кремом и аккуратной подачей.',
|
||||||
|
'path' => 'medobory_torty_na_zakaz',
|
||||||
|
'alt' => 'Медовый торт на заказ в Севастополе',
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
'title' => 'Авторские торты Stefany Cake',
|
||||||
|
'lead' => 'Примеры детских, свадебных, тематических и праздничных тортов с индивидуальным декором.',
|
||||||
|
'path' => 'stefanycake_torty_na_zakaz',
|
||||||
|
'alt' => 'Авторский торт на заказ в Севастополе',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ( $groups as $index => $group ) {
|
||||||
|
$directory = trailingslashit( $base_dir );
|
||||||
|
$uri = trailingslashit( $base_uri );
|
||||||
|
|
||||||
|
if ( $group['path'] ) {
|
||||||
|
$directory .= $group['path'] . '/';
|
||||||
|
$uri .= $group['path'] . '/';
|
||||||
|
}
|
||||||
|
|
||||||
|
$files = array();
|
||||||
|
foreach ( array( 'jpg', 'jpeg', 'png', 'webp' ) as $extension ) {
|
||||||
|
$matched_files = glob( $directory . '*.' . $extension );
|
||||||
|
if ( $matched_files ) {
|
||||||
|
$files = array_merge( $files, $matched_files );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
natsort( $files );
|
||||||
|
|
||||||
|
$groups[ $index ]['images'] = array_map(
|
||||||
|
function ( $file ) use ( $directory, $uri, $group ) {
|
||||||
|
$name = basename( $file );
|
||||||
|
$number = preg_replace( '/\D+/', '', pathinfo( $name, PATHINFO_FILENAME ) );
|
||||||
|
$size = @getimagesize( $file );
|
||||||
|
|
||||||
|
return array(
|
||||||
|
'src' => $uri . $name,
|
||||||
|
'alt' => trim( $group['alt'] . ( $number ? ' - работа ' . $number : '' ) ),
|
||||||
|
'width' => $size ? $size[0] : 600,
|
||||||
|
'height' => $size ? $size[1] : 600,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
$files
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $groups;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$portfolio_groups = sev_tort_portfolio_image_groups();
|
||||||
|
|
||||||
|
get_header();
|
||||||
|
?>
|
||||||
|
<main class="portfolio-page">
|
||||||
|
<section class="portfolio-hero">
|
||||||
|
<div class="portfolio-hero__inner">
|
||||||
|
<div class="portfolio-hero__content">
|
||||||
|
<span class="portfolio-hero__eyebrow">Портфолио</span>
|
||||||
|
<h1 class="portfolio-hero__title"><?php echo esc_html( $page['h1'] ); ?></h1>
|
||||||
|
<p class="portfolio-hero__lead"><?php echo esc_html( $page['lead'] ); ?></p>
|
||||||
|
</div>
|
||||||
|
<div class="portfolio-hero__meta">
|
||||||
|
<span class="portfolio-hero__meta-number"><?php echo esc_html( array_sum( array_map( static function ( $group ) { return count( $group['images'] ); }, $portfolio_groups ) ) ); ?></span>
|
||||||
|
<span class="portfolio-hero__meta-text">примеров тортов в галерее</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="portfolio-gallery">
|
||||||
|
<div class="portfolio-gallery__inner">
|
||||||
|
<?php foreach ( $portfolio_groups as $group ) : ?>
|
||||||
|
<div class="portfolio-gallery__section">
|
||||||
|
<div class="portfolio-gallery__head">
|
||||||
|
<h2 class="portfolio-gallery__title"><?php echo esc_html( $group['title'] ); ?></h2>
|
||||||
|
<p class="portfolio-gallery__lead"><?php echo esc_html( $group['lead'] ); ?></p>
|
||||||
|
</div>
|
||||||
|
<div class="portfolio-gallery__grid">
|
||||||
|
<?php foreach ( $group['images'] as $image ) : ?>
|
||||||
|
<figure class="portfolio-gallery__item">
|
||||||
|
<img class="portfolio-gallery__image" src="<?php echo esc_url( $image['src'] ); ?>" alt="<?php echo esc_attr( $image['alt'] ); ?>" width="<?php echo esc_attr( $image['width'] ); ?>" height="<?php echo esc_attr( $image['height'] ); ?>" loading="lazy">
|
||||||
|
</figure>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="portfolio-lead">
|
||||||
|
<div class="portfolio-lead__inner">
|
||||||
|
<div class="portfolio-lead__content">
|
||||||
|
<span class="section-eyebrow">Заявка</span>
|
||||||
|
<h2 class="section-title">Понравился стиль из портфолио?</h2>
|
||||||
|
<p class="portfolio-lead__text">Отправьте пример, дату и пожелания по весу. Подскажем начинку, стоимость и ближайший свободный срок.</p>
|
||||||
|
</div>
|
||||||
|
<?php get_template_part( 'template-parts/lead-form', null, array( 'context' => 'portfolio' ) ); ?>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
<?php
|
||||||
|
get_footer();
|
||||||
Reference in New Issue
Block a user