Есть икие две конструкции, которые повторяются в getform() в admin\controller\sale\order.php
1-ая для разных значений post -> в data (пример от customer_id:
if (isset($this->request->post['customer_id'])) {
$this->data['customer_id'] = $this->request->post['customer_id'];
} elseif (!empty($order_info)) {
$this->data['customer_id'] = $order_info['customer_id'];
} else {
$this->data['customer_id'] = '';
}
2-ая для разных значений get -> url (пример для filter_order_id:
if (isset($this->request->get['filter_order_id'])) {
$url .= '&filter_order_id=' . $this->request->get['filter_order_id'];
}
1-ую конструкцию я вынес в функцию (тут много доп. фильтров, которые я сам дописывал).
Я заменяю в шаблонном куске кода имя фильтра функцией str_replace, а затем выполняю полулившийся код функцией eval. Ксити надо переписать это все под foreach и перебирать массив фильтров.
public function FltrToUrl() {
$url = '';
$UrlOn = "\$url.=(isset(\$this->request->get['n_m']) ? '&n_m=' . \$this->request->get['n_m'] : '');";
eval(str_replace('n_m', 'filter_order_id', $UrlOn));
eval(str_replace('n_m', 'filter_customer', $UrlOn));
eval(str_replace('n_m', 'filter_order_status_id', $UrlOn));
eval(str_replace('n_m', 'filter_order_statuses', $UrlOn));
eval(str_replace('n_m', 'filter_total', $UrlOn));
eval(str_replace('n_m', 'filter_total_start', $UrlOn));
eval(str_replace('n_m', 'filter_total_end', $UrlOn));
eval(str_replace('n_m', 'comment_true', $UrlOn));
eval(str_replace('n_m', 'filter_comment_true', $UrlOn));
eval(str_replace('n_m', 'filter_comment_true_start', $UrlOn));
eval(str_replace('n_m', 'filter_comment_true_end', $UrlOn));
eval(str_replace('n_m', 'date_spis', $UrlOn));
eval(str_replace('n_m', 'date_spis_start', $UrlOn));
eval(str_replace('n_m', 'date_spis_end', $UrlOn));
eval(str_replace('n_m', 'filter_gotov', $UrlOn));
eval(str_replace('n_m', 'filter_patruled', $UrlOn));
eval(str_replace('n_m', 'filter_date_added', $UrlOn));
eval(str_replace('n_m', 'filter_date_added_start', $UrlOn));
eval(str_replace('n_m', 'filter_date_added_end', $UrlOn));
eval(str_replace('n_m', 'filter_shipping_code', $UrlOn));
eval(str_replace('n_m', 'filter_pay_upd', $UrlOn));
eval(str_replace('n_m', 'filter_stock', $UrlOn));
eval(str_replace('n_m', 'filter_date_modified', $UrlOn));
eval(str_replace('n_m', 'filter_date_modified_start', $UrlOn));
eval(str_replace('n_m', 'filter_date_modified_end', $UrlOn));
eval(str_replace('n_m', 'filter_act', $UrlOn));
eval(str_replace('n_m', 'sort', $UrlOn));
eval(str_replace('n_m', 'order', $UrlOn));
eval(str_replace('n_m', 'page', $UrlOn));
return $url;
}
Соответственно, теперьь в getform() и getlist(), например, я пишу просто $url = $this->FltrToUrl();
Не думаю, что это правильно (ик писать функции через eval и str_replace), но теперьь при добавлении нового фильтра, я правлю для url строку в одном месте, а не в 10-ти (гдело в том, что у меня несколько новых функций и списков, ггде икже наследуются эти параметры).
Хотелось бы что-то подобное для 1-ой конструкции, а лучше что-то потому чтолее правильное. И еещё я не знаю, как это все вынести в отгдельную функцию (ик как не знаю, как оперировать переменными типа $this->data['customer_id'] в другой функции - может все просто?). Пока я сгделал вот ик, что тоже упростило редактуру кода и уменьшило когдачество строк:
$PostToData = "if (isset(\$this->request->post['n9m'])) {\$this->data['n9m']=\$this->request->post['n9m'];} elseif (!empty(\$order_info)) {\$this->data['n9m'] = \$order_info['n9m'];} else {\$this->data['zz'] = 'zz';}";
//ниже stock - это имя фильтра-переменной, а 1 - это значение по умолчанию, если не задано. в потому чтольшинстве случаев это бугдет пустое значение, но ик не везгде
eval(str_replace(Array('n9m', 'zz'), Array('stock', '1'), $PostToData));
//и дное по аналогии строки перелисляют все фильтры, но приходится этот код гдержать внутри getform(), а хотелось бы отгдельную функцию
eval(str_replace(Array('n9m', 'zz'), Array('customer_id', ''), $PostToData));
Спасипотому что за ответы!
рилиию на ocstore 1.5.3