Рекомендуемые
This commit is contained in:
@@ -156,6 +156,27 @@ class ControllerExtensionModuleFeatured extends Controller {
|
||||
$this->response->setOutput($this->load->view('extension/module/featured', $data));
|
||||
}
|
||||
|
||||
public function random() {
|
||||
$json = array();
|
||||
|
||||
$this->load->model('catalog/product');
|
||||
|
||||
$limit = isset($this->request->get['limit']) ? (int)$this->request->get['limit'] : 5;
|
||||
$exclude = isset($this->request->get['exclude']) ? $this->request->get['exclude'] : array();
|
||||
|
||||
$results = $this->model_catalog_product->getRandomProducts($limit, $exclude);
|
||||
|
||||
foreach ($results as $result) {
|
||||
$json[] = array(
|
||||
'product_id' => $result['product_id'],
|
||||
'name' => html_entity_decode($result['name'], ENT_QUOTES, 'UTF-8')
|
||||
);
|
||||
}
|
||||
|
||||
$this->response->addHeader('Content-Type: application/json');
|
||||
$this->response->setOutput(json_encode($json));
|
||||
}
|
||||
|
||||
protected function validate() {
|
||||
if (!$this->user->hasPermission('modify', 'extension/module/featured')) {
|
||||
$this->error['warning'] = $this->language->get('error_permission');
|
||||
|
||||
@@ -13,11 +13,15 @@ $_['text_edit'] = 'Редактирование';
|
||||
// Entry
|
||||
$_['entry_name'] = 'Название модуля';
|
||||
$_['entry_product'] = 'Товары';
|
||||
$_['entry_random'] = 'Случайные товары';
|
||||
$_['entry_limit'] = 'Лимит';
|
||||
$_['entry_width'] = 'Ширина';
|
||||
$_['entry_height'] = 'Высота';
|
||||
$_['entry_status'] = 'Статус';
|
||||
|
||||
// Button
|
||||
$_['button_random'] = 'Добавить случайные';
|
||||
|
||||
// Help
|
||||
$_['help_product'] = '(Автозаполнение)';
|
||||
|
||||
|
||||
@@ -924,6 +924,20 @@ class ModelCatalogProduct extends Model {
|
||||
return $query->row['total'];
|
||||
}
|
||||
|
||||
public function getRandomProducts($limit = 5, $exclude = array()) {
|
||||
$sql = "SELECT p.product_id, pd.name FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1'";
|
||||
|
||||
if (!empty($exclude)) {
|
||||
$sql .= " AND p.product_id NOT IN (" . implode(',', array_map('intval', $exclude)) . ")";
|
||||
}
|
||||
|
||||
$sql .= " ORDER BY RAND() LIMIT " . (int)$limit;
|
||||
|
||||
$query = $this->db->query($sql);
|
||||
|
||||
return $query->rows;
|
||||
}
|
||||
|
||||
public function getTotalProductsByLayoutId($layout_id) {
|
||||
$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "product_to_layout WHERE layout_id = '" . (int)$layout_id . "'");
|
||||
|
||||
|
||||
@@ -47,6 +47,17 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="input-random">{{ entry_random }}</label>
|
||||
<div class="col-sm-10">
|
||||
<div class="input-group">
|
||||
<input type="number" name="random_count" value="5" placeholder="{{ entry_random }}" id="input-random" class="form-control" min="1" />
|
||||
<span class="input-group-btn">
|
||||
<button type="button" id="button-random" data-toggle="tooltip" title="{{ button_random }}" class="btn btn-primary"><i class="fa fa-random"></i> {{ button_random }}</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-2 control-label" for="input-limit">{{ entry_limit }}</label>
|
||||
<div class="col-sm-10">
|
||||
@@ -123,5 +134,35 @@ $('input[name=\'product_name\']').autocomplete({
|
||||
$('#featured-product').delegate('.fa-minus-circle', 'click', function() {
|
||||
$(this).parent().remove();
|
||||
});
|
||||
|
||||
$('#button-random').on('click', function() {
|
||||
var limit = parseInt($('#input-random').val()) || 5;
|
||||
var exclude = [];
|
||||
|
||||
$('#featured-product input[name=\'product[]\']').each(function() {
|
||||
exclude.push($(this).val());
|
||||
});
|
||||
|
||||
$.ajax({
|
||||
url: 'index.php?route=extension/module/featured/random&user_token={{ user_token }}&limit=' + limit,
|
||||
type: 'GET',
|
||||
dataType: 'json',
|
||||
traditional: true,
|
||||
data: { exclude: exclude },
|
||||
beforeSend: function() {
|
||||
$('#button-random').button('loading');
|
||||
},
|
||||
complete: function() {
|
||||
$('#button-random').button('reset');
|
||||
},
|
||||
success: function(json) {
|
||||
$.each(json, function(i, item) {
|
||||
$('#featured-product' + item['product_id']).remove();
|
||||
$('#featured-product').append('<div id="featured-product' + item['product_id'] + '"><i class="fa fa-minus-circle"></i> ' + item['name'] + '<input type="hidden" name="product[]" value="' + item['product_id'] + '" /></div>');
|
||||
});
|
||||
$('#featured-product div input').before(' <i class="fa fa-hand-grab-o handle"></i> ');
|
||||
}
|
||||
});
|
||||
});
|
||||
//--></script></div>
|
||||
{{ footer }}
|
||||
|
||||
Reference in New Issue
Block a user