Jump to content
Sign in to follow this  
alone69li

FIX сортировки по полю model в админке на странице товаров

Recommended Posts

Привет всем!
Может кто-нибудь фиксил эту дикую сортировку?

Это мягко говоря странно когда 102 больше чем 10199 ;)

Поделитесь решением. Готов угостить апельсинами на ЯД.:)

img-2020-03-20-16-16-57.png.2d2f245789298ecc3d87af4d24d61cfe.png

Share this post


Link to post
Share on other sites
CAST(p.model AS INT)

 

Share this post


Link to post
Share on other sites
6 часов назад, Otvet сказал:

CAST(p.model AS INT)

 

Большое спасибо за помощь!

Правильно ли я вас понял? ^_^

Нужно это
 

if (!empty($data['filter_model'])) {
   $sql .= " AND p.model LIKE '%" . $this->db->escape($data['filter_model']) . "%'";
}

Заменить на это

if (!empty($data['filter_model'])) {
   $sql .= " AND CAST(p.model AS INT '%" . $this->db->escape($data['filter_model']) . "%')";
}

Простите пожалуйста, SQL не сильная моя сторона.

Share this post


Link to post
Share on other sites

нет

 

после

ORDER

 

Share this post


Link to post
Share on other sites
Posted (edited)
18 часов назад, Otvet сказал:

нет

 

после


ORDER

 

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
	$sql .= " ORDER BY " . $data['sort'];
} else {
	$sql .= " ORDER BY pd.name";
}

Меняю на это и все работает.

if (isset($data['sort']) && in_array($data['sort'], $sort_data) && $data['sort'] != 'p.model') {
	$sql .= " ORDER BY " . $data['sort'];
} elseif ( $data['sort'] == 'p.model' ) {
	$sql .= " ORDER BY CAST(p.model AS INT)";
}else{
	$sql .= " ORDER BY pd.name";
}

Все манипуляции делаю в файле

admin/model/catalog/product.php

В функции 

public function getProducts($data = array()) {

Большое спасибо!
Тему можно пометить как решенную.

 

 

PS. Инструкция для ocmod

<!--  FIX сортировки по полю model в админке на странице товаров  -->
<file path="admin/model/catalog/product.php" error="skip">
  <operation error="skip">
    <search><![CDATA[if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {]]></search>
    <add position="replace" trim="true"><![CDATA[if (isset($data['sort']) && in_array($data['sort'], $sort_data) && $data['sort'] != 'p.model') {]]></add>
  </operation>
  <operation error="skip">
    <search><![CDATA[$sql .= " ORDER BY " . $data['sort'];]]></search>
    <add position="after" trim="true"><![CDATA[
      } elseif ( $data['sort'] == 'p.model' ) {
      $sql .= " ORDER BY CAST(p.model AS INT)";
    ]]></add>
  </operation>
</file>

Может возникнуть ошибка при переносе на хостинг, так как там может использоваться старая версия mysql.

У меня была версия mysql 5.5.62-1 и выскочила фатальная ошибка.

В этом случае необходимо:

$sql .= " ORDER BY CAST(p.model AS INT)";

Сменить на это:

$sql .= " ORDER BY CAST(p.model AS UNSIGNED)";

 

Edited by alone69li

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.