Вопрос Как сделать сортировку регионов и городов в своём порядке, и закрепить крупные города?

fairbug

Гуру форума
Регистрация
1 Май 2013
Сообщения
212
Реакции
69
Кто то реализовывал у себя возможность изменения порядка регионов или городов? по умолчанию они сортируются по алфавиту, хотелось бы в своём порядке, в идеале закрепить крупные города
 

gorsgr

Постоялец
Регистрация
25 Апр 2014
Сообщения
331
Реакции
142
Как идея, сортировать по ID городов. А id прописать заново в базе в порядке увеличения
 

fairbug

Гуру форума
Регистрация
1 Май 2013
Сообщения
212
Реакции
69
товарищ подсказал, спасибо ему.
Решение, добавляем в таблицу _t_region поле INT и там вписываем нужный порядок и в файле /oc-includes/osclass/model/Region.php
PHP:
$this->dao->orderBy('s_name', 'ASC');
меняем на
$this->dao->orderBy('new_column', 'ASC');
и
$this->dao->orderBy('s_name', 'ASC');
на
$this->dao->orderBy('new_column', 'ASC');
 

_kot

BEng
Команда форума
Модератор
Регистрация
16 Ноя 2018
Сообщения
197
Реакции
237
товарищ подсказал, спасибо ему.
Решение, добавляем в таблицу _t_region поле INT и там вписываем нужный порядок и в файле /oc-includes/osclass/model/Region.php
PHP:
$this->dao->orderBy('s_name', 'ASC');
меняем на
$this->dao->orderBy('new_column', 'ASC');
и
$this->dao->orderBy('s_name', 'ASC');
на
$this->dao->orderBy('new_column', 'ASC');

я бы воздержался лезть в ядро. таблицу ты можешь раширять, добавлать и удалять...
ядро - трогать ее не моги :)

1. В папке темы создадим папку model
2. Создадим в этой папке php класс
PHP:
<?php
/**
 * Created by PhpStorm.
 * User: safeacid
 * Date: 3/29/22
 * Time: 11:12 PM
 */

class RegionExtension extends Region
{

    private static $instance;

    public static function newInstance() {
        if( !self::$instance instanceof self ) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    function __construct() {
        parent::__construct();
    }


    public function findByCountry($countryId)
    {
        if(trim($countryId) == '') {
            return array();
        }

        $this->dao->select();
        $this->dao->from($this->getTableName());
        $this->dao->where('fk_c_country_code', $countryId);
        $this->dao->orderBy('new_column', 'ASC'); // ТУТ ТВОЙ ДОПОЛНИТЕЛЬНЫЙ НОВЫЙ СТОЛБИК В ТАБЛИЦЕ БАЗЫ - region
        $result = $this->dao->get();

        if($result == false) {
            return array();
        }

        return $result->result();
    }



}
и унаследуем /oc-includes/osclass/model/Region.php

3. Создадим в этой папке php класс
PHP:
<?php
/**
 * Created by PhpStorm.
 * User: safeacid
 * Date: 3/29/22
 * Time: 11:16 PM
 */

class CityExtension extends City
{

    private static $instance;

    public static function newInstance() {
        if( !self::$instance instanceof self ) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    function __construct() {
        parent::__construct();
    }

    public function findByRegion($regionId)
    {
        if($regionId <= 0) {
            return array();
        }

        $this->dao->select($this->getFields());
        $this->dao->from($this->getTableName());
        $this->dao->where('fk_i_region_id', $regionId);
        $this->dao->orderBy('new_column', 'ASC'); // ТУТ ТВОЙ ДОПОЛНИТЕЛЬНЫЙ НОВЫЙ СТОЛБИК В ТАБЛИЦЕ БАЗЫ - city

        $result = $this->dao->get();

        if( $result == false ) {
            return array();
        }

        return $result->result();
    }

}
и унаследуем /oc-includes/osclass/model/City.php

4. Объявим 2 новых файла в папке темы в файле functions.php
Код:
require_once osc_base_path().'oc-content/themes/delta/model/RegionExtension.php';
require_once osc_base_path().'oc-content/themes/delta/model/CityExtension.php';

5.используем по назначению
PHP:
//regions
$regions = RegionExtension::newInstance()->findByCountry($country);

//cities
$cities = CityExtension::newInstance()->findByRegion($region);

В идеале, лучше написать отдельный плагин, для всяких таких плюшек )
 
Последнее редактирование:
Сверху