parent->get_settings_for_display();
$is_load_restapi = $settings['courses_rest'] ?? 0;
$courses_rest_no_load_page = $settings['courses_rest_no_load_page'] ?? 0;
$settings['url_current'] = LP_Helper::getUrlCurrent();
// Merge params filter form url
$settings = array_merge(
$settings,
lp_archive_skeleton_get_args()
);
$html_wrapper_widget = [
'
' => '
',
];
// No load AJAX
if ( 'yes' !== $is_load_restapi || Plugin::$instance->editor->is_edit_mode() ) {
$templateObj = self::render_courses( $settings );
$content = $templateObj->content;
} elseif ( 'yes' === $courses_rest_no_load_page ) {
$callback = [
'class' => get_class( $this ),
'method' => 'render_courses',
];
$content_obj = static::render_courses( $settings );
$settings['html_no_load_ajax_first'] = $content_obj->content;
$content = TemplateAJAX::load_content_via_ajax( $settings, $callback );
} else { // Load AJAX
$callback = [
'class' => get_class( $this ),
'method' => 'render_courses',
];
$content = TemplateAJAX::load_content_via_ajax( $settings, $callback );
}
echo Template::instance()->nest_elements( $html_wrapper_widget, $content );
} catch ( Throwable $e ) {
echo $e->getMessage();
}
}
/**
* Render template list courses with settings param.
*
* @param array $settings
*
* @return stdClass { content: string_html }
* @since 4.2.5.7
* @version 1.0.1
*/
public static function render_courses( array $settings = [] ): stdClass {
$listCoursesTemplate = ListCoursesTemplate::instance();
$skin = $settings['skin'] ?? 'grid';
$courses_limit = $settings['courses_limit'] ?? 0;
$courses_per_page = $settings['courses_per_page'] ?? 8;
$courses_order_by = $settings['order_by'] ?? $settings['courses_order_by_default'] ?? 'post_date';
$total_pages = 0;
$paged = $settings['paged'] ?? 1;
$show_el_sorting = ( $settings['el_sorting'] ?? 'yes' ) === 'yes';
$show_el_result_count = ( $settings['el_result_count'] ?? 'yes' ) === 'yes';
$pagination_type = $settings['pagination_type'] ?? 'number';
$courses_category_ids = $settings['courses_category_ids'] ?? [];
if ( $courses_limit > 0 ) {
if ( $courses_per_page > $courses_limit ) {
$courses_per_page = $courses_limit;
} elseif ( $courses_per_page === 0 ) {
$courses_per_page = $courses_limit;
}
$total_pages = LP_Database::get_total_pages( $courses_per_page, $courses_limit );
}
if ( $courses_per_page === 0 ) {
$courses_per_page = - 1;
}
$filter = new LP_Course_Filter();
$settings['order_by'] = $courses_order_by;
Courses::handle_params_for_query_courses( $filter, $settings );
// Term
$filter->term_ids = array_merge( $filter->term_ids, $courses_category_ids );
// End term
$total_rows = 0;
$filter->limit = $courses_per_page;
$courses = Courses::get_courses( $filter, $total_rows );
$total_pages_result = LP_Database::get_total_pages( $courses_per_page, $total_rows );
if ( $total_pages > 0 ) {
if ( $total_pages_result > $total_pages ) {
if ( $paged === $total_pages && $total_pages > 1 ) {
$number_courses_residual = $courses_limit - $courses_per_page * ( $paged - 1 );
$courses = array_slice( $courses, 0, $number_courses_residual );
}
$total_rows = $courses_limit;
} else {
$total_pages = $total_pages_result;
}
} else {
$total_pages = $total_pages_result;
}
// Handle layout
ob_start();
$data_rs = [
'total_rows' => $total_rows,
'paged' => $paged,
'courses_per_page' => $courses_per_page,
];
$section_top = [
'wrapper' => '',
'el_result_count' => $show_el_result_count ? $listCoursesTemplate->html_courses_page_result( $data_rs ) : '',
'el_sorting' => $show_el_sorting ? $listCoursesTemplate->html_order_by( $courses_order_by ) : '',
'close_wrapper' => '
',
];
echo Template::combine_components( $section_top );
$html_lis = '';
foreach ( $courses as $courseObj ) {
$course = learn_press_get_course( $courseObj->ID );
$html_lis .= static::render_course( $course, $settings );
}
$section_list = [
'wrapper' => sprintf( '', esc_attr( $skin ) ),
'list' => $html_lis,
'wrapper_end' => '
',
];
echo Template::combine_components( $section_list );
$data_pagination = [
'total_pages' => $total_pages,
'type' => $pagination_type,
'base' => add_query_arg( 'paged', '%#%', $settings['url_current'] ?? '' ),
'paged' => (int) ( $settings['paged'] ?? 1 ),
];
echo $listCoursesTemplate->html_pagination( $data_pagination );
$content = new stdClass();
$content->content = ob_get_clean();
return $content;
}
/**
* Render single item course
*
* @param LP_Course $course
* @param array $settings
*
* @return string
*/
public static function render_course( LP_Course $course, array $settings = [] ): string {
$html_item = '';
$singleCourseTemplate = SingleCourseTemplate::instance();
try {
$html_wrapper = [
'' => '',
];
$title = sprintf( '%s', $course->get_permalink(), $course->get_title() );
$section = [
'image' => [ 'text_html' => $singleCourseTemplate->html_image( $course ) ],
'author' => [ 'text_html' => sprintf( '%s
', $course->get_instructor_html() ) ],
'title' => [ 'text_html' => $title ],
'price' => [ 'text_html' => sprintf( '%s
', $singleCourseTemplate->html_price( $course ) ) ],
'button' => [
'text_html' => sprintf(
'',
$course->get_permalink(),
__( 'View More', 'learnpress' )
),
],
];
ob_start();
Template::instance()->print_sections( $section );
$html_item = ob_get_clean();
$html_item = Template::instance()->nest_elements( $html_wrapper, $html_item );
} catch ( Throwable $e ) {
$html_item = $e->getMessage();
}
return $html_item;
}
}