Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


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());
	}
///////////////////////////////////-----------------------------------------

 

 

 
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.