Jump to content
Sign in to follow this  
dorash1989

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

Recommended Posts

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

На данный момент 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();
	}
}
?>

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Edited by dorash1989

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

не нужен.

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

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

Share this post


Link to post
Share on other sites

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

Edited by dorash1989

Share this post


Link to post
Share on other sites

ты это (с библиотекой 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!

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.