Перейти к содержанию
Kirav

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

Рекомендуемые сообщения

Добрый день. У меня есть модуль, который выводит статьи в иерархической структуре (также, как модуль категорий). В нем большое кол-во статей и для пользователя я решил предусмотреть поле, где он бы смог по первым буквам произвести фильтрацию корневого уровня заголовков статей. За основу этого дополнения в существующий модуль я взял статью: 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());
	}
///////////////////////////////////-----------------------------------------

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От igoryavorsky
      День добрый. 
      Подскажите какой шаблон Opencart выбрать.
      Нужно чтобы: 1) была синхронизация с 1-С 2) можно было разместить 100 000 -150 000 товаров 3) уровней вложенности не менее 5 3) выпадающее меню
    • От whiteblue
      300.00 руб
      Скачать/Купить дополнение


      Подарки Opencart
      Данный модуль предназначен для повышения продаж, предлагая бесплатные подарки при достижении определенных условий.
       
      Демо
      Админка
      gifts/gifts

      Эти условия устанавливаются в админке модуля. Покупатель должен совершить покупку товаров на определённую сумму или больше.
      Также есть возможность выбрать несколько товаров в разных товарных группах. Отличительной особенностью данного модуля
      является то, что клиент может сам выбрать себе подарок из нескольких назначенных вами. При помощи данного модуля вы будете стимулировать покупателей увеличивать сумму чека.
      Примеры использования данного модуля:
      "купи фотоаппарат и получи в подарок карту памяти", "закажи пиццу и получи бутылку пепси в подарок" и т.д.
      Добавил whiteblue Добавлено 18.06.2018 Категория Модули Системные требования Сайт разработчика http://white-blue.com.ua/ Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.1 ocStore 2.3
      2.1 OpenCart.Pro, ocShop  
    • От whiteblue
      Данный модуль предназначен для повышения продаж, предлагая бесплатные подарки при достижении определенных условий.
       
      Демо
      Админка
      gifts/gifts

      Эти условия устанавливаются в админке модуля. Покупатель должен совершить покупку товаров на определённую сумму или больше.
      Также есть возможность выбрать несколько товаров в разных товарных группах. Отличительной особенностью данного модуля
      является то, что клиент может сам выбрать себе подарок из нескольких назначенных вами. При помощи данного модуля вы будете стимулировать покупателей увеличивать сумму чека.
      Примеры использования данного модуля:
      "купи фотоаппарат и получи в подарок карту памяти", "закажи пиццу и получи бутылку пепси в подарок" и т.д.
    • От Maklaosdelay
      300.00 руб
      Скачать/Купить дополнение


      PimPay платежная система на opencart 3.x.x
      Модуль для приема платежей на сайт системой оплат PimPay
       
      Установка:
      1) Зайти в панель управления -> Расширения -> Установка расширений -> загрузить
      2) Зайти в модули -> оплата -> PimPay и активировать
      3) Настроить модуль и принимать платежи =)
       
      Настройка:
      1) Ввести shop id и Secret из личного кабинета PimPay
      2) В личном кабинете PimPay ввести URL адрес обратного вызова магазина (из настроек модуля)
      3) Выбрать статусы заказов после (оплаты, неуспешной оплаты, возврата), нижняя граница и географические зоны на свой выбор
      4) Статус поставить на включено
       
      Прибыльных вам сделок 
      Добавил Maklaosdelay Добавлено 15.12.2018 Категория Платежные системы Системные требования Сайт разработчика Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0 ocStore 3.0 OpenCart.Pro, ocShop Несовместим  
    • От LionHunter
      Добрый день
       
      Ищу верстальщика для выполнения следующей работы:
      Есть интернет-магазин на OcStore 2.3 с установленным модулем Mega Filter Pro. В мобильной версии фильтр отображается только в виде виджета. Так сейчас - http://prntscr.com/lvnt3w 
      Необходимо сделать: 
      1) чтобы кнопка фильтра была в виде кнопки в полосе сортировки страницы. Сделать так - http://prntscr.com/lvnrv5
      2) Изменить визуально полосу сортировки таким образом, чтобы она выглядел точно так же, как на скриншоте в пункте 1, только вместо синего цвета - наш оттенок красного. Всё должно визуально работать и выглядеть как на сайте-примере. Сылку на сайт-пример предоставлю.
      3) Изменения нужно делать только с помощью css-стилей или модификаторов. Прямые правки в файлы шаблона магазина или модулей делать нельзя. 

      Если готовы взяться, напишите, пожалуйста, стоимость и сроки.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.