File: /mnt/data/dreamssalon-wp/wp-content/plugins/dreamsalon-widgets/widgets/class-blog-section-2.php
<?php
namespace dreamsalonelementor\Widgets;
use Elementor\Widget_Base;
use Elementor\Controls_Manager;
if ( ! defined( 'ABSPATH' ) ) exit;
class DS_blog_section_two extends Widget_Base {
public function get_name() {
return 'dreamsalon_elementor_blog_section_two';
}
public function get_title() {
return __( 'DreamSalon - Blog Section 2', 'dreamsalon_elementor' );
}
public function get_icon() {
return 'eicon-post-list';
}
public function get_categories() {
return [ 'dreamsalonelemetortheme' ];
}
protected function register_controls() {
$this->start_controls_section('content_section', [ 'label' => __( 'Content', 'dreamsalon_elementor' ) ]);
$this->add_control('badge_text', [
'label' => __( 'Badge Text', 'dreamsalon_elementor' ),
'type' => Controls_Manager::TEXT,
'default' => __( 'Recent Blog', 'dreamsalon_elementor' ),
]);
$this->add_control('heading_text', [
'label' => __( 'Heading', 'dreamsalon_elementor' ),
'type' => Controls_Manager::TEXT,
'default' => __( 'Checkout our Recent Articles', 'dreamsalon_elementor' ),
]);
$this->add_control('view_all_text', [
'label' => __( 'View All Button Text', 'dreamsalon_elementor' ),
'type' => Controls_Manager::TEXT,
'default' => __( 'View All Blogs', 'dreamsalon_elementor' ),
]);
$this->add_control('view_all_link', [
'label' => __( 'View All Button Link', 'dreamsalon_elementor' ),
'type' => Controls_Manager::URL,
'default' => [ 'url' => '#' ],
]);
$posts = get_posts(['post_type'=>'post','numberposts'=>50,'orderby'=>'date','order'=>'DESC']);
$options = [];
if ( $posts ) {
foreach ( $posts as $p ) { $options[$p->ID] = $p->post_title; }
}
$this->add_control('left_post', [
'label' => __( 'Left Post', 'dreamsalon_elementor' ),
'type' => Controls_Manager::SELECT2,
'options' => $options,
'multiple' => false,
]);
$this->add_control('left_image_override', [
'label' => __( 'Left Post Image Override', 'dreamsalon_elementor' ),
'type' => Controls_Manager::MEDIA,
'default' => [ 'url' => '' ],
]);
$this->add_control('right_post_1', [
'label' => __( 'Right Post 1', 'dreamsalon_elementor' ),
'type' => Controls_Manager::SELECT2,
'options' => $options,
'multiple' => false,
]);
$this->add_control('right_post_1_image', [
'label' => __( 'Right Post 1 Image Override', 'dreamsalon_elementor' ),
'type' => Controls_Manager::MEDIA,
'default' => [ 'url' => '' ],
]);
$this->add_control('right_post_2', [
'label' => __( 'Right Post 2', 'dreamsalon_elementor' ),
'type' => Controls_Manager::SELECT2,
'options' => $options,
'multiple' => false,
]);
$this->add_control('right_post_2_image', [
'label' => __( 'Right Post 2 Image Override', 'dreamsalon_elementor' ),
'type' => Controls_Manager::MEDIA,
'default' => [ 'url' => '' ],
]);
$this->end_controls_section();
}
private function get_post_data( $post_id, $override_img ) {
$post = $post_id ? get_post( $post_id ) : null;
if ( ! $post ) return null;
$permalink = get_permalink( $post );
$title = get_the_title( $post );
$excerpt = wp_trim_words( get_the_excerpt( $post ), 20 );
$thumb = ! empty($override_img['url']) ? $override_img['url'] : ( get_the_post_thumbnail_url( $post, 'large' ) ?: get_template_directory_uri() . '/assets/images/placeholder.webp' );
$cats = get_the_terms( $post, 'category' );
$cat_name = ( $cats && ! is_wp_error($cats) ) ? $cats[0]->name : __( 'Blog', 'dreamsalon_elementor' );
$author_id = $post->post_author;
$author_name = get_the_author_meta( 'display_name', $author_id );
$author_avatar = get_avatar_url( $author_id, [ 'size' => 128 ] );
$date = date_i18n( 'd M Y', strtotime( $post->post_date ) );
return compact('permalink','title','excerpt','thumb','cat_name','author_name','author_avatar','date');
}
protected function render() {
$s = $this->get_settings();
$left = $this->get_post_data( isset($s['left_post']) ? intval($s['left_post']) : 0, isset($s['left_image_override']) ? $s['left_image_override'] : [] );
$r1 = $this->get_post_data( isset($s['right_post_1']) ? intval($s['right_post_1']) : 0, isset($s['right_post_1_image']) ? $s['right_post_1_image'] : [] );
$r2 = $this->get_post_data( isset($s['right_post_2']) ? intval($s['right_post_2']) : 0, isset($s['right_post_2_image']) ? $s['right_post_2_image'] : [] );
$view_all_link = !empty($s['view_all_link']['url']) ? $s['view_all_link']['url'] : '#';
?>
<section class="section blog-section blog-sec-six">
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8 wow fadeInUp" data-wow-delay="0.2s">
<div class="section-header-six">
<span class="badge badge-soft-primary rounded-pill mb-1"><?php echo esc_html($s['badge_text']); ?></span>
<h2><?php echo esc_html($s['heading_text']); ?><span class="text-primary">.</span></h2>
</div>
</div>
<div class="col-md-4">
<div class="text-end text-end-left-mobile">
<a href="<?php echo esc_url($view_all_link); ?>" class="btn btn-dark sec-head-btn"><?php echo esc_html($s['view_all_text']); ?><i class="isax isax-arrow-right-3 ms-2"></i></a>
</div>
</div>
</div>
<div class="row">
<div class="col-xl-6">
<?php if ( $left ) : ?>
<div class="card shadow-none blog-grid-six">
<div class="card-img">
<a href="<?php echo esc_url($left['permalink']); ?>">
<img src="<?php echo esc_url($left['thumb']); ?>" class="rounded" alt="Img">
</a>
<span class="badge bg-primary"><?php echo esc_html($left['cat_name']); ?></span>
</div>
<div class="card-body">
<h5 class="mb-2"><a href="<?php echo esc_url($left['permalink']); ?>"><?php echo esc_html($left['title']); ?></a></h5>
<p class="mb-4"><?php echo esc_html($left['excerpt']); ?></p>
<div class="d-flex align-items-center justify-content-between">
<div class="d-flex align-items-center">
<a href="javascript:void(0);" class="avatar avatar-md flex-shrink-0 me-2">
<img src="<?php echo esc_url($left['author_avatar']); ?>" class="rounded-circle" alt="img">
</a>
<h6 class="fs-16 fw-normal"><a href="javascript:void(0);" class="text-capitalize"><?php echo esc_html($left['author_name']); ?></a></h6>
</div>
<span class="d-inline-flex align-items-center"><i class="isax isax-calendar me-2 fs-20"></i><?php echo esc_html($left['date']); ?></span>
</div>
</div>
</div>
<?php endif; ?>
</div>
<div class="col-xl-6">
<?php foreach ( [$r1, $r2] as $idx => $rp ) : if ( ! $rp ) continue; ?>
<div class="card shadow-none blog-grid-six">
<div class="row align-items-center">
<div class="col-md-6 d-flex">
<div class="card-img flex-fill">
<a href="<?php echo esc_url($rp['permalink']); ?>">
<img src="<?php echo esc_url($rp['thumb']); ?>" class="rounded w-100 h-100" alt="Img">
</a>
<span class="badge bg-primary"><?php echo esc_html($rp['cat_name']); ?></span>
</div>
</div>
<div class="col-md-6 d-flex">
<div class="card-body ps-md-0 flex-fill">
<h5 class="mb-2"><a href="<?php echo esc_url($rp['permalink']); ?>"><?php echo esc_html($rp['title']); ?></a></h5>
<p class="mb-4 text-truncate line-clamb-3"><?php echo esc_html($rp['excerpt']); ?></p>
<div class="d-flex align-items-center justify-content-between">
<div class="d-flex align-items-center">
<a href="javascript:void(0);" class="avatar avatar-md flex-shrink-0 me-2">
<img src="<?php echo esc_url($rp['author_avatar']); ?>" class="rounded-circle" alt="img">
</a>
<h6 class="fs-16 fw-normal"><a href="javascript:void(0);" class="text-capitalize"><?php echo esc_html($rp['author_name']); ?></a></h6>
</div>
<span class="d-inline-flex align-items-center"><i class="isax isax-calendar me-2 fs-20"></i><?php echo esc_html($rp['date']); ?></span>
</div>
</div>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</section>
<?php
}
}