[Помогите] Как в Фотоальбоме сделать сортировку

Тема в разделе "OpenCart", создана пользователем Dimakusch, 22 сен 2017.

  1. Dimakusch

    Dimakusch

    Регистрация:
    4 дек 2015
    Сообщения:
    129
    Симпатии:
    2
    Добрый день! Подскажите как в данном фотоальбоме http://fastfood2.oc-dev.ru/gallery/ можно отсортировать фотографии по дате добавления?

    Спасибо!
     
  2. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    ну если в модули нет данного функционала, - то только самому дописать.
    Сделать на пхп(по образцу категорий в ОС)
    или js написать и динамикой сделать
     
    Dimakusch нравится это.
  3. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Я так думаю надо изменить запрос в модели. Скорее всего там по порядку сортировки, нужно поставить по дате добавления.
    Чтобы сказать точнее, надо смотреть код.
     
    Dimakusch нравится это.
  4. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    Я сомниваюсь, что там есть вообще таблица с датами))
     
    Dimakusch нравится это.
  5. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Если данные в формате json сохраняются, тогда только заносить дату создания каждой картинки в массив и потом уже сортировать. Тип того :ScratchOneSHead:
     
    Dimakusch нравится это.
  6. Dimakusch

    Dimakusch

    Регистрация:
    4 дек 2015
    Сообщения:
    129
    Симпатии:
    2
    Код:
    <?php
    class ModelCatalogGallery extends Model {   
        public function getGallerys() {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "gallery gi WHERE gi.status = 1");
            
            return $query->rows;
        }
        
        public function getGallery($gallery_id) {
            //$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "gallery_image gi LEFT JOIN " . DB_PREFIX . "gallery_image_description gid ON (gi.gallery_image_id  = gid.gallery_image_id) AND gid.language_id = '" . (int)$this->config->get('config_language_id') . "'");
            
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "gallery_image gi LEFT JOIN " . DB_PREFIX . "gallery_image_description gid ON (gi.gallery_image_id  = gid.gallery_image_id) WHERE gi.gallery_id = '" . (int)$gallery_id . "' AND gid.language_id = '" . (int)$this->config->get('config_language_id') . "'");
            
            return $query->rows;
        }
    }
    ?>
    Вот код из модели.
     
  7. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Еще б структуру таблиц DB_PREFIX . gallery и DB_PREFIX . gallery_image увидеть.
    Если в них есть поле типа DATE_ADDED, то к запросу нужно дописать ORDER BY DATE_ADDED.
    Если такого поля нет, значит модуль не фиксирует дату добавления. В таком случае остается обратиться к файлу изображения, выяснить его дату создания и создать массив с этим датами, и уж потом его сортировать.

    Что-то типа того...:Blush:
     
    Dimakusch нравится это.
  8. Dimakusch

    Dimakusch

    Регистрация:
    4 дек 2015
    Сообщения:
    129
    Симпатии:
    2
    Вот что в структуре этих таблиц
    status
    name
    gallery_id

    gallery_image_id
    gallery_id
    name
    link
    image
    Получается простого варианта нет, нужно искать другой выход?
     
  9. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Да уж... Придется повыкаблучиваться...
    Полагаю, в контроллере ищете место где вызывается функция getGallery($gallery_id). По идее она должна вернуть массив картинок, допустим $gallery_images.
    Далее, что в таком роде:
    PHP:
    $gallery_sorted = array();

    foreach (
    $gallery_images as $gallery_image) {
        if (
    filemtime($gallery_image['image'])) {
            
    $gallery_sorted[filemtime($gallery_image['image'])] = $gallery_image;
        }
    }

    ksort($gallery_sorted);
    В результате получаете сортированный массив $gallery_sorted.

    P.S. Местным Гуру, просьба камнями не кидаться - я не волшебник, я только учусь. Если есть ошибки - исправьте.
     
    Dimakusch нравится это.
  10. spy

    spy

    Регистрация:
    15 янв 2013
    Сообщения:
    468
    Симпатии:
    137
    Самое простое, на мой взгляд.
    Это в цыкле галереи добавить счетчик (какой-то $m),
    а во вьюхе в блок каждой галереи выводить в id-шник этот $m
    и дальше js-ом по кнопке отсортировывать (возростание/убывания масива с $m-id-шников).
    И не надо с датами и тд запариватся.
    Ну а если для клиента, то тогда добавлять поле календарь в админке + таблицу дат в бд
    ну и допиливать модель и контролер)) - тогда уж легче/быстрее другой модуль взять
     
    Dimakusch нравится это.
  11. Dimakusch

    Dimakusch

    Регистрация:
    4 дек 2015
    Сообщения:
    129
    Симпатии:
    2
    Спасибо большое, буду пытаться настроить.
     
    Master2KAZ нравится это.