1: | <?php
|
2: | namespace Opencart\Catalog\Controller\Product;
|
3: | |
4: | |
5: | |
6: | |
7: |
|
8: | class Manufacturer extends \Opencart\System\Engine\Controller {
|
9: | |
10: | |
11: |
|
12: | public function index(): void {
|
13: | $this->load->language('product/manufacturer');
|
14: |
|
15: | $this->load->model('catalog/manufacturer');
|
16: |
|
17: | $this->document->setTitle($this->language->get('heading_title'));
|
18: |
|
19: | $data['breadcrumbs'] = [];
|
20: |
|
21: | $data['breadcrumbs'][] = [
|
22: | 'text' => $this->language->get('text_home'),
|
23: | 'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language'))
|
24: | ];
|
25: |
|
26: | $data['breadcrumbs'][] = [
|
27: | 'text' => $this->language->get('text_brand'),
|
28: | 'href' => $this->url->link('product/manufacturer', 'language=' . $this->config->get('config_language'))
|
29: | ];
|
30: |
|
31: | $data['categories'] = [];
|
32: |
|
33: | $results = $this->model_catalog_manufacturer->getManufacturers();
|
34: |
|
35: | foreach ($results as $result) {
|
36: | if (is_numeric(oc_substr($result['name'], 0, 1))) {
|
37: | $key = '0 - 9';
|
38: | } else {
|
39: | $key = oc_substr(oc_strtoupper($result['name']), 0, 1);
|
40: | }
|
41: |
|
42: | if (!isset($data['categories'][$key])) {
|
43: | $data['categories'][$key]['name'] = $key;
|
44: | $data['categories'][$key]['href'] = $this->url->link('product/manufacturer', 'language=' . $this->config->get('config_language'));
|
45: | }
|
46: |
|
47: | $data['categories'][$key]['manufacturer'][] = [
|
48: | 'name' => $result['name'],
|
49: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $result['manufacturer_id'])
|
50: | ];
|
51: | }
|
52: |
|
53: | $data['continue'] = $this->url->link('common/home', 'language=' . $this->config->get('config_language'));
|
54: |
|
55: | $data['column_left'] = $this->load->controller('common/column_left');
|
56: | $data['column_right'] = $this->load->controller('common/column_right');
|
57: | $data['content_top'] = $this->load->controller('common/content_top');
|
58: | $data['content_bottom'] = $this->load->controller('common/content_bottom');
|
59: | $data['footer'] = $this->load->controller('common/footer');
|
60: | $data['header'] = $this->load->controller('common/header');
|
61: |
|
62: | $this->response->setOutput($this->load->view('product/manufacturer_list', $data));
|
63: | }
|
64: |
|
65: | |
66: | |
67: | |
68: | |
69: |
|
70: | public function info(): ?\Opencart\System\Engine\Action {
|
71: | $this->load->language('product/manufacturer');
|
72: |
|
73: | if (isset($this->request->get['manufacturer_id'])) {
|
74: | $manufacturer_id = (int)$this->request->get['manufacturer_id'];
|
75: | } else {
|
76: | $manufacturer_id = 0;
|
77: | }
|
78: |
|
79: | if (isset($this->request->get['sort'])) {
|
80: | $sort = $this->request->get['sort'];
|
81: | } else {
|
82: | $sort = 'p.sort_order';
|
83: | }
|
84: |
|
85: | if (isset($this->request->get['order'])) {
|
86: | $order = $this->request->get['order'];
|
87: | } else {
|
88: | $order = 'ASC';
|
89: | }
|
90: |
|
91: | if (isset($this->request->get['page'])) {
|
92: | $page = (int)$this->request->get['page'];
|
93: | } else {
|
94: | $page = 1;
|
95: | }
|
96: |
|
97: | if (isset($this->request->get['limit']) && (int)$this->request->get['limit']) {
|
98: | $limit = (int)$this->request->get['limit'];
|
99: | } else {
|
100: | $limit = (int)$this->config->get('config_pagination');
|
101: | }
|
102: |
|
103: | $this->load->model('catalog/manufacturer');
|
104: |
|
105: | $manufacturer_info = $this->model_catalog_manufacturer->getManufacturer($manufacturer_id);
|
106: |
|
107: | if ($manufacturer_info) {
|
108: | $this->document->setTitle($manufacturer_info['name']);
|
109: |
|
110: | $data['breadcrumbs'] = [];
|
111: |
|
112: | $data['breadcrumbs'][] = [
|
113: | 'text' => $this->language->get('text_home'),
|
114: | 'href' => $this->url->link('common/home', 'language=' . $this->config->get('config_language'))
|
115: | ];
|
116: |
|
117: | $data['breadcrumbs'][] = [
|
118: | 'text' => $this->language->get('text_brand'),
|
119: | 'href' => $this->url->link('product/manufacturer', 'language=' . $this->config->get('config_language'))
|
120: | ];
|
121: |
|
122: | $url = '';
|
123: |
|
124: | if (isset($this->request->get['sort'])) {
|
125: | $url .= '&sort=' . $this->request->get['sort'];
|
126: | }
|
127: |
|
128: | if (isset($this->request->get['order'])) {
|
129: | $url .= '&order=' . $this->request->get['order'];
|
130: | }
|
131: |
|
132: | if (isset($this->request->get['page'])) {
|
133: | $url .= '&page=' . $this->request->get['page'];
|
134: | }
|
135: |
|
136: | if (isset($this->request->get['limit'])) {
|
137: | $url .= '&limit=' . $this->request->get['limit'];
|
138: | }
|
139: |
|
140: | $data['breadcrumbs'][] = [
|
141: | 'text' => $manufacturer_info['name'],
|
142: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . $url)
|
143: | ];
|
144: |
|
145: | $data['heading_title'] = $manufacturer_info['name'];
|
146: |
|
147: | $data['text_compare'] = sprintf($this->language->get('text_compare'), isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0);
|
148: |
|
149: | $data['compare'] = $this->url->link('product/compare', 'language=' . $this->config->get('config_language'));
|
150: |
|
151: | $data['products'] = [];
|
152: |
|
153: | $filter_data = [
|
154: | 'filter_manufacturer_id' => $manufacturer_id,
|
155: | 'sort' => $sort,
|
156: | 'order' => $order,
|
157: | 'start' => ($page - 1) * $limit,
|
158: | 'limit' => $limit
|
159: | ];
|
160: |
|
161: | $this->load->model('catalog/product');
|
162: | $this->load->model('tool/image');
|
163: |
|
164: | $results = $this->model_catalog_product->getProducts($filter_data);
|
165: |
|
166: | foreach ($results as $result) {
|
167: | $description = trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')));
|
168: |
|
169: | if (oc_strlen($description) > $this->config->get('config_product_description_length')) {
|
170: | $description = oc_substr($description, 0, $this->config->get('config_product_description_length')) . '..';
|
171: | }
|
172: |
|
173: | if ($result['image'] && is_file(DIR_IMAGE . html_entity_decode($result['image'], ENT_QUOTES, 'UTF-8'))) {
|
174: | $image = $result['image'];
|
175: | } else {
|
176: | $image = 'placeholder.png';
|
177: | }
|
178: |
|
179: | if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
|
180: | $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
|
181: | } else {
|
182: | $price = false;
|
183: | }
|
184: |
|
185: | if ((float)$result['special']) {
|
186: | $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
|
187: | } else {
|
188: | $special = false;
|
189: | }
|
190: |
|
191: | if ($this->config->get('config_tax')) {
|
192: | $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
|
193: | } else {
|
194: | $tax = false;
|
195: | }
|
196: |
|
197: | $product_data = [
|
198: | 'product_id' => $result['product_id'],
|
199: | 'thumb' => $this->model_tool_image->resize($image, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')),
|
200: | 'name' => $result['name'],
|
201: | 'description' => $description,
|
202: | 'price' => $price,
|
203: | 'special' => $special,
|
204: | 'tax' => $tax,
|
205: | 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1,
|
206: | 'rating' => $result['rating'],
|
207: | 'href' => $this->url->link('product/product', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $result['manufacturer_id'] . '&product_id=' . $result['product_id'] . $url)
|
208: | ];
|
209: |
|
210: | $data['products'][] = $this->load->controller('product/thumb', $product_data);
|
211: | }
|
212: |
|
213: | $url = '';
|
214: |
|
215: | if (isset($this->request->get['limit'])) {
|
216: | $url .= '&limit=' . $this->request->get['limit'];
|
217: | }
|
218: |
|
219: | $data['sorts'] = [];
|
220: |
|
221: | $data['sorts'][] = [
|
222: | 'text' => $this->language->get('text_default'),
|
223: | 'value' => 'p.sort_order-ASC',
|
224: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=p.sort_order&order=ASC' . $url)
|
225: | ];
|
226: |
|
227: | $data['sorts'][] = [
|
228: | 'text' => $this->language->get('text_name_asc'),
|
229: | 'value' => 'pd.name-ASC',
|
230: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=pd.name&order=ASC' . $url)
|
231: | ];
|
232: |
|
233: | $data['sorts'][] = [
|
234: | 'text' => $this->language->get('text_name_desc'),
|
235: | 'value' => 'pd.name-DESC',
|
236: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=pd.name&order=DESC' . $url)
|
237: | ];
|
238: |
|
239: | $data['sorts'][] = [
|
240: | 'text' => $this->language->get('text_price_asc'),
|
241: | 'value' => 'p.price-ASC',
|
242: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=p.price&order=ASC' . $url)
|
243: | ];
|
244: |
|
245: | $data['sorts'][] = [
|
246: | 'text' => $this->language->get('text_price_desc'),
|
247: | 'value' => 'p.price-DESC',
|
248: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=p.price&order=DESC' . $url)
|
249: | ];
|
250: |
|
251: | if ($this->config->get('config_review_status')) {
|
252: | $data['sorts'][] = [
|
253: | 'text' => $this->language->get('text_rating_desc'),
|
254: | 'value' => 'rating-DESC',
|
255: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=rating&order=DESC' . $url)
|
256: | ];
|
257: |
|
258: | $data['sorts'][] = [
|
259: | 'text' => $this->language->get('text_rating_asc'),
|
260: | 'value' => 'rating-ASC',
|
261: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=rating&order=ASC' . $url)
|
262: | ];
|
263: | }
|
264: |
|
265: | $data['sorts'][] = [
|
266: | 'text' => $this->language->get('text_model_asc'),
|
267: | 'value' => 'p.model-ASC',
|
268: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=p.model&order=ASC' . $url)
|
269: | ];
|
270: |
|
271: | $data['sorts'][] = [
|
272: | 'text' => $this->language->get('text_model_desc'),
|
273: | 'value' => 'p.model-DESC',
|
274: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&sort=p.model&order=DESC' . $url)
|
275: | ];
|
276: |
|
277: | $url = '';
|
278: |
|
279: | if (isset($this->request->get['sort'])) {
|
280: | $url .= '&sort=' . $this->request->get['sort'];
|
281: | }
|
282: |
|
283: | if (isset($this->request->get['order'])) {
|
284: | $url .= '&order=' . $this->request->get['order'];
|
285: | }
|
286: |
|
287: | $data['limits'] = [];
|
288: |
|
289: | $limits = array_unique([$this->config->get('config_pagination'), 25, 50, 75, 100]);
|
290: |
|
291: | sort($limits);
|
292: |
|
293: | foreach ($limits as $value) {
|
294: | $data['limits'][] = [
|
295: | 'text' => $value,
|
296: | 'value' => $value,
|
297: | 'href' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . $url . '&limit=' . $value)
|
298: | ];
|
299: | }
|
300: |
|
301: | $url = '';
|
302: |
|
303: | if (isset($this->request->get['sort'])) {
|
304: | $url .= '&sort=' . $this->request->get['sort'];
|
305: | }
|
306: |
|
307: | if (isset($this->request->get['order'])) {
|
308: | $url .= '&order=' . $this->request->get['order'];
|
309: | }
|
310: |
|
311: | if (isset($this->request->get['limit'])) {
|
312: | $url .= '&limit=' . $this->request->get['limit'];
|
313: | }
|
314: |
|
315: | $product_total = $this->model_catalog_product->getTotalProducts($filter_data);
|
316: |
|
317: | $data['pagination'] = $this->load->controller('common/pagination', [
|
318: | 'total' => $product_total,
|
319: | 'page' => $page,
|
320: | 'limit' => $limit,
|
321: | 'url' => $this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . $url . '&page={page}')
|
322: | ]);
|
323: |
|
324: | $data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($product_total - $limit)) ? $product_total : ((($page - 1) * $limit) + $limit), $product_total, ceil($product_total / $limit));
|
325: |
|
326: |
|
327: | if ($page == 1) {
|
328: | $this->document->addLink($this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id']), 'canonical');
|
329: | } else {
|
330: | $this->document->addLink($this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&page=' . $page), 'canonical');
|
331: | }
|
332: |
|
333: | if ($page > 1) {
|
334: | $this->document->addLink($this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . (($page - 2) ? '&page=' . ($page - 1) : '')), 'prev');
|
335: | }
|
336: |
|
337: | if ($limit && ceil($product_total / $limit) > $page) {
|
338: | $this->document->addLink($this->url->link('product/manufacturer.info', 'language=' . $this->config->get('config_language') . '&manufacturer_id=' . $this->request->get['manufacturer_id'] . '&page=' . ($page + 1)), 'next');
|
339: | }
|
340: |
|
341: | $data['sort'] = $sort;
|
342: | $data['order'] = $order;
|
343: | $data['limit'] = $limit;
|
344: |
|
345: | $data['continue'] = $this->url->link('common/home', 'language=' . $this->config->get('config_language'));
|
346: |
|
347: | $data['column_left'] = $this->load->controller('common/column_left');
|
348: | $data['column_right'] = $this->load->controller('common/column_right');
|
349: | $data['content_top'] = $this->load->controller('common/content_top');
|
350: | $data['content_bottom'] = $this->load->controller('common/content_bottom');
|
351: | $data['footer'] = $this->load->controller('common/footer');
|
352: | $data['header'] = $this->load->controller('common/header');
|
353: |
|
354: | $this->response->setOutput($this->load->view('product/manufacturer_info', $data));
|
355: | } else {
|
356: | return new \Opencart\System\Engine\Action('error/not_found');
|
357: | }
|
358: |
|
359: | return null;
|
360: | }
|
361: | }
|
362: | |