start_controls_section( 'content_section', array( 'label' => __( 'Content', 'developersd-logo-slider' ), ) ); $this->add_control( 'slider_id', array( 'label' => __( 'Select Slider', 'developersd-logo-slider' ), 'type' => \Elementor\Controls_Manager::SELECT, 'options' => $this->get_slider_options(), 'default' => '', ) ); $this->end_controls_section(); $this->start_controls_section( 'settings_section', array( 'label' => __( 'Settings', 'developersd-logo-slider' ), ) ); $this->add_control( 'override_notice', array( 'type' => \Elementor\Controls_Manager::RAW_HTML, 'raw' => __( 'These options override the slider\'s saved settings for this widget instance only. Leave a field at its default to use the slider\'s own setting.', 'developersd-logo-slider' ), 'content_classes' => 'elementor-panel-alert elementor-panel-alert-info', ) ); $this->add_control( 'desktop_slides', array( 'label' => __( 'Desktop Slides', 'developersd-logo-slider' ), 'type' => \Elementor\Controls_Manager::NUMBER, 'min' => 1, 'max' => 20, ) ); $this->add_control( 'tablet_slides', array( 'label' => __( 'Tablet Slides', 'developersd-logo-slider' ), 'type' => \Elementor\Controls_Manager::NUMBER, 'min' => 1, 'max' => 20, ) ); $this->add_control( 'mobile_slides', array( 'label' => __( 'Mobile Slides', 'developersd-logo-slider' ), 'type' => \Elementor\Controls_Manager::NUMBER, 'min' => 1, 'max' => 20, ) ); $this->add_control( 'gap', array( 'label' => __( 'Gap (px)', 'developersd-logo-slider' ), 'type' => \Elementor\Controls_Manager::NUMBER, 'min' => 0, ) ); $this->add_control( 'autoplay', array( 'label' => __( 'Autoplay', 'developersd-logo-slider' ), 'type' => \Elementor\Controls_Manager::SELECT, 'options' => array( '' => __( '— Use slider setting —', 'developersd-logo-slider' ), 'yes' => __( 'Yes', 'developersd-logo-slider' ), 'no' => __( 'No', 'developersd-logo-slider' ), ), 'default' => '', ) ); $this->add_control( 'navigation', array( 'label' => __( 'Navigation Arrows', 'developersd-logo-slider' ), 'type' => \Elementor\Controls_Manager::SELECT, 'options' => array( '' => __( '— Use slider setting —', 'developersd-logo-slider' ), 'yes' => __( 'Show', 'developersd-logo-slider' ), 'no' => __( 'Hide', 'developersd-logo-slider' ), ), 'default' => '', ) ); $this->add_control( 'pagination', array( 'label' => __( 'Pagination Dots', 'developersd-logo-slider' ), 'type' => \Elementor\Controls_Manager::SELECT, 'options' => array( '' => __( '— Use slider setting —', 'developersd-logo-slider' ), 'yes' => __( 'Show', 'developersd-logo-slider' ), 'no' => __( 'Hide', 'developersd-logo-slider' ), ), 'default' => '', ) ); $this->end_controls_section(); } /** * Build the Select control options list of published sliders. * * @return array */ protected function get_slider_options() { $options = array( '' => __( '— Select a slider —', 'developersd-logo-slider' ) ); foreach ( DeveloperSD_LS_Slider::get_all() as $post ) { $options[ $post->ID ] = $post->post_title; } return $options; } /** * Render the widget output on the frontend. */ protected function render() { $settings = $this->get_settings_for_display(); $slider_id = isset( $settings['slider_id'] ) ? absint( $settings['slider_id'] ) : 0; if ( ! $slider_id ) { if ( \Elementor\Plugin::$instance->editor->is_edit_mode() ) { echo '
' . esc_html__( 'Please select a Logo Slider in the widget settings.', 'developersd-logo-slider' ) . '
'; } return; } $overrides = array(); foreach ( array( 'desktop_slides' => 'slides_desktop', 'tablet_slides' => 'slides_tablet', 'mobile_slides' => 'slides_mobile', 'gap' => 'gap', ) as $control => $setting_key ) { if ( '' !== $settings[ $control ] && null !== $settings[ $control ] ) { $overrides[ $setting_key ] = absint( $settings[ $control ] ); } } if ( '' !== $settings['autoplay'] ) { $overrides['autoplay'] = 'yes' === $settings['autoplay']; } if ( '' !== $settings['navigation'] ) { $overrides['nav_show'] = 'yes' === $settings['navigation']; } if ( '' !== $settings['pagination'] ) { $overrides['dots_show'] = 'yes' === $settings['pagination']; } $output = DeveloperSD_LS_Frontend::render( $slider_id, $overrides ); if ( '' === $output && \Elementor\Plugin::$instance->editor->is_edit_mode() ) { $slider = new DeveloperSD_LS_Slider( $slider_id ); $message = $slider->exists() && ! $slider->is_active() ? __( 'This Logo Slider is inactive. Activate it to display it on the page.', 'developersd-logo-slider' ) : __( 'This Logo Slider has no usable logos or is unavailable.', 'developersd-logo-slider' ); echo '