Bem vindo ao brockdev.com, não seja tímido compartilhe suas duvidas e conhecimento. :D

Arquivo

Abraao Marques Moderador Global
editado May 2014 em PHP
Pessoal, bom dia.

Alguém saberia me dizer qual o arquivo de busca responsável pela busca nativa no Magento? Refiro-me quando você vai buscar um produto numa loja Magento. Gostaria de saber qual o arquivo que executa a query passada.


Obrigado pela ajuda!


Abraão.

Comentários

  • Abraao Marques Moderador Global
    Boa tarde, pessoal!

    Bem, depois de muito vasculhar, achei o arquivo responsável pela busca no magento. Segue o caminho:

    app --> frontend --> seu tema --> default --> template --> catalogsearch --> form.mini.phtml


    Caso alguém tenha a curiosidade, o arquivo em que está o método de busca do Magento:

    app --> core --> Mage --> CatalogSearch --> Model --> Resource --> Fulltext.php



    Na linha 310 você encontra o método:


    public function prepareResult($object, $queryText, $query)
    {
    $adapter = $this->_getWriteAdapter();
    if (!$query->getIsProcessed()) {
    $searchType = $object->getSearchType($query->getStoreId());

    $preparedTerms = Mage::getResourceHelper('catalogsearch')
    ->prepareTerms($queryText, $query->getMaxQueryWords());

    $bind = array();
    $like = array();
    $likeCond = '';
    if ($searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_LIKE
    || $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_COMBINE
    ) {
    $helper = Mage::getResourceHelper('core');
    $words = Mage::helper('core/string')->splitWords($queryText, true, $query->getMaxQueryWords());
    foreach ($words as $word) {
    $like[] = $helper->getCILike('s.data_index', $word, array('position' => 'any'));
    }
    if ($like) {
    $likeCond = '(' . join(' AND ', $like) . ')';
    }
    }
    $mainTableAlias = 's';
    $fields = array(
    'query_id' => new Zend_Db_Expr($query->getId()),
    'product_id',
    );
    $select = $adapter->select()
    ->from(array($mainTableAlias => $this->getMainTable()), $fields)
    ->joinInner(array('e' => $this->getTable('catalog/product')),
    'e.entity_id = s.product_id',
    array())
    ->where($mainTableAlias.'.store_id = ?', (int)$query->getStoreId());

    if ($searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_FULLTEXT
    || $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_COMBINE
    ) {
    $bind[':query'] = implode(' ', $preparedTerms[0]);
    $where = Mage::getResourceHelper('catalogsearch')
    ->chooseFulltext($this->getMainTable(), $mainTableAlias, $select);
    }

    if ($likeCond != '' && $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_COMBINE) {
    $where .= ($where ? ' AND ' : '') . $likeCond;
    } elseif ($likeCond != '' && $searchType == Mage_CatalogSearch_Model_Fulltext::SEARCH_TYPE_LIKE) {
    $select->columns(array('relevance' => new Zend_Db_Expr(0)));
    $where = $likeCond;
    }

    if ($where != '') {
    $select->where($where);
    }

    $sql = $adapter->insertFromSelect($select,
    $this->getTable('catalogsearch/result'),
    array(),
    Varien_Db_Adapter_Interface::INSERT_ON_DUPLICATE);
    $adapter->query($sql, $bind);

    $query->setIsProcessed(1);
    }

    return $this;
    }



    Na linha 330 eu fiz uma pequena modificação. Alterei um parâmetro a consulta SQL de 'OR' para 'AND'


    if ($like) {
    $likeCond = '(' . join(' AND ', $like) . ')';
    }



    Com essa pequena alteração, mais um filtro de categorias e alguns trabalhos em Termos de Pesquisa consegui melhorar a busca no Magento sem instalar módulos para isso.

    Fica aí para quem quiser!

    Lembrando, que se deve ter muito cuidado com alteração em arquivos que estão no core do Magento.


    Um abraço a todos!
  • Jonatan Machado Moderador Global, Administrador
    Ola Abraao Marques
    Que bom que voce achou o arquivo e postou a solução aqui.
    Vai ajudar muita gente.
    Abraço
    Arsenal Web Design.com
    Desenvolvimento de Lojas Virtuais
    Magento | Zend Framework | HTML5 | CSS3 | Blogs
    image
    E-mail: contato@brockdev.com
  • Abraao Marques Moderador Global
    O que eu for aprendendo sobre Magento, irei postando aqui!


    Um abraço a todos!
Entre ou Registre-se para fazer um comentário.