PluginProbe
Yatra – Travel Booking & Tour Operator Software / 3.0.2.6
Yatra – Travel Booking & Tour Operator Software v3.0.2.6
3.0.16 3.0.15 3.0.14 3.0.14.1 3.0.14.2 3.0.12 3.0.13 3.0.11 3.0.10 3.0.9 3.0.8 3.0.7 3.0.6 3.0.5 3.0.5.1 3.0.4 3.0.3 3.0.2.9 3.0.2.7 3.0.2.8 3.0.2.6 trunk 1.0.0 2.0.0 2.0.1 All 84 releases
yatra / templates / partials / single-trip / similar-trips.php

similar-trips.php in Yatra – Travel Booking & Tour Operator Software 3.0.2.6, at templates/partials/single-trip/similar-trips.php

237 lines 14.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 if (!defined('ABSPATH')) {
3 exit;
4 }
5
6 // Similar Trips Section
7 // Expected variables: $trip
8 ?>
9 <section class="yatra-similar-section">
10 <div class="yatra-similar-section-container">
11 <div class="yatra-similar-section-header">
12 <h2 class="yatra-similar-section-title">
13 <?php echo yatra_svg_icon('mountain', 'yatra-similar-section-icon'); ?>
14 <?php echo esc_html__('Similar Adventures', 'yatra'); ?>
15 </h2>
16 <div class="yatra-carousel-nav">
17 <button type="button" class="yatra-carousel-btn yatra-carousel-prev" id="similar-prev" aria-label="<?php echo esc_attr__('Previous', 'yatra'); ?>">
18 <svg width="20" height="20" fill="none" stroke="currentColor" viewBox="0 0 24 24">
19 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7"/>
20 </svg>
21 </button>
22 <button type="button" class="yatra-carousel-btn yatra-carousel-next" id="similar-next" aria-label="<?php echo esc_attr__('Next', 'yatra'); ?>">
23 <svg width="20" height="20" fill="none" stroke="currentColor" viewBox="0 0 24 24">
24 <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"/>
25 </svg>
26 </button>
27 </div>
28 </div>
29 <div class="yatra-carousel-wrapper">
30 <div class="yatra-carousel-track" id="similar-carousel">
31 <?php
32 // Use dynamic similar trips from controller, with fallback to sample data
33 $similar_trips_data = $trip->getSimilarTrips();
34
35 // Only show real trips from database - no dummy data
36
37 foreach ($similar_trips_data as $similar_trip) {
38 // Prepare trip data directly from object properties
39 $title = $similar_trip->title ?? '';
40 $slug = $similar_trip->slug ?? '';
41
42 // Duration
43 $duration_days = (int) ($similar_trip->duration_days ?? 0);
44 $duration_nights = (int) ($similar_trip->duration_nights ?? 0);
45 $duration = [
46 'has_duration' => $duration_days > 0,
47 'formatted' => $duration_nights > 0
48 ? sprintf(_n('%d day %d night', '%d days %d nights', $duration_days, 'yatra'), $duration_days, $duration_nights)
49 : sprintf(_n('%d day', '%d days', $duration_days, 'yatra'), $duration_days)
50 ];
51
52 // Difficulty
53 $difficulty = [
54 'has_difficulty' => !empty($similar_trip->difficulty_level),
55 'level' => $similar_trip->difficulty_level ?? '',
56 'icon' => 'activity'
57 ];
58
59 // Pricing
60 $original_price = (float) ($similar_trip->original_price ?? 0);
61 $sale_price = (float) ($similar_trip->sale_price ?? $original_price);
62 $current_price = $sale_price > 0 ? $sale_price : $original_price;
63 $discount_pct = 0;
64 $has_discount = false;
65
66 if ($original_price > 0 && $sale_price < $original_price) {
67 $discount_pct = round((($original_price - $sale_price) / $original_price) * 100);
68 // Only show discount if percentage is greater than 0
69 $has_discount = $discount_pct > 0;
70 }
71
72 $pricing = [
73 'has_price' => $current_price > 0,
74 'current_price' => yatra_format_price($current_price),
75 'original_price' => $has_discount ? yatra_format_price($original_price) : '',
76 'has_discount' => $has_discount,
77 ];
78
79 $discount = [
80 'has_discount' => $has_discount,
81 'discount_text' => $has_discount ? $discount_pct . '%' : ''
82 ];
83
84 // Image
85 $image_url = $similar_trip->featured_image_url ?? '';
86 if (empty($image_url)) {
87 $image_url = plugins_url('assets/images/trip-placeholder.svg', YATRA_PLUGIN_FILE);
88 }
89 $image = [
90 'url' => $image_url,
91 'alt' => $title
92 ];
93
94 // Permalink
95 $trip_base = \Yatra\Services\SettingsService::getTripBase();
96 $permalink = home_url('/' . $trip_base . '/' . $slug . '/');
97
98 // Empty arrays for now (can be populated later if needed)
99 $destinations = [];
100 $categories = [];
101 $activities = [];
102
103 // Rating
104 $rating = [
105 'average_rating' => 0,
106 'review_count' => 0,
107 'formatted_rating' => '0.0',
108 'has_rating' => false
109 ];
110 ?>
111 <div class="yatra-carousel-item">
112 <div class="yatra-similar-trip-card">
113 <div class="yatra-similar-trip-image">
114 <?php if (!empty($permalink)): ?>
115 <a href="<?php echo esc_url($permalink); ?>" class="yatra-similar-image-link">
116 <img src="<?php echo esc_url($image['url']); ?>" alt="<?php echo esc_attr($image['alt']); ?>">
117 </a>
118 <?php else: ?>
119 <img src="<?php echo esc_url($image['url']); ?>" alt="<?php echo esc_attr($image['alt']); ?>">
120 <?php endif; ?>
121
122 <?php if ($discount['has_discount']): ?>
123 <div class="yatra-similar-discount-badge">
124 <?php echo esc_html($discount['discount_text']); ?> OFF
125 </div>
126 <?php endif; ?>
127
128 <?php if (function_exists('yatra_wishlist_enabled') && yatra_wishlist_enabled()) : ?>
129 <button type="button" class="yatra-favorite-btn yatra-similar-favorite-btn" data-trip-id="<?php echo esc_attr($similar_trip->id); ?>" title="<?php esc_attr_e('Save to wishlist', 'yatra'); ?>">
130 <?php echo yatra_svg_icon('heart', ''); ?>
131 </button>
132 <?php endif; ?>
133
134 <?php if ($difficulty['has_difficulty'] && !empty($difficulty['icon'])): ?>
135 <div class="yatra-similar-difficulty-overlay">
136 <?php echo yatra_svg_icon($difficulty['icon'], 'similar-difficulty-icon'); ?>
137 <?php echo ' ' . esc_html($difficulty['level']); ?>
138 </div>
139 <?php endif; ?>
140 </div>
141
142 <div class="yatra-similar-trip-content">
143 <!-- Destination -->
144 <?php if (!empty($destinations)) : ?>
145 <div class="yatra-similar-destinations">
146 <?php echo yatra_svg_icon('map-pin', 'similar-location-icon'); ?>
147 <?php
148 $destination_names = [];
149 foreach ($destinations as $destination) {
150 if (isset($destination->name)) {
151 $destination_permalink = function_exists('yatra_get_destination_permalink')
152 ? yatra_get_destination_permalink($destination)
153 : '#';
154 $destination_names[] = '<a href="' . esc_url($destination_permalink) . '" class="similar-destination-link">' . esc_html($destination->name) . '</a>';
155 }
156 }
157 echo implode(', ', $destination_names);
158 ?>
159 </div>
160 <?php endif; ?>
161
162 <h3 class="yatra-similar-trip-title">
163 <?php if (!empty($permalink)): ?>
164 <a href="<?php echo esc_url($permalink); ?>" class="yatra-similar-title-link"><?php echo esc_html($title); ?></a>
165 <?php else: ?>
166 <?php echo esc_html($title); ?>
167 <?php endif; ?>
168 </h3>
169
170 <!-- Trip Stats -->
171 <div class="yatra-similar-trip-stats">
172 <?php if ($duration['has_duration']): ?>
173 <div class="yatra-similar-stat">
174 <?php echo yatra_svg_icon('calendar', 'similar-stat-icon'); ?>
175 <span><?php echo esc_html($duration['formatted']); ?></span>
176 </div>
177 <?php endif; ?>
178
179 <?php if (!empty($similar_trip->min_travelers) || !empty($similar_trip->max_travelers)): ?>
180 <div class="yatra-similar-stat">
181 <?php echo yatra_svg_icon('users', 'similar-stat-icon'); ?>
182 <span>
183 <?php
184 $min_travelers = $similar_trip->min_travelers ?? 1;
185 $max_travelers = $similar_trip->max_travelers ?? 20;
186 echo esc_html($min_travelers . '-' . $max_travelers);
187 ?>
188 </span>
189 </div>
190 <?php endif; ?>
191
192 <?php if ($rating['has_rating'] && $rating['average_rating'] > 0): ?>
193 <div class="yatra-similar-stat">
194 <?php echo yatra_svg_icon('star', 'similar-stat-icon'); ?>
195 <span><?php echo esc_html($rating['formatted_rating']); ?></span>
196 </div>
197 <?php endif; ?>
198 </div>
199
200 <!-- Categories -->
201 <?php if (!empty($categories)) : ?>
202 <div class="yatra-similar-categories">
203 <?php foreach (array_slice($categories, 0, 2) as $category) : ?>
204 <a href="<?php echo esc_url(yatra_get_category_permalink($category)); ?>" class="yatra-similar-category-tag">
205 <?php echo esc_html($category->name); ?>
206 </a>
207 <?php endforeach; ?>
208 </div>
209 <?php endif; ?>
210
211 <div class="yatra-similar-trip-footer">
212 <div class="yatra-similar-price">
213 <?php if ($pricing['has_price']): ?>
214 <div class="yatra-similar-trip-price">
215 <span class="yatra-similar-price-label"><?php esc_html_e('From', 'yatra'); ?></span>
216 <span class="yatra-similar-price-amount"><?php echo esc_html($pricing['current_price']); ?></span>
217 <?php if ($pricing['has_discount'] && !empty($pricing['original_price'])): ?>
218 <span class="yatra-similar-original-price"><?php echo esc_html($pricing['original_price']); ?></span>
219 <?php endif; ?>
220 </div>
221 <?php else: ?>
222 <span class="yatra-similar-trip-price yatra-similar-price-contact"><?php esc_html_e('Contact for pricing', 'yatra'); ?></span>
223 <?php endif; ?>
224 </div>
225 <?php if (!empty($permalink)): ?>
226 <a href="<?php echo esc_url($permalink); ?>" class="yatra-similar-view-btn"><?php esc_html_e('View Details', 'yatra'); ?></a>
227 <?php endif; ?>
228 </div>
229 </div>
230 </div>
231 </div>
232 <?php } ?>
233 </div>
234 </div>
235 </div>
236 </section>
237