2013-06-01 4 views
0

Я пишу Tab для prestashop, в котором перечислены клиенты со страной происхождения. Пока все в порядке, но я бы хотел отфильтровать запрос или таблицу по странам, поэтому я хотел бы добавить что-то вроде: WHERE iso_code = 'IT' Очевидно, престашоп не позволит мне, как я мог это сделать? Это мой код:Prestashop Admin Tab - где clausole не работает

<?php 
include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php'); 
class AdminCustomersCountries extends AdminTab 
{ 
    public function __construct() 
    { 
     $this->table = 'customer'; 
     $this->className = 'Customer'; 
     $this->lang = false; 
     $this->edit = false; 
     $this->view = true; 
     $this->delete = false; 
     $this->deleted = false; 
     $this->requiredDatabase = true; 

     $this->_select = '(SELECT cy.iso_code FROM ps_address AS addr, ps_country AS cy WHERE addr.id_customer=a.id_customer AND addr.id_country=cy.id_country) AS iso_code'; 
     $this->fieldsDisplay = array(
     'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25), 
     'lastname' => array('title' => $this->l('Last Name'), 'width' => 80), 
     'firstname' => array('title' => $this->l('First name'), 'width' => 60), 
     'email' => array('title' => $this->l('E-mail address'), 'width' => 120, 'maxlength' => 19), 
     'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false), 
     'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'callback' => 'printNewsIcon', 'orderby' => false), 
     'iso_code' => array('title' => "Nazione", 'width' => 60, 'orderby'=>false, 'search'=>false)); 

     $this->optionTitle = "Prova"; 
     parent::__construct(); 
    } 

    public function postProcess() 
    { 
     // This function is executed when the Submit button is clicked 
     // Use it to store the value of text fields in the database 

     parent::postProcess(); 
    } 

    public function displayForm($token=NULL) 
    { 
     // This function can be used to create a form with text fields 
    } 
} 

?> 

Здесь, однако, я пытаюсь добавить ИНЕКЕ, без результатов:

<?php 
include_once(PS_ADMIN_DIR.'/../classes/AdminTab.php'); 
class AdminCustomersCountries extends AdminTab 
{ 
    public function __construct() 
    { 
     $this->table = 'customer'; 
     $this->className = 'Customer'; 
     $this->lang = false; 
     $this->edit = false; 
     $this->view = true; 
     $this->delete = false; 
     $this->deleted = false; 
     $this->requiredDatabase = true; 

     $this->_select = '(SELECT cy.iso_code FROM ps_address AS addr, ps_country AS cy WHERE addr.id_customer=a.id_customer AND addr.id_country=cy.id_country AND cy.iso_code='IT') AS iso_code'; 
     $this->fieldsDisplay = array(
     'id_customer' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25), 
     'lastname' => array('title' => $this->l('Last Name'), 'width' => 80), 
     'firstname' => array('title' => $this->l('First name'), 'width' => 60), 
     'email' => array('title' => $this->l('E-mail address'), 'width' => 120, 'maxlength' => 19), 
     'active' => array('title' => $this->l('Enabled'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false), 
     'newsletter' => array('title' => $this->l('News.'), 'width' => 25, 'align' => 'center', 'type' => 'bool', 'callback' => 'printNewsIcon', 'orderby' => false), 
     'iso_code' => array('title' => "Nazione", 'width' => 60, 'orderby'=>false, 'search'=>false)); 

     $this->optionTitle = "Prova"; 
     parent::__construct(); 
    } 

    public function postProcess() 
    { 
     // This function is executed when the Submit button is clicked 
     // Use it to store the value of text fields in the database 

     parent::postProcess(); 
    } 

    public function displayForm($token=NULL) 
    { 
     // This function can be used to create a form with text fields 
    } 
} 

?> 

ответ

0

Линия $this->_select = '(SELECT cy.iso_code FROM ps_address AS addr, ps_country AS cy WHERE addr.id_customer=a.id_customer AND addr.id_country=cy.id_country AND cy.iso_code='IT') AS iso_code'; ищет ИТ с помощью 'IT'.

PHP не будет читать ИТ, потому что апострофы не сбегают. Я думаю, что использование AND cy.iso_code=\'IT\') должно работать.

+1

Извините, но это была ошибка при записи, когда я редактировал второй код. Однако я пробовал с cy.iso_code = \ 'IT \', и он не работает. – user2443268

+0

Хм ... Может быть, это 'SELECT cy.iso_code FROM ps_address'. Насколько я могу судить, вы запрашиваете iso_code из неправильной таблицы. не – Aram

+0

Ммма нет, система показать мне всю таблицу со всеми данными (в том числе iso_code), мне нужен только фильтр с ИНЕКЕМ или с помощью функции Prestashop – user2443268

1

Я не уверен, почему вы используете дополнительный запрос там, но есть еще два варианта, которые предоставляет класс PS AdminTab.

1) Где: Всякий раз, когда вам нужно прибавление где предложение, вы можете написать его, как показано ниже

$this->_where = 'your condition here'; 

2) Соединения: PS также обеспечивает дополнительные соединяет функцию для вас, и вы можете написать их как

$this->_join = 'write down all your joins here like normal queries'; 

Теперь, если вы хотите получить дополнительную информацию из других таблиц с дополнительными проверками (wheres), вы можете сделать это как следует. :

** Примечание. Для таблиц PS дает псевдоним начинаться с символа «a», и если он имеет дополнительные таблицы, такие как языковые таблицы, то он идет с буквой b и т. Д. Таким образом, вы должны знать это и вступить, _select и в _where, где вы должны использовать правильные псевдонимы. **

$this->_select = 'all your additional fields from the tables you need. Those tables should be joined in the _join query.'; 

$this->_join = 'All your joins here with correct aliases, as these aliases are used in _select query and in _where'; 

$this->_where = 'your where clauses here.'; 

Я надеюсь, что это поможет вам исправить ваш запрос.

Спасибо

+0

Я могу использовать пользовательский запрос вместо подзапроса prestashop? Как я могу это сделать? Где я могу найти документацию для запросов preashop tabs? – user2443268

+0

Вы должны написать ключевое слово «ГДЕ». Я спрашиваю, потому что я делаю то же самое, но получаю ошибку: Bad SQL Query. Я добавил эту строку: '$ this -> _ where = 'a.id_customer! = 0';', а также попытался '$ this -> _ where = 'WHERE a.id_customer! = 0';'. Оба не работают – VeeK

+0

Поделитесь полным сообщением об ошибке, так что я могу увидеть запрос sql –

Смежные вопросы