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