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

Копия стандартного модуля - Статьи


Recommended Posts

как вариант использовать готовый модуль

который позволит создавать разделы блога/новостей

Надіслати
Поділитися на інших сайтах

03.06.2022 в 12:49, AlexMax13 сказал:

Подскажите как создать копию

Вы сами ответили себе на вопрос.. берете и копируете и заменяете на свое название

Надіслати
Поділитися на інших сайтах


В 03.06.2022 в 13:46, nikoshot сказав:

Вы сами ответили себе на вопрос.. берете и копируете и заменяете на свое название

 

а можете подсказать какие именно файлы? и как вывести все статьи из этого раздела в виде списка на отдельной странице?

Надіслати
Поділитися на інших сайтах


В сборке ocStore есть блог. к чему все эти лишние телодвижения?

Создайте категорию блога, напихайте в неё статьи и выводите на отдельной странице.

Надіслати
Поділитися на інших сайтах

03.06.2022 в 15:47, AlexMax13 сказал:

а можете подсказать какие именно файлы?

Смотрите что у вас роуте показывает и идете по этому пути catalog/news

делаете точно так же в контройлерах в модели и для вью

и аналогично для админ части...

03.06.2022 в 15:47, AlexMax13 сказал:

и как вывести все статьи из этого раздела в виде списка на отдельной странице?

Это уже через макеты как то 

Надіслати
Поділитися на інших сайтах


03.06.2022 в 12:49, AlexMax13 сказал:

Подскажите как создать копию стандартного раздела Статьи https://prnt.sc/7kXNW5WzYKAr

 

Или возможно уже существует готовая заготовка?

Из коробки. Помимо других готовых решений и функционала самого модуля

Надіслати
Поділитися на інших сайтах

В 03.06.2022 в 16:03, Tom сказав:

В сборке ocStore есть блог. к чему все эти лишние телодвижения?

Создайте категорию блога, напихайте в неё статьи и выводите на отдельной странице.

 

Мне нужен максимально простой раздел для удобного вывода на странице информации по типу вопрос-ответ. Но также хочу сделать его копию и адаптировать под раздел видео отзывов (вывод на одной странице видео-отзывов с возможностью быстро отключить/изменить/удалить или добавить).

Собственно я все сделал благодаря бесплатному модулю 

 

Он мало весит и не нужно ничего кардинально менять. Но мне понадобилась его копия для видео раздела, которую я сделал (прикрепил к посту).

Инструкция по установке если кому надо:
1. Разархивировать
2. Папки admin и catalog загрузить в корень сайта (права на папки 644 папки 755)
3. Импортировать в БД файл ocbq.sql

4. Добавьте приведенный ниже код в column_left.php который находится тут admin/controller/common
 

if ($this->user->hasPermission('access', 'video/post')) {
  $catalog[] = array(
    'name' => $this->language->get('text_blog'),
    'href' => $this->url->link('video/post', 'user_token=' . $this->session->data['user_token'], true),
    'children' => array()
  );
}

 

5. Предоставьте доступ на изменение модуля https://prnt.sc/bsBwl8EFvFpx

 

Собственно все.

 

Но есть проблема с этим модулем в плане SEO URL. Если не добавлять seo url или добавить только на одном языке, например так https://prnt.sc/ch4Jzz7tprka тогда все ок. Но если заполнить seo url на обеих языках https://prnt.sc/ZzEVWZUpqrN9 тогда при попытке зайти на страницу редактирования записи, сайт падает с ошибкой 500. 

Определил я это так - я заполнял все данные кроме SEO URL и тогда мог без проблем удалить или изменить уже существующую запись. Но когда я заполнял SEO URL, тогда добавление записи происходило без проблем, а вот именно редактирование - ошибка 500 при заходе на странице редактирования. Тогда я иду в базу данных и удаляю seo url для нужной записи из нее. Тогда все работает. Самое удивительное что на сайте все отображается как надо.

содержимое контроллера из админки:

Прихований текст
<?php
class ControllerVideoPost extends Controller {
	private $error = array();

	public function index() {
		$this->load->language('video/post');

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

		$this->load->model('video/post');

		$this->getList();
	}

	public function add() {
		$this->load->language('video/post');

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

		$this->load->model('video/post');

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
			$this->model_video_post->addPost($this->request->post);

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

			$url = '';

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}

			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}

			$this->response->redirect($this->url->link('video/post', 'user_token=' . $this->session->data['user_token'] . $url, 'SSL'));
		}

		$this->getForm();
	}

	public function edit() {
		$this->load->language('video/post');

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

		$this->load->model('video/post');

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validateForm()) {
			$this->model_video_post->editPost($this->request->get['post_id'], $this->request->post);

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

			$url = '';

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}

			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}

			$this->response->redirect($this->url->link('video/post', 'user_token=' . $this->session->data['user_token'] . $url, 'SSL'));
		}

		$this->getForm();
	}

	public function delete() {
		$this->load->language('video/post');

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

		$this->load->model('video/post');

		if (isset($this->request->post['selected']) && $this->validateDelete()) {
			foreach ($this->request->post['selected'] as $post_id) {
				$this->model_video_post->deletePost($post_id);
			}

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

			$url = '';

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}

			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}

			$this->response->redirect($this->url->link('video/post', 'user_token=' . $this->session->data['user_token'] . $url, 'SSL'));
		}

		$this->getList();
	}

	protected function getList() {
		if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		} else {
			$sort = 'id.title';
		}

		if (isset($this->request->get['order'])) {
			$order = $this->request->get['order'];
		} else {
			$order = 'ASC';
		}

		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		} else {
			$page = 1;
		}

		$url = '';

		if (isset($this->request->get['sort'])) {
			$url .= '&sort=' . $this->request->get['sort'];
		}

		if (isset($this->request->get['order'])) {
			$url .= '&order=' . $this->request->get['order'];
		}

		if (isset($this->request->get['page'])) {
			$url .= '&page=' . $this->request->get['page'];
		}

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

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

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

		$data['add'] = $this->url->link('video/post/add', 'user_token=' . $this->session->data['user_token'] . $url, 'SSL');
		$data['delete'] = $this->url->link('video/post/delete', 'user_token=' . $this->session->data['user_token'] . $url, 'SSL');

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

		$filter_data = array(
			'sort'  => $sort,
			'order' => $order,
			'start' => ($page - 1) * $this->config->get('config_limit_admin'),
			'limit' => $this->config->get('config_limit_admin')
		);

		$post_total = $this->model_video_post->getTotalPosts();

		$results = $this->model_video_post->getPosts($filter_data);

		foreach ($results as $result) {
			$data['posts'][] = array(
				'post_id' => $result['post_id'],
				'title'          => $result['title'],
				'sort_order'     => $result['sort_order'],
				'edit'           => $this->url->link('video/post/edit', 'user_token=' . $this->session->data['user_token'] . '&post_id=' . $result['post_id'] . $url, 'SSL')
			);
		}

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

		$data['text_list'] = $this->language->get('text_list');
		$data['text_no_results'] = $this->language->get('text_no_results');
		$data['text_confirm'] = $this->language->get('text_confirm');

		$data['column_title'] = $this->language->get('column_title');
		$data['column_sort_order'] = $this->language->get('column_sort_order');
		$data['column_action'] = $this->language->get('column_action');

		$data['button_add'] = $this->language->get('button_add');
		$data['button_edit'] = $this->language->get('button_edit');
		$data['button_delete'] = $this->language->get('button_delete');

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

		if (isset($this->session->data['success'])) {
			$data['success'] = $this->session->data['success'];

			unset($this->session->data['success']);
		} else {
			$data['success'] = '';
		}

		if (isset($this->request->post['selected'])) {
			$data['selected'] = (array)$this->request->post['selected'];
		} else {
			$data['selected'] = array();
		}

		$url = '';

		if ($order == 'ASC') {
			$url .= '&order=DESC';
		} else {
			$url .= '&order=ASC';
		}

		if (isset($this->request->get['page'])) {
			$url .= '&page=' . $this->request->get['page'];
		}

		$data['sort_title'] = $this->url->link('video/post', 'user_token=' . $this->session->data['user_token'] . '&sort=id.title' . $url, 'SSL');
		$data['sort_sort_order'] = $this->url->link('video/post', 'user_token=' . $this->session->data['user_token'] . '&sort=i.sort_order' . $url, 'SSL');

		$url = '';

		if (isset($this->request->get['sort'])) {
			$url .= '&sort=' . $this->request->get['sort'];
		}

		if (isset($this->request->get['order'])) {
			$url .= '&order=' . $this->request->get['order'];
		}

		$pagination = new Pagination();
		$pagination->total = $post_total;
		$pagination->page = $page;
		$pagination->limit = $this->config->get('config_limit_admin');
		$pagination->url = $this->url->link('video/post', 'user_token=' . $this->session->data['user_token'] . $url . '&page={page}', 'SSL');

		$data['pagination'] = $pagination->render();

		$data['results'] = sprintf($this->language->get('text_pagination'), ($post_total) ? (($page - 1) * $this->config->get('config_limit_admin')) + 1 : 0, ((($page - 1) * $this->config->get('config_limit_admin')) > ($post_total - $this->config->get('config_limit_admin'))) ? $post_total : ((($page - 1) * $this->config->get('config_limit_admin')) + $this->config->get('config_limit_admin')), $post_total, ceil($post_total / $this->config->get('config_limit_admin')));

		$data['sort'] = $sort;
		$data['order'] = $order;

		$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('video/post_list', $data));
	}

	protected function getForm() {
		$data['heading_title'] = $this->language->get('heading_title');

		$data['text_form'] = !isset($this->request->get['post_id']) ? $this->language->get('text_add') : $this->language->get('text_edit');
		$data['text_default'] = $this->language->get('text_default');
		$data['text_enabled'] = $this->language->get('text_enabled');
		$data['text_disabled'] = $this->language->get('text_disabled');

		$data['entry_title'] = $this->language->get('entry_title');
		$data['entry_description'] = $this->language->get('entry_description');
        $data['entry_summary'] = $this->language->get('entry_summary');
		$data['entry_meta_title'] = $this->language->get('entry_meta_title');
		$data['entry_meta_description'] = $this->language->get('entry_meta_description');
		$data['entry_meta_keyword'] = $this->language->get('entry_meta_keyword');
		$data['entry_keyword'] = $this->language->get('entry_keyword');
        $data['entry_date'] = $this->language->get('entry_date');
		$data['entry_sort_order'] = $this->language->get('entry_sort_order');
		$data['entry_status'] = $this->language->get('entry_status');
        $data['entry_image'] = $this->language->get('entry_image');

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

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

		$data['tab_general'] = $this->language->get('tab_general');
		$data['tab_data'] = $this->language->get('tab_data');
		$data['tab_image'] = $this->language->get('tab_image');

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

		if (isset($this->error['title'])) {
			$data['error_title'] = $this->error['title'];
		} else {
			$data['error_title'] = array();
		}

		if (isset($this->error['description'])) {
			$data['error_description'] = $this->error['description'];
		} else {
			$data['error_description'] = array();
		}
        
        if (isset($this->error['summary'])) {
			$data['error_summary'] = $this->error['summary'];
		} else {
			$data['error_summary'] = array();
		}

		if (isset($this->error['meta_title'])) {
			$data['error_meta_title'] = $this->error['meta_title'];
		} else {
			$data['error_meta_title'] = array();
		}

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

		$url = '';

		if (isset($this->request->get['sort'])) {
			$url .= '&sort=' . $this->request->get['sort'];
		}

		if (isset($this->request->get['order'])) {
			$url .= '&order=' . $this->request->get['order'];
		}

		if (isset($this->request->get['page'])) {
			$url .= '&page=' . $this->request->get['page'];
		}

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

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

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

		if (!isset($this->request->get['post_id'])) {
			$data['action'] = $this->url->link('video/post/add', 'user_token=' . $this->session->data['user_token'] . $url, 'SSL');
		} else {
			$data['action'] = $this->url->link('video/post/edit', 'user_token=' . $this->session->data['user_token'] . '&post_id=' . $this->request->get['post_id'] . $url, 'SSL');
		}

		$data['cancel'] = $this->url->link('video/post', 'user_token=' . $this->session->data['user_token'] . $url, 'SSL');

		if (isset($this->request->get['post_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) {
			$post_info = $this->model_video_post->getPost($this->request->get['post_id']);
		}

		$data['user_token'] = $this->session->data['user_token'];

		$this->load->model('localisation/language');

		$data['languages'] = $this->model_localisation_language->getLanguages();
        
        $this->load->model('setting/store');

		$data['stores'] = array();
		
		$data['stores'][] = array(
			'store_id' => 0,
			'name'     => $this->language->get('text_default')
		);
		
		$stores = $this->model_setting_store->getStores();

		foreach ($stores as $store) {
			$data['stores'][] = array(
				'store_id' => $store['store_id'],
				'name'     => $store['name']
			);
		}

		if (isset($this->request->post['post_description'])) {
			$data['post_description'] = $this->request->post['post_description'];
		} elseif (isset($this->request->get['post_id'])) {
			$data['post_description'] = $this->model_video_post->getPostDescriptions($this->request->get['post_id']);
		} else {
			$data['post_description'] = array();
		}

		if (isset($this->request->post['post_seo_url'])) {
			$data['post_seo_url'] = $this->request->post['post_seo_url'];
		} elseif (isset($this->request->get['post_id'])) {
			$data['post_seo_url'] = $this->model_video_post->getPostSeoUrls($this->request->get['post_id']);
		} else {
			$data['post_seo_url'] = array();
		}
        
		if (isset($this->request->post['date'])) {
			$data['date'] = $this->request->post['date'];
		} elseif (!empty($post_info)) {
			$data['date'] = ($post_info['date'] != '0000-00-00') ? $post_info['date'] : '';
		} else {
			$data['date'] = '0000-00-00';
		}

		if (isset($this->request->post['status'])) {
			$data['status'] = $this->request->post['status'];
		} elseif (!empty($post_info)) {
			$data['status'] = $post_info['status'];
		} else {
			$data['status'] = true;
		}

		if (isset($this->request->post['sort_order'])) {
			$data['sort_order'] = $this->request->post['sort_order'];
		} elseif (!empty($post_info)) {
			$data['sort_order'] = $post_info['sort_order'];
		} else {
			$data['sort_order'] = '';
		}
        
        // Images
        $this->load->model('tool/image');
		if (isset($this->request->post['post_image'])) {
			$post_images = $this->request->post['post_image'];
		} elseif (isset($this->request->get['post_id'])) {
			$post_images = $this->model_video_post->getPostImages($this->request->get['post_id']);
		} else {
			$post_images = array();
		}

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

		foreach ($post_images as $post_image) {
			if (is_file(DIR_IMAGE . $post_image['image'])) {
				$image = $post_image['image'];
				$thumb = $post_image['image'];
			} else {
				$image = '';
				$thumb = 'no_image.png';
			}

			$data['post_images'][] = array(
				'image'      => $image,
				'thumb'      => $this->model_tool_image->resize($thumb, 100, 100),
				'sort_order' => $post_image['sort_order']
			);
		}
        
        $data['placeholder'] = $this->model_tool_image->resize('no_image.png', 100, 100);

		$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('video/post_form', $data));
	}

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

		foreach ($this->request->post['post_description'] as $language_id => $value) {
			if ((utf8_strlen($value['title']) < 3) || (utf8_strlen($value['title']) > 64)) {
				$this->error['title'][$language_id] = $this->language->get('error_title');
			}

			if (utf8_strlen($value['description']) < 3) {
				$this->error['description'][$language_id] = $this->language->get('error_description');
			}
            
            if (utf8_strlen($value['summary']) < 3) {
				$this->error['summary'][$language_id] = $this->language->get('error_summary');
			}

			if ((utf8_strlen($value['meta_title']) < 3) || (utf8_strlen($value['meta_title']) > 255)) {
				$this->error['meta_title'][$language_id] = $this->language->get('error_meta_title');
			}
		}

		if ($this->request->post['post_seo_url']) {
			$this->load->model('design/seo_url');
			
			foreach ($this->request->post['post_seo_url'] as $store_id => $language) {
				foreach ($language as $language_id => $keyword) {
					if (trim($keyword)) {
						if (count(array_keys($language, $keyword)) > 1) {
							$this->error['keyword'][$store_id][$language_id] = $this->language->get('error_unique');
						}						
						
						$seo_urls = $this->model_design_seo_url->getSeoUrlsByKeyword($keyword);
						
						foreach ($seo_urls as $seo_url) {
							if (($seo_url['store_id'] == $store_id) && (!isset($this->request->get['post_id']) || ($seo_url['query'] != 'post_id=' . $this->request->get['post_id']))) {
								$this->error['keyword'][$store_id][$language_id] = $this->language->get('error_keyword');
							}
						}
					}
				}
			}
		}

		if ($this->error && !isset($this->error['warning'])) {
			$this->error['warning'] = $this->language->get('error_warning');
		}

		return !$this->error;
	}

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

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

		foreach ($this->request->post['selected'] as $post_id) {
			if ($this->config->get('config_account_id') == $post_id) {
				$this->error['warning'] = $this->language->get('error_account');
			}

			if ($this->config->get('config_checkout_id') == $post_id) {
				$this->error['warning'] = $this->language->get('error_checkout');
			}

			if ($this->config->get('config_affiliate_id') == $post_id) {
				$this->error['warning'] = $this->language->get('error_affiliate');
			}

			if ($this->config->get('config_return_id') == $post_id) {
				$this->error['warning'] = $this->language->get('error_return');
			}
		}

		return !$this->error;
	}
}

 

 

Содержимое модели из админки:

Прихований текст
<?php
class ModelVideoPost extends Model {
	public function addPost($data) {
		//$this->event->trigger('pre.admin.post.add', $data);

		$this->db->query("INSERT INTO " . DB_PREFIX . "pvideo SET sort_order = '" . (int)$data['sort_order'] . "', date = '" . $this->db->escape($data['date']) . "', status = '" . (int)$data['status'] . "'");

		$post_id = $this->db->getLastId();

		foreach ($data['post_description'] as $language_id => $value) {
			$this->db->query("INSERT INTO " . DB_PREFIX . "pvideo_description SET post_id = '" . (int)$post_id . "', language_id = '" . (int)$language_id . "', title = '" . $this->db->escape($value['title']) . "', description = '" . $this->db->escape($value['description']) . "', summary = '" . $this->db->escape($value['summary']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
		}

		// SEO URL
		if (isset($data['post_seo_url'])) {
			foreach ($data['post_seo_url'] as $store_id => $language) {
				foreach ($language as $language_id => $keyword) {
					if (trim($keyword)) {
						$this->db->query("INSERT INTO " . DB_PREFIX . "seo_url SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'post_id=" . (int)$post_id . "', keyword = '" . $this->db->escape($keyword) . "'");
					}
				}
			}
		}
        
        if (isset($data['post_image'])) {
			foreach ($data['post_image'] as $post_image) {
				$this->db->query("INSERT INTO " . DB_PREFIX . "pvideo_image SET post_id = '" . (int)$post_id . "', image = '" . $this->db->escape($post_image['image']) . "', sort_order = '" . (int)$post_image['sort_order'] . "'");
			}
		}
        
		$this->cache->delete('post');

		//$this->event->trigger('post.admin.post.add', $post_id);
        
		return $post_id;
	}

	public function editPost($post_id, $data) {
		//$this->event->trigger('pre.admin.post.edit', $data);

		$this->db->query("UPDATE " . DB_PREFIX . "pvideo SET sort_order = '" . (int)$data['sort_order'] . "', date = '" . $this->db->escape($data['date']) . "', status = '" . (int)$data['status'] . "' WHERE post_id = '" . (int)$post_id . "'");

		$this->db->query("DELETE FROM " . DB_PREFIX . "pvideo_description WHERE post_id = '" . (int)$post_id . "'");

		foreach ($data['post_description'] as $language_id => $value) {
			$this->db->query("INSERT INTO " . DB_PREFIX . "pvideo_description SET post_id = '" . (int)$post_id . "', language_id = '" . (int)$language_id . "', title = '" . $this->db->escape($value['title']) . "', description = '" . $this->db->escape($value['description']) . "', summary = '" . $this->db->escape($value['summary']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
		}

		$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'post_id=" . (int)$post_id . "'");

		$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'post_id=" . (int)$post_id . "'");

		if (isset($data['post_seo_url'])) {
			foreach ($data['post_seo_url'] as $store_id => $language) {
				foreach ($language as $language_id => $keyword) {
					if (trim($keyword)) {
						$this->db->query("INSERT INTO `" . DB_PREFIX . "seo_url` SET store_id = '" . (int)$store_id . "', language_id = '" . (int)$language_id . "', query = 'post_id=" . (int)$post_id . "', keyword = '" . $this->db->escape($keyword) . "'");
					}
				}
			}
		}
        
        $this->db->query("DELETE FROM " . DB_PREFIX . "pvideo_image WHERE post_id = '" . (int)$post_id . "'");

		if (isset($data['post_image'])) {
			foreach ($data['post_image'] as $post_image) {
				$this->db->query("INSERT INTO " . DB_PREFIX . "pvideo_image SET post_id = '" . (int)$post_id . "', image = '" . $this->db->escape($post_image['image']) . "', sort_order = '" . (int)$post_image['sort_order'] . "'");
			}
		}

		$this->cache->delete('post');

		//$this->event->trigger('post.admin.post.edit', $post_id);
	}

	public function deletePost($post_id) {
		//$this->event->trigger('pre.admin.post.delete', $post_id);

		$this->db->query("DELETE FROM " . DB_PREFIX . "pvideo WHERE post_id = '" . (int)$post_id . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "pvideo_description WHERE post_id = '" . (int)$post_id . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'post_id=" . (int)$post_id . "'");
        $this->db->query("DELETE FROM " . DB_PREFIX . "pvideo_image WHERE post_id = '" . (int)$post_id . "'");

		$this->cache->delete('post');

		//$this->event->trigger('post.admin.post.delete', $post_id);
	}

	public function getPost($post_id) {
		$query = $this->db->query("SELECT DISTINCT *, (SELECT keyword FROM " . DB_PREFIX . "seo_url WHERE query = 'post_id=" . (int)$post_id . "') AS keyword FROM " . DB_PREFIX . "pvideo WHERE post_id = '" . (int)$post_id . "'");

		return $query->row;
	}

	public function getPosts($data = array()) {
		if ($data) {
			$sql = "SELECT * FROM " . DB_PREFIX . "pvideo i LEFT JOIN " . DB_PREFIX . "pvideo_description id ON (i.post_id = id.post_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "'";

			$sort_data = array(
				'id.title',
				'i.sort_order'
			);

			if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
				$sql .= " ORDER BY " . $data['sort'];
			} else {
				$sql .= " ORDER BY id.title";
			}

			if (isset($data['order']) && ($data['order'] == 'DESC')) {
				$sql .= " DESC";
			} else {
				$sql .= " ASC";
			}

			if (isset($data['start']) || isset($data['limit'])) {
				if ($data['start'] < 0) {
					$data['start'] = 0;
				}

				if ($data['limit'] < 1) {
					$data['limit'] = 20;
				}

				$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
			}

			$query = $this->db->query($sql);

			return $query->rows;
		} else {
			$post_data = $this->cache->get('post.' . (int)$this->config->get('config_language_id'));

			if (!$post_data) {
				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "pvideo i LEFT JOIN " . DB_PREFIX . "pvideo_description id ON (i.post_id = id.post_id) WHERE id.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY id.title");

				$post_data = $query->rows;

				$this->cache->set('post.' . (int)$this->config->get('config_language_id'), $post_data);
			}
            
			return $post_data;
		}
	}

	public function getPostDescriptions($post_id) {
		$post_description_data = array();

		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "pvideo_description WHERE post_id = '" . (int)$post_id . "'");

		foreach ($query->rows as $result) {
			$post_description_data[$result['language_id']] = array(
				'title'            => $result['title'],
				'description'      => $result['description'],
                'summary'          => $result['summary'],
				'meta_title'       => $result['meta_title'],
				'meta_description' => $result['meta_description'],
				'meta_keyword'     => $result['meta_keyword']
			);
		}

		return $post_description_data;
	}

    public function getPostImages($post_id) {
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "pvideo_image WHERE post_id = '" . (int)$post_id . "' ORDER BY sort_order ASC");

		return $query->rows;
	}
    
	public function getTotalPosts() {
		$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "pvideo");

		return $query->row['total'];
	}
    
    public function getPostSeoUrls($post_id) {
		$post_seo_url_data = array();
		
		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "seo_url WHERE query = 'post_id=" . (int)$post_id . "'");

		foreach ($query->rows as $result) {
			$post_seo_url_data[$result['store_id']][$result['language_id']] = $result['keyword'];
		}

		return $post_seo_url_data;
	}
}

 



Как решить это - без понятия. В остальном все хорошо. Модуль максимально легкий и можно адаптировать под свои нужды)

pvideo.zip

Змінено користувачем AlexMax13
Надіслати
Поділитися на інших сайтах


еще одна проблема с тем что на сайте все статьи выводятся на одной странице. Т.е. нету переключателя страниц. Как можно добавить переключатель страниц и лимит на 10 видео на странице?

Змінено користувачем AlexMax13
Надіслати
Поділитися на інших сайтах


решил проблему с пагинацией (переключение страниц). только у меня уже 2 поля которые нужны мне (название и описание). подбивайте под себя по примеру.

 

содержимое файла контроллера каталога

 

Прихований текст
<?php
class ControllerVideoArchive extends Controller {
	public function index() {
        $this->load->language('video/archive');

		$this->load->model('video/post');
        
        $this->document->setTitle( $this->language->get('heading_title') );

        $data['mova'] = $this->session->data['language'];
		if ($data['mova'] == 'uk-ua') {
			$data['mova'] = 'ua';
		} else {
			$data['mova'] = '';
		}

        $data['breadcrumbs'] = array();
		
		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/home')
		);
        
        $data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_archive'),
			'href' => $this->url->link('video/archive')
		);
		  
		$url = '';
		
		if (isset($this->request->get['page'])) {
			$url .= '&page=' . $this->request->get['page'];
		}	

		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		} else { 
			$page = 1;
		}
		
		$filter_data = array(
			'page' 	=> $page,
			'limit' => 10,
			'start' => 10 * ($page - 1),
		);
		
		$total = $this->model_video_post->getTotalPosts();
		
		$pagination = new Pagination();
		$pagination->total = $total;
		$pagination->page = $page;
		$pagination->limit = 10;
		$pagination->url = $this->url->link('video/archive', 'page={page}');
		
		$data['pagination'] = $pagination->render();
	 
		$data['results'] = sprintf($this->language->get('text_pagination'), ($total) ? (($page - 1) * 10) + 1 : 0, ((($page - 1) * 10) > ($total - 10)) ? $total : ((($page - 1) * 10) + 10), $total, ceil($total / 10));

		$posts = $this->model_video_post->getPosts($filter_data);
	 
		$data['posts'] = array();

		foreach ($posts as $result) {
			$data['posts'][] = array (
				'title' 	  => $result['title'],
				'description' => html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')
			);
		}
        
        $data['column_left'] = $this->load->controller('common/column_left');
		$data['column_right'] = $this->load->controller('common/column_right');
		$data['content_top'] = $this->load->controller('common/content_top');
		$data['content_bottom'] = $this->load->controller('common/content_bottom');
		$data['footer'] = $this->load->controller('common/footer');
		$data['header'] = $this->load->controller('common/header');
        
        $this->response->setOutput($this->load->view('video/archive', $data));
    }
}

 

 

 

содержимое файла модели каталога

 

Прихований текст
<?php
class ModelVideoPost extends Model {
	public function getPosts($data) {
		$sql = "SELECT * FROM " . DB_PREFIX . "pvideo n LEFT JOIN " . DB_PREFIX . "pvideo_description nd ON n.post_id = nd.post_id WHERE nd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND n.status = '1' ORDER BY sort_order ASC";
		
		if (isset($data['start']) && isset($data['limit'])) {
			if ($data['start'] < 0) {
				$data['start'] = 0;
			}
			
			if ($data['limit'] < 1) {
				$data['limit'] = 10;
			}	
		
			$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
		}	
		
		$query = $this->db->query($sql);
		
		return $query->rows;
	}

	public function getTotalPosts() {
		$query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "pvideo");
	
		return $query->row['total'];
	}

}

 

 

 

содержимое файла archive.twig каталога

 

Прихований текст
{{ header }}
<div class="v_s10 container">
    <ul class="breadcrumb">
        <li><a href="/{{ mova }}"><img src="/image/catalog/site_img/home.svg"></a></li>
        <li>{{ heading_title }}</li>
    </ul>
    <div class="row">{{ column_left }}
        {% if column_left and column_right %}
            {% set class = 'col-sm-6' %}
        {% elseif column_left or column_right %}
            {% set class = 'col-sm-9' %}
        {% else %}
            {% set class = 'col-sm-12' %}
        {% endif %}
        <div id="content" class="{{ class }}">
            {{ content_top }}
            <h1>{{ heading_title }}</h1>
            <h3>{{ text_archive }}</h3>
            <div class="row">
            {% for result in posts %}
                <div class="col-lg-4 col-md-4 col-sm-6 col-xs-12">
                    <h5 data-toggle="tooltip" data-original-title="{{ result.title }}">{{ result.description }}</h5>
                </div>
            {% endfor %}
            </div>
            <div class="row">
                <div class="col-sm-6 text-left">{{ pagination }}</div>
                <div class="col-sm-6 text-right">{{ results }}</div>
            </div>
            {{ content_bottom }}
        </div>
        {{ column_right }}
    </div>
</div>
{{ footer }}

 

 

Надіслати
Поділитися на інших сайтах


Но есть еще непонятная фантомная проблема. При удалении некоторых публикаций появляется такая ошибка: https://prnt.sc/LYsdW4tYVutV

иногда ошибка бывает error_affiliate, иногда error_return и еще как то... Именно при удалении товара. Но я не понимаю как такое может иногда быть, а иногда нет. Такое ощущение что если сайт решил не удалять конкретную публикацию, тогда ты ее не удалишь. В модели все четко прописано:
 

public function deletePost($post_id) {
        //$this->event->trigger('pre.admin.post.delete', $post_id);

        $this->db->query("DELETE FROM " . DB_PREFIX . "pvideo WHERE post_id = '" . (int)$post_id . "'");
        $this->db->query("DELETE FROM " . DB_PREFIX . "pvideo_description WHERE post_id = '" . (int)$post_id . "'");
        $this->db->query("DELETE FROM " . DB_PREFIX . "seo_url WHERE query = 'post_id=" . (int)$post_id . "'");

        $this->cache->delete('post');
    }

 

что здесь может быть не так?

Змінено користувачем AlexMax13
Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Вхід

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

Вхід зараз

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

Important Information

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