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

[Решено?..] Как переформировать URL новости?

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

Всем привет! Помогите с проблемой. Я не супер-программист, но какие-то навыки и примерное понимание есть.

На данный момент URL новости на сайте формируется в таком виде:  shellnail.com.ua/nude.html. Как видим после доменного имени сразу идет название новости, которое берётся из указанного в админке у этой самой новости поля "SEO ссылка". Наша цель, чтобы ссылка выглядела так: shellnail.com.ua/news/nude.html. Т.е. должен появиться раздел news. URL каждой вновь созданной новости должен формироваться по этой же схеме.

Подскажите, пожалуйста как это реализовать, где в каких файлах править код? При этом я заметил, что если в админке у новости не указывать параметр "SEO ссылка", то URL формируется в таком виде: http://localshellnail/index.php?route=information/news&news_id=1

 

В коде модуля я откопал как формируется эта ссылка: 

$this->data['news'][] = array(
				'title'        		=> $result['title'],
				'description'  		=> utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $chars),
				'href'         		=> $this->url->link('information/news', 'news_id=' . $result['news_id']),
				'thumb' 			=> $image,
				'posted'   			=> date($this->language->get('date_format_short'), strtotime($result['date_added']))
			);

Но вот не пойму как формируется ссылка, если в админке у новости я вношу данные в поле  "SEO ссылка".

Стоит модуль новостей бесплатный (News Module for Opencart v1.5.5, modified by villagedefrance (contact@villagedefrance.net). Вот код

 его контроллера:

<?php
// News Module for Opencart v1.5.5, modified by villagedefrance (contact@villagedefrance.net)

class ControllerModuleNews extends Controller {

	private $_name = 'news';

	protected function index($setting) {
		static $module = 0;
	
		$this->language->load('module/' . $this->_name);
	
      	$this->data['heading_title'] = $this->language->get('heading_title');
	
		$this->load->model('localisation/language');
	
		$languages = $this->model_localisation_language->getLanguages();
	
		$this->data['customtitle'] = $this->config->get($this->_name . '_customtitle' . $this->config->get('config_language_id'));
		$this->data['header'] = $this->config->get($this->_name . '_header');
	
		if (!$this->data['customtitle']) { $this->data['customtitle'] = $this->data['heading_title']; } 
		if (!$this->data['header']) { $this->data['customtitle'] = ''; }
	
		$this->data['icon'] = $this->config->get($this->_name . '_icon');
		$this->data['box'] = $this->config->get($this->_name . '_box');
	
		$this->document->addStyle('catalog/view/theme/default/stylesheet/news.css');
	
		$this->load->model('catalog/news');
	
		$this->data['text_more'] = $this->language->get('text_more');
		$this->data['text_posted'] = $this->language->get('text_posted');
	
		$this->data['show_headline'] = $this->config->get($this->_name . '_headline_module');
	
		$this->data['news_count'] = $this->model_catalog_news->getTotalNews();
		
		$this->data['news_limit'] = $setting['limit'];
	
		if ($this->data['news_count'] > $this->data['news_limit']) { $this->data['showbutton'] = true; } else { $this->data['showbutton'] = false; }
	
		$this->data['buttonlist'] = $this->language->get('buttonlist');
	
		$this->data['newslist'] = $this->url->link('information/news');
		
		$this->data['numchars'] = $setting['numchars'];
		
		if (isset($this->data['numchars'])) { $chars = $this->data['numchars']; } else { $chars = 100; }
		
		$this->data['news'] = array();
	
		$results = $this->model_catalog_news->getNewsShorts($setting['limit']);
		
		$this->load->model('tool/image');
	
		foreach ($results as $result) {
			
			if ($result['image']) {
 			$image = $this->model_tool_image->resize($result['image'], 150, 100);
 			} else {
 			$image = FALSE;
 			}
			
			$this->data['news'][] = array(
				'title'        		=> $result['title'],
				'description'  		=> utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $chars),
				'href'         		=> $this->url->link('information/news', 'news_id=' . $result['news_id']),
				'thumb' 			=> $image,
				'posted'   			=> date($this->language->get('date_format_short'), strtotime($result['date_added']))
			);
		}
	
		$this->data['module'] = $module++; 
	
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/' . $this->_name . '.tpl')) {
			$this->template = $this->config->get('config_template') . '/template/module/' . $this->_name . '.tpl';
		} else {
			$this->template = 'default/template/module/' . $this->_name . '.tpl';
		}
	
		$this->render();
	}
}
?>

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


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

Категория или просто в ссылке "слово" ? Это вещи разные

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


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

Ну категорию мне еще одну создавать и не нужно. Мне достаточно, чтобы url каждой новости выглядел shellnail.com.ua/news/***.html. Это мне нужно для того, чтобы потом с помощью javascript отслеживать, что я нахожусь в разделе новостей (что встречается /news/ в урле), а значит отображать элементы страницы определённым образом. Конечная цель такая. По идее мне нужно просто слово news в ЧПУ урле именно в новостях. Большое спасибо за Ваши ответы!

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

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


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

обратите внимание на 

'href' => $this->url->link('information/news', 'news_id=' . $result['news_id']),

решение стоит 500р если интересно

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


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

Это мне нужно для того, чтобы потом с помощью javascript отслеживать, что я нахожусь в разделе новостей (что встречается /news/ в урле), а значит отображать элементы страницы определённым образом.

"велосипед, не копай траншею!"

что конкретно ты хочешь в итоге делать?

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


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

"велосипед, не копай траншею!"

что конкретно ты хочешь в итоге делать?

Ага тоже заметил , dorash1989 "велик" начал изобретать

Зачем такие костыли не пойму :?

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


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

А ведь достаточно в шаблоне новостей запилить инициализацию скрипта, дк нет же надо до жути извращаться

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


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

А ведь достаточно в шаблоне новостей запилить инициализацию скрипта, дк нет же надо до жути извращаться

Ага, а afwollis потом пишет в разных темах, а чего в теме так понас...ли :)

 

А как  можно на глупости не нас ... ть ? :ugeek:

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

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


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

А ведь достаточно в шаблоне новостей запилить инициализацию скрипта, дк нет же надо до жути извращаться

Сайт сделан на основе bootstrap. Для того, чтобы на мобильных устройствах он выглядел как задумано все блоки сайта в шаблонах изначально идут в том порядке, который задуман для мобильных устройств (так и рекомендует делать этот css-javascript фреймворк). В футере, который общий для всего сайта есть небольшой javascript, который в зависимости от нахождения на сайте добавляет или убирает bootstrap'овские классы, для того, чтобы именно методами bootstrap двигать колонки уже для отображения сайта на большом экране. Так вот я не могу отследить, что пользователь находится в в новостях. Для этого мне и нужен /news/ в url. 

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


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

не нужен.

добавь переменную в библиотеку document, заполняй ее в контроллере новостей, в footer`e получай и передавай в шаблон.

в шаблоне footer`a проверяй наличие с нужным значением и делай, чего тебе надо.

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


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

Большое Вам спасибо за ответы. Я понял, что делаю нерационально. Но весь функционал уже реализован мной и не хватает всего лишь этого /news/. Сейчас мне нужно именно такое решение, чтобы залатать проблему. Когда будет финансовая возможность - поставлю программистам задачу сделать как должно быть. А сейчас своими силами - только через костыли. И плюс так логичнее, вроде: shellnail.com.ua/news/***.html, чем shellnail.com.ua/***.html.

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

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


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

ты это (с библиотекой document) можешь сделать самостоятельно.

/system/library/document.php

1)

	private $title;
>>

	private $param_for_js;
	private $title;
2)
	public function setTitle($title) {
>>

	public function setParamForJs($param_for_js) {
		$this->param_for_js = $param_for_js;
	}
	
	public function getParamForJs() {
		return $this->param_for_js;
	}
	
	public function setTitle($title) {
/catalog/controller/information/news.php

<?php 
class ControllerInformationNews extends Controller {
	public function index() {
>>

<?php 
class ControllerInformationNews extends Controller {
	public function index() {
		$this->document->setParamForJs('news_page');
/catalog/controller/common/footer.php

		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/footer.tpl')) {
>>

		$this->data['param_for_js'] = $this->document->getParamForJs();
		
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/footer.tpl')) {
/catalog/view/theme/*/template/common/footer.tpl

<?php if (isset($param_for_js) && ($param_for_js == 'news_page')) { ?>
тут делаешь своё коварное дело (вставляешь скрипт, который должен чего-то там делать).
или просто оборачиваешь нужный кусок в своём коде, в это условие.
<?php } ?>

profit!

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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