@ozansenkal :
Daha önce de bahsettiğim gibi bu işlerde çok acemiyim fakat aşağıdaki kod bloğunda bazı değişiklikler yaptım. Eklediğim cümlecikleri alt alta sıralıyorum
Tamamiyle yeni eklediğim bir satır. Ana kod bloğu içerisinde bu satırın üzerinde bulunan iki satır isim veya modele göre sorgulama yapan cümleciklerdi. Bu satır ile etiketi (tag) de eklemiş olduk.
PHP:
$add .= ' OR LOWER(pt.tag) LIKE "%' . $this->db->escape($part) . '%")';
", pt.tag" <-- Aşağıdaki kod satırına bu kısmı ekledim. SQL sorgusu çalıştığında dönen değerler arasına etiket değerlerini de eklemiş olduk.
PHP:
$sql = 'SELECT pd.product_id, pd.name, p.model, pt.tag FROM ' . DB_PREFIX . 'product_description AS pd ';
Tamamiyle yeni eklediğim bir satır. Etiket değerlerini döndürebilmek için mevcut tablolar ile sorgulanacak tablolar arasına etiketlerin bulunduğu "product_tag" tablosunu da eklemiş olduk.
PHP:
$sql .= 'LEFT JOIN ' . DB_PREFIX . 'product_tag AS pt ON pt.product_id = pd.product_id ';
Tamamiyle yeni eklediğim bir satır. Bahsettiğim gibi php olayında yeniyim fakat bu cümleciğin orada olması gerektiğine eminim. "config_product_tag_id" belki yanlış yazılmış olabilir. Bağlantılı sayfa kodlarını inceleyip (muhtemelen config ile ilgili bir sayfa) kontrol etmek gerekebilir. Fakat sanki doğru gibi.
PHP:
$sql .= ' AND pt.product_tag_id = ' . (int)$this->config->get('config_product_tag_id');
", LOWER(pt.tag) ASC" <-- Cümleciğin sonuna bu kısmı ekledim. "Select" ile başlayan cümleciğe eklediğimizden dolayı sonuçların sıralanması aşamasında buraya da eklememiz gerekiyor gibi geldi. MySQL kurallarını tam olarak bilmiyorum. Gerekmiyor da olabilir. MySQL konusunda deneyimli bir arkadaş doğrusunu ikimize de öğretecektir.
PHP:
$sql .= ' ORDER BY LOWER(pd.name) ASC, LOWER(p.model) ASC, LOWER(pt.tag) ASC';
Bunların dışında, aşağıdaki cümlecikte sanki "name" ve "model" in bulunduğu bölüme "tag"ı da eklemek gerekiyor ama dediğim gibi syntax'ı bilmediğimden dolayı o konuda yardımcı olamıyorum şu an için. Fakat bu aşamadan sonra deneme yanılma yolu ile bulman içten bile değil. Kolay gelsin
PHP:
'name' => htmlspecialchars_decode($values['name'] . ' (' . $values['model'] . ')', ENT_QUOTES),
PHP:
// Generating search
foreach( $parts as $part ) {
$add .= ' AND (LOWER(pd.name) LIKE "%' . $this->db->escape($part) . '%"';
$add .= ' OR LOWER(p.model) LIKE "%' . $this->db->escape($part) . '%")';
$add .= ' OR LOWER(pt.tag) LIKE "%' . $this->db->escape($part) . '%")';
}
$add = substr( $add, 4 );
$sql = 'SELECT pd.product_id, pd.name, p.model, pt.tag FROM ' . DB_PREFIX . 'product_description AS pd ';
$sql .= 'LEFT JOIN ' . DB_PREFIX . 'product AS p ON p.product_id = pd.product_id ';
$sql .= 'LEFT JOIN ' . DB_PREFIX . 'product_to_store AS p2s ON p2s.product_id = pd.product_id ';
$sql .= 'LEFT JOIN ' . DB_PREFIX . 'product_tag AS pt ON pt.product_id = pd.product_id ';
$sql .= 'WHERE ' . $add . ' AND p.status = 1 ';
$sql .= 'AND pd.language_id = ' . (int)$this->config->get('config_language_id');
$sql .= ' AND p2s.store_id = ' . (int)$this->config->get('config_store_id');
$sql .= ' AND pt.product_tag_id = ' . (int)$this->config->get('config_product_tag_id');
$sql .= ' ORDER BY LOWER(pd.name) ASC, LOWER(p.model) ASC, LOWER(pt.tag) ASC';
$sql .= ' LIMIT 15';
$res = $this->db->query( $sql );
if( $res ) {
$data = ( isset($res->rows) ) ? $res->rows : $res->row;
// For the seo url stuff
$basehref = 'product/product&keyword=' . $this->request->get['keyword'] . '&product_id=';
foreach( $data as $key => $values ) {
$data[$key] = array(
'name' => htmlspecialchars_decode($values['name'] . ' (' . $values['model'] . ')', ENT_QUOTES),
saygılarımla,
signon