Jump to content
Sign in to follow this  
Kirav

[Решено] Фильтр по первым буквам в модуле

Recommended Posts

Добрый день. У меня есть модуль, который выводит статьи в иерархической структуре (также, как модуль категорий). В нем большое кол-во статей и для пользователя я решил предусмотреть поле, где он бы смог по первым буквам произвести фильтрацию корневого уровня заголовков статей. За основу этого дополнения в существующий модуль я взял статью: https://opencartforum.com/topic/10422-svoi-modul-poiska/ . Но этого к сожалению не хватило, чтобы опция начала работать. Прошу вашей помощи, заранее благодарен.

 

 

В общих чертах я решил реализовать задачу следующим образом: 1) в файле *.tpl разместить текстовый тег <input>, который возьмет запрос от пользователя и передаст в файл контроллера

2) файл контроллера в свою очередь передаст значение переменной в файл модуля

3) файл модуля отфильтрует в случае, если переменная не пустая, заголовки статей, после чего уже отфильтрованные заголовки попадут обратно в файл *.tpl

 

Вью

<div class="box">
  <div class="box-heading"><?php echo $heading_title; ?></div>
  <form action="<?php echo $post_action; ?>" method="post" enctype="multipart/form-data">
    <?php if ($poisk) { ?>
    <input type="text" name="poisk" value="<?php echo $poisk; ?>" />
    <?php } else { ?>
    <input type="text" name="poisk" value="<?php echo 'Введите значение'; ?>" onclick="this.value = '';" onkeydown="this.style.color = '#000000';" />
    <?php } ?>
    <?php foreach($articles as $article) { ?>
<?php if ($article['articles'] == $poisk) ?> value=<?php echo $article['articles']?> > <?php echo $article['articles'] ?>
<?php } ?>
    </form>
  <div class="box-content">
    <div class="box-category">
      <ul>
        <?php foreach ($articles as $article) { ?>
        <li>
          <?php if ($article['article_id'] == $article_id) { ?>
          <a href="<?php echo $article['href']; ?>" class="active"><?php echo $article['name']; ?></a>
          <?php } else { ?>
          <a href="<?php echo $article['href']; ?>"><?php echo $article['name']; ?></a>
          <?php } ?>
          <?php if ($article['children']) { ?>
          <ul>
            <?php foreach ($article['children'] as $child) { ?>
            <li>
              <?php if ($child['article_id'] == $child_id) { ?>
              <a href="<?php echo $child['href']; ?>" class="active"> - <?php echo $child['name']; ?></a>
              <?php } else { ?>
              <a href="<?php echo $child['href']; ?>"> - <?php echo $child['name']; ?></a>
              <?php } ?>
            </li>
            <?php } ?>
          </ul>
          <?php } ?>
        </li>
        <?php } ?>
      </ul>
    </div>
  </div>
</div>

 

 

контроллер

 

<?php
class ControllerModuleArticle extends Controller {
	protected function index($setting) {
		$this->language->load('module/article');

    	$this->data['heading_title'] = $this->language->get('heading_title');

		if (isset($this->request->get['id'])) {
			$parts = explode('_', (string)$this->request->get['id']);
		} else {
			$parts = array();
		}

		if (isset($parts[0])) {
			$this->data['article_id'] = $parts[0];
		} else {
			$this->data['article_id'] = 0;
		}

		if (isset($parts[1])) {
			$this->data['child_id'] = $parts[1];
		} else {
			$this->data['child_id'] = 0;
		}

  		$this->data['post_action'] = $this->url->link('catalog/article');
		$this->load->model('catalog/article');


		$this->data['articles'] = array();

		$articles = $this->model_catalog_article->getArticles(0);

 			    $this->data['articles'] = $articles;
			    $this->data['poisk'] = false;

		if (isset($this->request->get['poisk'])) {
			$this->data['poisk'] = $this->input->get['poisk'];
		} else {
			$this->data['poisk'] = '';
		}

//////////////////////// --------------

 

модель

 

<?php
class ModelCatalogArticle extends Model {
	public function getArticle($article_id) {
		return $this->getArticles((int)$article_id, 'by_id');
	}

	public function getArticles($id = 0, $type = 'by_parent') {

		static $data = null;

		if ($data === null) {
			$data = array();


			$sql = "SELECT * FROM " . DB_PREFIX . "article a LEFT JOIN " . DB_PREFIX . "article_description ad ON (a.article_id = ad.article_id) LEFT JOIN " . DB_PREFIX . "article_to_store a2s ON (a.article_id = a2s.article_id) WHERE ad.language_id = '" . (int)$this->config->get('config_language_id') . "' AND a2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND a.status = '1'";

			if (!empty($data['poisk'])) {
				$sql .= " AND LCASE(ad.name) LIKE '" . $this->db->escape(utf8_strtolower($data['poisk'])) . "%'";
			}
			$sql .= " ORDER BY a.parent_id, a.sort_order, ad.name";

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

			foreach ($query->rows as $row) {
				$data['by_id'][$row['article_id']] = $row;
				$data['by_parent'][$row['parent_id']][] = $row;
			}
        }
        return ((isset($data[$type]) && isset($data[$type][$id])) ? $data[$type][$id] : array());
	}
///////////////////////////////////-----------------------------------------

 

 

 

Share this post


Link to post
Share on other sites

Все, нашел ошибку, проблема решена :)

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  

  • Similar Content

    • By legioner26
      399.00 руб
      Скачать/Купить дополнение


      Сортировка товаров в заказе по категориям с учетом остатков
      Разработан модификатор с сортировкой товаров в заказе по категориям в админ панели, в пользовательской части, в письме заказчику и письме администратора магазина.
      Данный функционал в разы упрощает работу менеджеров в подборе номенклатуры для выставления счетов.
      Так же в админке в заказах добавлена колонка производителя, фото товара и учет остатков по складу с возможностью сохранять выбор.
      Установка:
      Устанавливаете модификатор через "Установка расширений", далее в модификаторах чистим кешь и обновляем.
       
      Добавил legioner26 Добавлено 27.12.2017 Категория Покупки, оформление заказа, корзина Системные требования Сайт разработчика Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Нет Старая цена 800  
    • By legioner26
      Разработан модификатор с сортировкой товаров в заказе по категориям в админ панели, в пользовательской части, в письме заказчику и письме администратора магазина.
      Данный функционал в разы упрощает работу менеджеров в подборе номенклатуры для выставления счетов.
      Так же в админке в заказах добавлена колонка производителя, фото товара и учет остатков по складу с возможностью сохранять выбор.
      Установка:
      Устанавливаете модификатор через "Установка расширений", далее в модификаторах чистим кешь и обновляем.
       
    • By legioner26
      350.00 руб
      Скачать/Купить дополнение


      Склеивание картинок из менеджера изображений
      Разработан модификатор который позволяет склеивать изображения из одиночных картинок прямо из менеджера изображений в админ панели, с автоматическим добавлением. Регистронезависимость расширений файлов (jpg - JPG, png - PNG, jpeg - JPEG).
      После склеивания создается новая картинка имя которой состоит из (имя1-ой_имя2-ой.jpeg)
       
      Установка:
      Устанавливаете модификатор через "Установка расширений", далее в модификаторах чистим кешь и обновляем.
      ИНСТРУКЦИЯ во вложении
       
       
      Добавил legioner26 Добавлено 23.01.2018 Категория Инструменты, утилиты Системные требования Сайт разработчика Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1
      2.0
      1.5.6.4
      1.5.6.3
      1.5.6.2
      1.5.6.1
      1.5.6
      1.5.5.1
      1.5.5
      1.5.4.1
      1.5.3.1 ocStore 2.3
      2.2
      2.1
      1.5.5.1.2
      1.5.5.1.1
      1.5.5.1
      1.5.4.1.2
      1.5.4.1.1
      1.5.4.1
      1.5.3.1
      1.5.2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х
      OcShop 1.5.6.4.х Обращение к серверу разработчика Нет Старая цена 0  
  • 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.