startControlsSection( 'section_testimonial', [ 'label' => __('Testimonial'), ] ); $this->addControl( 'testimonial_content', [ 'label' => __('Content'), 'type' => ControlsManager::TEXTAREA, 'dynamic' => [ 'active' => true, ], 'rows' => '10', 'default' => __('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.'), ] ); $this->addControl( 'testimonial_image', [ 'label' => __('Choose Image'), 'type' => ControlsManager::MEDIA, 'seo' => true, 'dynamic' => [ 'active' => true, ], 'default' => [ 'url' => Utils::getPlaceholderImageSrc(), ], ] ); $this->addControl( 'testimonial_name', [ 'label' => __('Name'), 'type' => ControlsManager::TEXT, 'dynamic' => [ 'active' => true, ], 'default' => 'John Doe', ] ); $this->addControl( 'testimonial_job', [ 'label' => __('Title'), 'type' => ControlsManager::TEXT, 'dynamic' => [ 'active' => true, ], 'default' => 'Designer', ] ); $this->addControl( 'link', [ 'label' => __('Link'), 'type' => ControlsManager::URL, 'dynamic' => [ 'active' => true, ], 'placeholder' => __('https://your-link.com'), ] ); $this->addControl( 'testimonial_image_position', [ 'label' => __('Image Position'), 'type' => ControlsManager::SELECT, 'default' => 'aside', 'options' => [ 'aside' => __('Aside'), 'top' => __('Top'), ], 'condition' => [ 'testimonial_image[url]!' => '', ], 'separator' => 'before', 'style_transfer' => true, ] ); $this->addControl( 'testimonial_alignment', [ 'label' => __('Alignment'), 'type' => ControlsManager::CHOOSE, 'default' => 'center', 'options' => [ 'left' => [ 'title' => __('Left'), 'icon' => 'eicon-text-align-left', ], 'center' => [ 'title' => __('Center'), 'icon' => 'eicon-text-align-center', ], 'right' => [ 'title' => __('Right'), 'icon' => 'eicon-text-align-right', ], ], 'style_transfer' => true, ] ); $this->addControl( 'view', [ 'label' => __('View'), 'type' => ControlsManager::HIDDEN, 'default' => 'traditional', ] ); $this->endControlsSection(); // Content. $this->startControlsSection( 'section_style_testimonial_content', [ 'label' => __('Content'), 'tab' => ControlsManager::TAB_STYLE, ] ); $this->addControl( 'content_content_color', [ 'label' => __('Text Color'), 'type' => ControlsManager::COLOR, 'scheme' => [ 'type' => SchemeColor::getType(), 'value' => SchemeColor::COLOR_3, ], 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-content' => 'color: {{VALUE}};', ], ] ); $this->addGroupControl( GroupControlTypography::getType(), [ 'name' => 'content_typography', 'scheme' => SchemeTypography::TYPOGRAPHY_3, 'selector' => '{{WRAPPER}} .elementor-testimonial-content', ] ); $this->addGroupControl( GroupControlTextStroke::getType(), [ 'name' => 'text_stroke', 'selector' => '{{WRAPPER}} .elementor-testimonial-content', ] ); $this->addGroupControl( GroupControlTextShadow::getType(), [ 'name' => 'content_shadow', 'selector' => '{{WRAPPER}} .elementor-testimonial-content', ] ); $this->endControlsSection(); // Image. $this->startControlsSection( 'section_style_testimonial_image', [ 'label' => __('Image'), 'tab' => ControlsManager::TAB_STYLE, 'condition' => [ 'testimonial_image[url]!' => '', ], ] ); $this->addControl( 'image_size', [ 'label' => __('Image Size'), 'type' => ControlsManager::SLIDER, 'size_units' => ['px'], 'range' => [ 'px' => [ 'min' => 20, 'max' => 200, ], ], 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'width: {{SIZE}}{{UNIT}};height: {{SIZE}}{{UNIT}};', ], ] ); $this->addGroupControl( GroupControlBorder::getType(), [ 'name' => 'image_border', 'selector' => '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img', 'separator' => 'before', ] ); $this->addControl( 'image_border_radius', [ 'label' => __('Border Radius'), 'type' => ControlsManager::DIMENSIONS, 'size_units' => ['px', '%'], 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-wrapper .elementor-testimonial-image img' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], ] ); $this->endControlsSection(); // Name. $this->startControlsSection( 'section_style_testimonial_name', [ 'label' => __('Name'), 'tab' => ControlsManager::TAB_STYLE, ] ); $this->addControl( 'name_text_color', [ 'label' => __('Text Color'), 'type' => ControlsManager::COLOR, 'scheme' => [ 'type' => SchemeColor::getType(), 'value' => SchemeColor::COLOR_1, ], 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-name' => 'color: {{VALUE}};', ], ] ); $this->addGroupControl( GroupControlTypography::getType(), [ 'name' => 'name_typography', 'scheme' => SchemeTypography::TYPOGRAPHY_1, 'selector' => '{{WRAPPER}} .elementor-testimonial-name', ] ); $this->addGroupControl( GroupControlTextShadow::getType(), [ 'name' => 'name_shadow', 'selector' => '{{WRAPPER}} .elementor-testimonial-name', ] ); $this->endControlsSection(); // Job. $this->startControlsSection( 'section_style_testimonial_job', [ 'label' => __('Title'), 'tab' => ControlsManager::TAB_STYLE, ] ); $this->addControl( 'job_text_color', [ 'label' => __('Text Color'), 'type' => ControlsManager::COLOR, 'scheme' => [ 'type' => SchemeColor::getType(), 'value' => SchemeColor::COLOR_2, ], 'selectors' => [ '{{WRAPPER}} .elementor-testimonial-job' => 'color: {{VALUE}};', ], ] ); $this->addGroupControl( GroupControlTypography::getType(), [ 'name' => 'job_typography', 'scheme' => SchemeTypography::TYPOGRAPHY_2, 'selector' => '{{WRAPPER}} .elementor-testimonial-job', ] ); $this->addGroupControl( GroupControlTextShadow::getType(), [ 'name' => 'job_shadow', 'selector' => '{{WRAPPER}} .elementor-testimonial-job', ] ); $this->endControlsSection(); } /** * Render testimonial widget output on the frontend. * * Written in PHP and used to generate the final HTML. * * @since 1.0.0 */ protected function render() { $settings = $this->getSettingsForDisplay(); $this->addRenderAttribute('wrapper', 'class', 'elementor-testimonial-wrapper'); if ($settings['testimonial_alignment']) { $this->addRenderAttribute('wrapper', 'class', 'elementor-testimonial-text-align-' . $settings['testimonial_alignment']); } $this->addRenderAttribute('meta', 'class', 'elementor-testimonial-meta'); if ($settings['testimonial_image']['url']) { $this->addRenderAttribute('meta', 'class', 'elementor-has-image'); } if ($settings['testimonial_image_position']) { $this->addRenderAttribute('meta', 'class', 'elementor-testimonial-image-position-' . $settings['testimonial_image_position']); } $has_image = !empty($settings['testimonial_image']['url']); $has_name = (bool) $settings['testimonial_name']; $has_job = (bool) $settings['testimonial_job']; if (!$settings['testimonial_content'] && !$has_image && !$has_name && !$has_job) { return; } if (!empty($settings['link']['url'])) { $this->addLinkAttributes('link', $settings['link']); } ?>