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

[Решено?..] Как переформировать 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 ([email protected]). Вот код

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

<?php
// News Module for Opencart v1.5.5, modified by villagedefrance ([email protected])

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
Надіслати
Поділитися на інших сайтах


Это мне нужно для того, чтобы потом с помощью 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

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