Класс Banners.php

Класс модуля управления баннерами

 

Класс Banners

Предназначен для работы функционала "Баннеры" на сайте

Функция get_banners_images()

Код функции (спойлер)
 
    /*Выбираем все слайды*/
    public function get_banners_images($filter = array()) {
        $limit = 100;  // По умолчанию
        $page = 1;
        $banner_id_filter = '';
        $banners_images_id_filter = '';
        $visible_filter = '';
        $group_by = '';
        $order = 'bi.position DESC';

        if(isset($filter['limit'])) {
            $limit = max(1, intval($filter['limit']));
        }

        if(isset($filter['page'])) {
            $page = max(1, intval($filter['page']));
        }

        $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit);

        if(!empty($filter['id'])) {
            $banners_images_id_filter = $this->db->placehold('AND bi.id in(?@)', (array)$filter['id']);
        }

        if(!empty($filter['banner_id'])) {
            $banner_id_filter = $this->db->placehold('AND bi.banner_id in(?@)', (array)$filter['banner_id']);
        }

        if(isset($filter['visible'])) {
            $visible_filter = $this->db->placehold('AND bi.visible=?', intval($filter['visible']));
        }

        if(!empty($filter['sort'])) {
            switch ($filter['sort']) {
                case 'position':
                    $order = 'bi.position DESC';
                    break;
            }
        }

        $lang_sql = $this->languages->get_query(array('object'=>'banner_image', 'px'=>'bi'));
        $query = "SELECT
                bi.id,
                bi.banner_id,
                bi.image,
                bi.position,
                bi.visible,
                $lang_sql->fields
            FROM __banners_images bi
            $lang_sql->join
            WHERE
                1
                $banners_images_id_filter
                $banner_id_filter
                $visible_filter
            $group_by
            ORDER BY $order
            $sql_limit
        ";

        $this->db->query($query);
        return $this->db->results();
    }

Функция выборки баннеров (слайдов)

Функция принимает аргумент $filter

Параметры которые содержит функция:

  • $filter['limit'] - количество записей, которое нужно выбрать
  • $filter['page'] - страница (позиция) с которой нужно начать выборку записей
  • $filter['id'] - id слайдов, которое нужно выбрать
  • $filter['banner_id'] - id группы баннеров, для которых нужно выбрать слайды
  • $filter['visible'] - фильтр по активности (видимости) баннеров
  • $filter['sort'] - параметр сортировки слайдов. По умолчанию, по порядку добавления

Функция возвращает массив объектов с данными о слайдах


Функция count_banners_images()

Код функции (спойлер)
    /*Подсчитываем количество найденных слайдов*/
    public function count_banners_images($filter = array()) {
        $banner_id_filter = '';
        $banners_images_id_filter = '';
        $visible_filter = '';

        if(!empty($filter['banner_id'])) {
            $banner_id_filter = $this->db->placehold('AND bi.banner_id in(?@)', (array)$filter['banner_id']);
        }

        if(!empty($filter['id'])) {
            $banners_images_id_filter = $this->db->placehold('AND bi.id in(?@)', (array)$filter['id']);
        }

        if(isset($filter['visible'])) {
            $visible_filter = $this->db->placehold('AND bi.visible=?', intval($filter['visible']));
        }

        $query = "SELECT count(distinct bi.id) as count
            FROM __banners_images AS bi
            WHERE
                1
                $banner_id_filter
                $banners_images_id_filter
                $visible_filter
        ";

        $this->db->query($query);
        return $this->db->result('count');
    }

Функция подсчета количества слайдов

Функция принимает один аргумент $filter

Параметры которые содержит функция:

  • $filter['id'] - id слайдов, которое нужно выбрать
  • $filter['banner_id'] - id группы баннеров, для которых нужно выбрать слайды
  • $filter['visible'] - фильтр по активности (видимости) баннеров

Функция возвращает количество (число) записей согласно заданными критериям


Функция get_banners_image()

Код функции (спойлер)
    /*Выбираем конкретный слайд*/
    public function get_banners_image($id) {
        if(!is_int($id)) {
           return false;
        }
        $banner_id_filter = $this->db->placehold("AND bi.id=?", intval($id));

        $lang_sql = $this->languages->get_query(array('object'=>'banner_image', 'px'=>'bi'));
        $query = $this->db->placehold("SELECT
                bi.id,
                bi.banner_id,
                bi.image,
                bi.position,
                bi.visible,
                $lang_sql->fields
            FROM __banners_images bi
            $lang_sql->join
            WHERE
                1
                $banner_id_filter
            LIMIT 1
        ", $id);
        $this->db->query($query);
        $banners_image = $this->db->result();
        return $banners_image;
    }

Функция выборки конкретного слайда

Функция принимает один аргумент $id

Параметры которые содержит функция:

  • $id - id слайда, который нужно выбрать

Возвращает объект с данными о слайде


Функция add_banners_image()

Код функции (спойлер)
    /*Добавление слайда*/
    public function add_banners_image($banners_image) {
        $banners_image = (object)$banners_image;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($banners_image, 'banner_image');

        if($this->db->query("INSERT INTO __banners_images SET ?%", $banners_image)) {
            $id = $this->db->insert_id();
            $this->db->query("UPDATE __banners_images SET position=id WHERE id=?", $id);

            // Если есть описание для перевода. Указываем язык для обновления
            if(!empty($result->description)) {
                $this->languages->action_description($id, $result->description, 'banner_image');
            }
            return $id;
        } else {
            return false;
        }
    }

Функция добавления слайда

Функция принимает аргумент $banners_image

Параметры которые содержит функция:

  • $banners_image - объект с данными о слайде (название, активность) и т.д

Функция возвращает id добавленной записи


Функция update_banners_image()

Код функции (спойлер)
   /*Обновление слайда*/
    public function update_banners_image($id, $banners_image) {
        $banners_image = (object)$banners_image;
        // Проверяем есть ли мультиязычность и забираем описания для перевода
        $result = $this->languages->get_description($banners_image, 'banner_image');

        $query = $this->db->placehold("UPDATE __banners_images SET ?% WHERE id in (?@) LIMIT ?", $banners_image, (array)$id, count((array)$id));
        if($this->db->query($query)) {
            // Если есть описание для перевода. Указываем язык для обновления
            if(!empty($result->description)) {
                $this->languages->action_description($id, $result->description, 'banner_image', $this->languages->lang_id());
            }
            return $id;
        } else {
            return false;
        }
    }

Функция обновления слайда

Функция принимает аргумент $id, $banners_image

Параметры которые содержит функция:

  • $id - $id слайда, который нужно обновить
  • $banners_image - объект с данными о слайде (имя, описание и т.д)

Функция возвращает id обновленной записи


Функция delete_banners_image()

Код функции (спойлер)
  /*Удаление слайда*/
    public function delete_banners_image($id) {
        if(!empty($id)) {
            $this->db->query("SELECT image FROM __banners_images WHERE id=?", intval($id));
            $image = $this->db->result('image');

            $query = $this->db->placehold("DELETE FROM __banners_images WHERE id=? LIMIT 1", intval($id));
            if($this->db->query($query)) {
                if (!empty($image)) {
                    @unlink($this->config->root_dir.$this->config->banners_images_dir.$image);
                }
                $this->db->query("DELETE FROM __lang_banners_images where banner_image_id=?", intval($id));
                return true;
            }
        }
        return false;
    }

Функция удаления слайда

Функция принимает аргумент $id

Параметры которые содержит функция:

  • $id - $id слайда, который нужно удалить

Функция возвращает true в случае успешного удаления


Функция get_banners()

Код функции (спойлер)
    /*Выбираем все группы баннеров*/
    public function get_banners($filter = array()) {
        $visible_filter = '';
        $banners = array();

        if(isset($filter['visible'])) {
            $visible_filter = $this->db->placehold('AND visible = ?', intval($filter['visible']));
        }

        $query = "SELECT * FROM __banners WHERE 1 $visible_filter ORDER BY position";

        $this->db->query($query);

        foreach($this->db->results() as $banner) {
            $banners[$banner->id] = $banner;
        }

        return $banners;
    }

Функции выборки групп баннеров

Функция принимает аргумент $filter

Параметры которые содержит функция:

  • $filter['visible'] - фильтр по активности (видимости) групп баннеров

Функция возвращает массив объектов с данными о группах баннеров


Функция get_banner()

Код функции (спойлер)
    /*Выбираем определенную группу баннеров*/
    public function get_banner($id, $visible = false, $show_filter_array = array()) {
        if (empty($id)) {
            return false;
        }

        $is_visible = '';
        $show_filter = '';

        if($visible) {
            $is_visible = 'AND visible=1';
        }

        if(is_int($id)) {
            $banner_id_filter = $this->db->placehold('AND id=? ', intval($id));
        } else {
            $banner_id_filter = $this->db->placehold('AND group_id=? ', $id);
        }

        if(!empty($show_filter_array)) {
            foreach($show_filter_array as $k=>$sfa) {
                if(empty($sfa)) {
                    unset($show_filter_array[$k]);
                    continue;
                }
                $show_filter_array[$k] = $this->db->placehold($k." regexp '[[:<:]](?)[[:>:]]'", intval($show_filter_array[$k]));
            }
            $show_filter_array[] = "show_all_pages=1";
            $show_filter = 'AND (' . implode(' OR ',$show_filter_array) . ')';
        }

        $query = $this->db->placehold("SELECT * FROM __banners WHERE 1 $banner_id_filter $is_visible $show_filter LIMIT 1");
        $this->db->query($query);
        $banner = $this->db->result();
        return $banner;
    }

Функция выборки группы баннеров

Функция принимает аргумент $id, $visible, $show_filter_array

Параметры которые содержит функция:

  • $id - $id группы баннеров
  • $visible - флаг видимости группы баннеров
  • $show_filter_array - фильтр настроек отображения группы баннеров

Функция возвращает объект с данными о группе баненров


Функция update_banner()

Код функции (спойлер)
   /*Обновляем группу баннеров*/
    public function update_banner($id, $banner) {
        $query = $this->db->placehold("UPDATE __banners SET ?% WHERE id in (?@) LIMIT ?", $banner, (array)$id, count((array)$id));
        if($this->db->query($query)) {
            return $id;
        } else {
            return false;
        }
    }

Функция обновления группы баннеров

Функция принимает аргумент $id, $banner

Параметры которые содержит функция:

  • $id - id записи, которую нужно обновить
  • $banner - объект с данными о группе баннеров (название, видимость и т.д)

Функция возвращает id обновленной записи в случае успеха


Функция add_banner()

Код функции (спойлер)
    /*Добавляем группу баннеров*/
    public function add_banner($banner) {
        $banner = (array) $banner;

        if($this->db->query("INSERT INTO __banners SET ?%", $banner)) {
            $id = $this->db->insert_id();
            $this->db->query("UPDATE __banners SET position=id WHERE id=?", $id);
            return $id;
        } else {
            return false;
        }
    }

Функция добавления группы баннеров

Функция принимает аргумент $banner

Параметры которые содержит функция:

  • $banner - объект с данными о группе баннеров (название, видимость и т.д)

Функция возвращает id добавленной записи в случае успеха


Функция delete_banner()

Код функции (спойлер)
   /*Удаляем группу баннеров*/
    public function delete_banner($id) {
        if(!empty($id)) {
            $this->db->query("SELECT id FROM __banners_images where banner_id=?", intval($id));
            $banners_images_ids = $this->db->results('id');
            if (!empty($banners_images_ids)) {
                foreach ($banners_images_ids as $bi_id) {
                    $this->delete_banners_image($bi_id);
                }
            }

            $query = $this->db->placehold("DELETE FROM __banners WHERE id=? LIMIT 1", intval($id));
            if($this->db->query($query)) {
                return true;
            }
        }
        return false;
    }

Функция удаления группы баннеров

Функция принимает аргумент $id

Параметры которые содержит функция:

  • $id - $id группы, которую нужно удалить

Функция возвращает true в случае успеха