Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

оптимизация кода для фильтров в getform


Recommended Posts

 
Есть такие две конструкции, которые повторяются в 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
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.