Перейти к содержанию

Рекомендуемые сообщения

Цель темы:
Перевод хранения настроек модуля в oc_setting из множества строк в одну с наименьшими правками модуля.

Оригинал нашего модуля:

Спойлер

Контроллер админки:
 


<?php
// *	@copyright	OPENCART.PRO 2011 - 2015.
// *	@forum	http://forum.opencart.pro
// *	@source		See SOURCE.txt for source and other copyright.
// *	@license	GNU General Public License version 3; see LICENSE.txt

class ControllerModulefilter extends Controller {
	private $error = array();

	public function index() {
		$this->load->language('module/filter');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('setting/setting');

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
			$this->model_setting_setting->editSetting('filter', $this->request->post);

			$this->session->data['success'] = $this->language->get('text_success');

			$this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
		}

		$data['heading_title'] = $this->language->get('heading_title');

		$data['text_edit'] = $this->language->get('text_edit');
		$data['text_enabled'] = $this->language->get('text_enabled');
		$data['text_disabled'] = $this->language->get('text_disabled');

		$data['entry_status'] = $this->language->get('entry_status');

		$data['button_save'] = $this->language->get('button_save');
		$data['button_cancel'] = $this->language->get('button_cancel');

		if (isset($this->error['warning'])) {
			$data['error_warning'] = $this->error['warning'];
		} else {
			$data['error_warning'] = '';
		}

		$data['breadcrumbs'] = array();

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_module'),
			'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('module/filter', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['action'] = $this->url->link('module/filter', 'token=' . $this->session->data['token'], 'SSL');

		$data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');

		if (isset($this->request->post['filter_servis'])) {
			$data['filter_servis'] = $this->request->post['filter_servis'];
		} else {
			$data['filter_servis'] = $this->config->get('filter_servis');
		}

		if (isset($this->request->post['filter_status'])) {
			$data['filter_status'] = $this->request->post['filter_status'];
		} else {
			$data['filter_status'] = $this->config->get('filter_status');
		}

		$data['header'] = $this->load->controller('common/header');
		$data['column_left'] = $this->load->controller('common/column_left');
		$data['footer'] = $this->load->controller('common/footer');

		$this->response->setOutput($this->load->view('module/filter.tpl', $data));
	}

	protected function validate() {
		if (!$this->user->hasPermission('modify', 'module/filter')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		return !$this->error;
	}
}

Шаблон админки:


<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
  <div class="page-header">
    <div class="container-fluid">
      <div class="pull-right">
        <button type="submit" form="form-filter" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
        <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
      <h1><?php echo $heading_title; ?></h1>
      <ul class="breadcrumb">
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
        <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
        <?php } ?>
      </ul>
    </div>
  </div>
  <div class="container-fluid">
    <?php if ($error_warning) { ?>
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
      <button type="button" class="close" data-dismiss="alert">×</button>
    </div>
    <?php } ?>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3>
      </div>
      <div class="panel-body">
        <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-filter" class="form-horizontal">
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-servis"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="filter_servis" id="input-servis" class="form-control">
                <?php if ($filter_servis) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="filter_status" id="input-status" class="form-control">
                <?php if ($filter_status) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
<?php echo $footer; ?>

 


Вариант мой:

Спойлер

Контроллер админки:


<?php
// *	@copyright	OPENCART.PRO 2011 - 2015.
// *	@forum	http://forum.opencart.pro
// *	@source		See SOURCE.txt for source and other copyright.
// *	@license	GNU General Public License version 3; see LICENSE.txt

class ControllerModulefilter extends Controller {
	private $error = array();

	public function index() {
		$this->load->language('module/filter');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('setting/setting');

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {			
			$this->model_setting_setting->editSetting('filter', array('filter' => $this->request->post, 'filter_status' => $this->request->post['filter_status']));

			$this->session->data['success'] = $this->language->get('text_success');

			$this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
		}

		$data['heading_title'] = $this->language->get('heading_title');

		$data['text_edit'] = $this->language->get('text_edit');
		$data['text_enabled'] = $this->language->get('text_enabled');
		$data['text_disabled'] = $this->language->get('text_disabled');

		$data['entry_status'] = $this->language->get('entry_status');

		$data['button_save'] = $this->language->get('button_save');
		$data['button_cancel'] = $this->language->get('button_cancel');

		if (isset($this->error['warning'])) {
			$data['error_warning'] = $this->error['warning'];
		} else {
			$data['error_warning'] = '';
		}

		$data['breadcrumbs'] = array();

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_module'),
			'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('module/filter', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['action'] = $this->url->link('module/filter', 'token=' . $this->session->data['token'], 'SSL');

		$data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');

		$module_info = $this->config->get('filter');
		/* $module_info = $this->model_setting_setting->getSetting('filter');
		if (!empty($module_info['filter'])) {
			$module_info = $module_info['filter'];
		} */
		
		if (isset($this->request->post['filter_servis'])) {
			$data['filter_servis'] = $this->request->post['filter_servis'];
		} elseif (!empty($module_info)) {
			$data['filter_servis'] = $module_info['filter_servis'];
		} else {
			$data['filter_servis'] = '';
		}
		
		if (isset($this->request->post['filter_status'])) {
			$data['filter_status'] = $this->request->post['filter_status'];
		} elseif (!empty($module_info)) {
			$data['filter_status'] = $module_info['filter_status'];
		} else {
			$data['filter_status'] = '';
		}

		$data['header'] = $this->load->controller('common/header');
		$data['column_left'] = $this->load->controller('common/column_left');
		$data['footer'] = $this->load->controller('common/footer');

		$this->response->setOutput($this->load->view('module/filter.tpl', $data));
	}

	protected function validate() {
		if (!$this->user->hasPermission('modify', 'module/filter')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		return !$this->error;
	}
}


Шаблон админки:


<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
  <div class="page-header">
    <div class="container-fluid">
      <div class="pull-right">
        <button type="submit" form="form-filter" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
        <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
      <h1><?php echo $heading_title; ?></h1>
      <ul class="breadcrumb">
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
        <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
        <?php } ?>
      </ul>
    </div>
  </div>
  <div class="container-fluid">
    <?php if ($error_warning) { ?>
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
      <button type="button" class="close" data-dismiss="alert">×</button>
    </div>
    <?php } ?>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3>
      </div>
      <div class="panel-body">
        <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-filter" class="form-horizontal">
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-servis"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="filter_servis" id="input-servis" class="form-control">
                <?php if ($filter_servis) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
		  <div class="form-group">
            <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="filter_status" id="input-status" class="form-control">
                <?php if ($filter_status) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
<?php echo $footer; ?>

 

 

Вариант мой №2 (то, что мне нужно):

Спойлер

"filter_" можно легко удалить.
и заменить
$this->config->get(

на

$this->configGet(

Контроллер админки:


<?php
// *	@copyright	OPENCART.PRO 2011 - 2015.
// *	@forum	http://forum.opencart.pro
// *	@source		See SOURCE.txt for source and other copyright.
// *	@license	GNU General Public License version 3; see LICENSE.txt

class ControllerModulefilter extends Controller {
	private $error = array();

	public function index() {
		$this->load->language('module/filter');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('setting/setting');

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {			
			$this->model_setting_setting->editSetting('filter', array('filter' => $this->request->post, 'filter_status' => $this->request->post['filter_status']));

			$this->session->data['success'] = $this->language->get('text_success');

			$this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
		}

		$data['heading_title'] = $this->language->get('heading_title');

		$data['text_edit'] = $this->language->get('text_edit');
		$data['text_enabled'] = $this->language->get('text_enabled');
		$data['text_disabled'] = $this->language->get('text_disabled');

		$data['entry_status'] = $this->language->get('entry_status');

		$data['button_save'] = $this->language->get('button_save');
		$data['button_cancel'] = $this->language->get('button_cancel');

		if (isset($this->error['warning'])) {
			$data['error_warning'] = $this->error['warning'];
		} else {
			$data['error_warning'] = '';
		}

		$data['breadcrumbs'] = array();

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_module'),
			'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('module/filter', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['action'] = $this->url->link('module/filter', 'token=' . $this->session->data['token'], 'SSL');

		$data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');

		if (isset($this->request->post['filter_servis'])) {
			$data['filter_servis'] = $this->request->post['filter_servis'];
		} else {
			$data['filter_servis'] = $this->configGet('filter_servis');
		}
		
		if (isset($this->request->post['filter_status'])) {
			$data['filter_status'] = $this->request->post['filter_status'];
		} else {
			$data['filter_status'] = $this->configGet('filter_status');
		}

		$data['header'] = $this->load->controller('common/header');
		$data['column_left'] = $this->load->controller('common/column_left');
		$data['footer'] = $this->load->controller('common/footer');

		$this->response->setOutput($this->load->view('module/filter.tpl', $data));
	}

	protected function validate() {
		if (!$this->user->hasPermission('modify', 'module/filter')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		return !$this->error;
	}

	private function configGet($data = array()) {
		if (isset($this->config->get('filter')[$data])) {
			return $this->config->get('filter')[$data];
		}
	}
}


Шаблон админки:


<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
  <div class="page-header">
    <div class="container-fluid">
      <div class="pull-right">
        <button type="submit" form="form-filter" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
        <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
      <h1><?php echo $heading_title; ?></h1>
      <ul class="breadcrumb">
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
        <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
        <?php } ?>
      </ul>
    </div>
  </div>
  <div class="container-fluid">
    <?php if ($error_warning) { ?>
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
      <button type="button" class="close" data-dismiss="alert">×</button>
    </div>
    <?php } ?>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3>
      </div>
      <div class="panel-body">
        <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-filter" class="form-horizontal">
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-servis"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="filter_servis" id="input-servis" class="form-control">
                <?php if ($filter_servis) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
		  <div class="form-group">
            <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="filter_status" id="input-status" class="form-control">
                <?php if ($filter_status) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
<?php echo $footer; ?>

 


Вариант @n3bo:

Спойлер

Контроллер админки:


<?php
// *	@copyright	OPENCART.PRO 2011 - 2015.
// *	@forum	http://forum.opencart.pro
// *	@source		See SOURCE.txt for source and other copyright.
// *	@license	GNU General Public License version 3; see LICENSE.txt

class ControllerModulefilter extends Controller {
	private $error = array();

	public function index() {
		$this->load->language('module/filter');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('setting/setting');

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {			
			$this->model_setting_setting->editSetting('filter', $this->request->post);

			$this->session->data['success'] = $this->language->get('text_success');

			$this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL'));
		}

		$data['heading_title'] = $this->language->get('heading_title');

		$data['text_edit'] = $this->language->get('text_edit');
		$data['text_enabled'] = $this->language->get('text_enabled');
		$data['text_disabled'] = $this->language->get('text_disabled');

		$data['entry_status'] = $this->language->get('entry_status');

		$data['button_save'] = $this->language->get('button_save');
		$data['button_cancel'] = $this->language->get('button_cancel');

		if (isset($this->error['warning'])) {
			$data['error_warning'] = $this->error['warning'];
		} else {
			$data['error_warning'] = '';
		}

		$data['breadcrumbs'] = array();

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_module'),
			'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('module/filter', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['action'] = $this->url->link('module/filter', 'token=' . $this->session->data['token'], 'SSL');

		$data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');
		
		if (isset($this->request->post['filter']['filter_servis'])) {
			$data['filter_servis'] = $this->request->post['filter']['filter_servis'];
		} else {
			$data['filter_servis'] = $this->config->get('filter')['filter_servis'];
		}
		
		if (isset($this->request->post['filter']['filter_status'])) {
			$data['filter_status'] = $this->request->post['filter']['filter_status'];
		} else {
			$data['filter_status'] = $this->config->get('filter')['filter_status'];
		}

		$data['header'] = $this->load->controller('common/header');
		$data['column_left'] = $this->load->controller('common/column_left');
		$data['footer'] = $this->load->controller('common/footer');

		$this->response->setOutput($this->load->view('module/filter.tpl', $data));
	}

	protected function validate() {
		if (!$this->user->hasPermission('modify', 'module/filter')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		return !$this->error;
	}
}

Шаблон админки:


<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
  <div class="page-header">
    <div class="container-fluid">
      <div class="pull-right">
        <button type="submit" form="form-filter" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
        <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
      <h1><?php echo $heading_title; ?></h1>
      <ul class="breadcrumb">
        <?php foreach ($breadcrumbs as $breadcrumb) { ?>
        <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
        <?php } ?>
      </ul>
    </div>
  </div>
  <div class="container-fluid">
    <?php if ($error_warning) { ?>
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
      <button type="button" class="close" data-dismiss="alert">×</button>
    </div>
    <?php } ?>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3>
      </div>
      <div class="panel-body">
        <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-filter" class="form-horizontal">
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-servis"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="filter[filter_servis]" id="input-servis" class="form-control">
                <?php if ($filter_servis) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
		  <div class="form-group">
            <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <select name="filter[filter_status]" id="input-status" class="form-control">
                <?php if ($filter_status) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>
</div>
<?php echo $footer; ?>

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

не понятно... Зачем? что? куда?

 

Если я правильно понял - ну так во вью используйте 1 массив, т.е.:

name="status"  => name="filter['status']"

Изменено пользователем n3bo
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, n3bo сказал:

не понятно... Зачем? что? куда?


При написании модуля, хочу сделать сохранение данных в таблицу oc_setting в одну строку, при этом длинные переменные не хочу такие как "filter_status", хочу сразу "status" как в модулях которые записываются в таблицу oc_module, также и в шаблоне не хочу в поле name="" повторы писать name="filter[status], name="filter[status2]".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
11 минут назад, n3bo сказал:

 

Если я правильно понял - ну так во вью используйте 1 массив, т.е.:

name="status"  => name="filter['status']"

 

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
44 минуты назад, n3bo сказал:

Если я правильно понял - ну так во вью используйте 1 массив, т.е.:

name="status"  => name="filter['status']"


Родил это:

Спойлер

        if ($this->config->get('filter')) {
            foreach ($this->config->get('filter') as $key => $filter) {
                $this->config->set($key, $this->config->get('filter')[$key]);
            }
        }


Спасибо.

В итоге малой кровью перевёл написанный модуль с записью в одну строку в таблице oc_setting.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
15 минут назад, buslikdrev сказал:

Родил это: 

И???

куда SET?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 минут назад, chukcha сказал:

И???

куда SET?


Если вы что-то знаете, говорите, пожалуйста.

SET мне обновил данные в контроллере, чтобы вывести нужные данные в 

Спойлер

if (isset($this->request->post['status'])) {

$data['status'] = $this->request->post['status'];

} else {

$data['status'] = $this->config->get('status');

}


Если этим СЕТом я куда-то ещё данные вношу, говорите, пожалуйста.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, buslikdrev сказал:


Если вы что-то знаете, говорите, пожалуйста.

Я вам ответил, что бы вы посмотрели  что такое метод set
Кроме того... ну.. то уже можно будет наступить на грабли, связанные с архитектурой конфига, а для этого нужно понять как работает гетер и сетер
 

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, chukcha сказал:

Я вам ответил, что бы вы посмотрели  что такое метод set
Кроме того... ну.. то уже можно будет наступить на грабли, связанные с архитектурой конфига, а для этого нужно понять как работает гетер и сетер

Я как понял, есть глобальные данные, и где в других местах применяется, например, $this->config->get('status')
то я своим СЕТом заменяю их тем самым нарушая работу других модулей.

Есть другой вариант подмены? Или придётся мне, как бы я не хотел, переписывать код по-другому.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хватит писать и рожать говно. Я скинул вариант.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
31 минуту назад, n3bo сказал:

Я скинул вариант.

Подробнее его тогда опишите, а то не ясно.

Вот нормальный вариант и массивом не пахнет, если не считать, что массив это $this->config->get('filter').

Спойлер

        $module_info = $this->config->get('filter');
        
        if (isset($this->request->post['status'])) {
            $data['status'] = $this->request->post['status'];
        } else {
            $data['status'] = $module_info['status'];
        }

 

Изменено пользователем buslikdrev

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, buslikdrev сказал:

$module_info

массив?

$this->config->get('filter');  и здесь массив

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 минуты назад, chukcha сказал:

массив?

$this->config->get('filter');  и здесь массив

Да, т.к. в oc_setting в одну строку записал данные модуля изменив пост запрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделайте замену:

name="название параметра"

на:

name="filter['название параметра']"

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, n3bo сказал:

Сделайте замену:

name="название параметра"

на:

name="filter['название параметра']"

 


Не хочу, поэтому и создавал тему, чтобы найти другой способ с наименьшими правками. 
И этот вопрос был решён изначально изменив post запрос в контроллере.

У меня get не работал, но по итогу буду так делать, как в модулях которые заносят данные в oc_module.

Спойлер

        $module_info = $this->config->get('filter');
        
        if (isset($this->request->post['status'])) {
            $data['status'] = $this->request->post['status'];
        } else {
            $data['status'] = $module_info['status'];
        }

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы можете нормально описать ситуацию?)

 

P.s. Боюсь представить какие Вы там модули продаете за ДЕНЬГИ

Изменено пользователем n3bo
  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитайте про json_encode

и посмотрите что делает метод  editSetting когда получает массив:

	public function editSetting($code, $data, $store_id = 0) {
		$this->db->query("DELETE FROM `" . DB_PREFIX . "setting` WHERE store_id = '" . (int)$store_id . "' AND `code` = '" . $this->db->escape($code) . "'");
		foreach ($data as $key => $value) {
			if (substr($key, 0, strlen($code)) == $code) {
				if (!is_array($value)) {
					$this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '" . (int)$store_id . "', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape($value) . "'");
				} else {
					$this->db->query("INSERT INTO " . DB_PREFIX . "setting SET store_id = '" . (int)$store_id . "', `code` = '" . $this->db->escape($code) . "', `key` = '" . $this->db->escape($key) . "', `value` = '" . $this->db->escape(json_encode($value, true)) . "', serialized = '1'");
				}
			}
		}
	}

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 минут назад, n3bo сказал:

Боюсь представить какие Вы там модули продаете за ДЕНЬГИ

Чёткие, строго по стандарту OC.

Если вставить ваш код, то выходит:
Notice: Undefined index: filter in admin\controller\module\filter.php on line 72

Вот как данные записаны:

Спойлер

image.thumb.png.f858a271d098d6c031c2a25626f8df7e.png

 

 

8 минут назад, n3bo сказал:

Вы можете нормально описать ситуацию?)

Извиняюсь за ненормальность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 минуту назад, buslikdrev сказал:

Если вставить ваш код, то выходит:
Notice: Undefined index: filter in admin\controller\module\filter.php on line 72

отлично, теперь что в этой строке?

 

1 минуту назад, buslikdrev сказал:

Чёткие, строго по стандарту OC.

ага....

Изменено пользователем n3bo

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
18 минут назад, n3bo сказал:

отлично, теперь что в этой строке?

Null

А по моему коду массив:
array(1) { ["status"]=> string(1) "1" }


 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в этой строке вместо кода null? может стоит написать код? :mellow:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
46 минут назад, n3bo сказал:

в этой строке вместо кода null? может стоит написать код? 

Вы дали мне код:
 

Спойлер

		$module_info = $this->config->get('filter');
		
		if (isset($this->request->post['status'])) {
			$data['status'] = $this->request->post['filter']['status'];
		} else {
			$data['status'] = $module_info['filter']['status'];
		}

 

Потом его удалили.


Я написал: что там ошибка.


Вы спросили: отлично, теперь что в этой строке?

Мой ответ: null
Код ваш что привёл выше.

Я в теме добавил общий код с моим вариантом:

Спойлер

        $module_info = $this->config->get('filter');
        
        if (isset($this->request->post['status'])) {
            $data['status'] = $this->request->post['status'];
        } else {
            $data['status'] = $module_info['status'];
        }

 


$this->config->get('filter') - это массив т.к. я пост запрос изменил, чтобы шаблон не трогать:

Спойлер

            if (isset($this->request->post)) {
                $this->request->post['filter'] = $this->request->post;
            }

 



Также этот массив могу вывести с помощью: 

Спойлер

		$module_info = $this->model_setting_setting->getSetting('filter');
		if (!empty($module_info['filter'])) {
			$module_info = $module_info['filter'];
		}
		
		if (isset($this->request->post['status'])) {
			$data['status'] = $this->request->post['status'];
		} elseif (!empty($module_info)) {
			$data['status'] = $module_info['status'];
		} else {
			$data['status'] = '';
		}

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
14 минут назад, buslikdrev сказал:

            if (isset($this->request->post)) {                 $this->request->post['filter'] = $this->request->post;             }

Вы понимаете что этим кодом делаете костыльно то, что я Вам говорю? Вы формируете массив filter в контроллере, хотя можно у полей во вью сразу указать..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если хотите - кидайте доступ, я Вам сделаю. Недорого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
30 минут назад, n3bo сказал:

Вы понимаете что этим кодом делаете костыльно то, что я Вам говорю? Вы формируете массив filter в контроллере, хотя можно у полей во вью сразу указать..

Такой массив и есть цель сформировать.
Спасибо за выявление недостатка: "значения удваиваются" - поэтому костыль.

array(2) { ["status"]=> string(1) "1" ["filter"]=> array(1) { ["status"]=> string(1) "1" } }

А вот будет некостыльно:

Спойлер

if (isset($this->request->post)) {
    $this->request->post = array('filter' => $this->request->post);
}

array(1) { ["filter"]=> array(1) { ["status"]=> string(1) "1" } }

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.