Jump to content

URL rewrite a nová stránka


haus

Recommended Posts

Čau lidi,

jsem tak trochu začátečník s PS a potřeboval bych poradit jak na url rewrite. Možná to pro vás bude banalita, ale já na to nějak nemůžu přijít.

Mám vytvořený modul s novinkami, který mi vypisuje názvy novinek do left_column hooku a obsahuje linky na ně. Po kliknutí na link bych potřeboval, aby se mi zobrazila nová stránka s tou aktuální novinkou a aby měla url v určitém formátu, jako třeba 'prestashop.cz/5-nova-novinka'. Jenže se mi vždycky napíše 404 stránka nenalezena a nevím jak na to.

V left column mám taky link na všechny novinky a když na to kliknu, tak mi to sice vypíše všechny novinky ale to je celý html kód, co se vypíše, takže v tomto případě i nějak špatně vypisuju tplko, protože se nenačte zbytek stránky, ale jen to moje tpl.

Ještě dodám, že je to modul na verzi 1.6+

Víte někdo jak alespoň na něco z toho, co jsem napsal?

Dík moc za případnou pomoc.

Edited by haus (see edit history)
Link to comment
Share on other sites

Nejprve je potřeba aby modul dokázal otevřít onu stránku pomocí dynamické URL jako např. novinky.php?news_id=X. Až toto zabudujete do svého modulu, napište jaký formát dynamické URL jste zvolil a jaký formát přepsané URL k tomu chcete. Napíšu Vám pravidla pro mod_rewrite.

Link to comment
Share on other sites

mám vytvořený pravidlo pro url_rewrite:

private $_rewriteRules = array(
    	'news-detail'	=> array(
    		'title'		=> 'News detail',
    		'page'		=> 'modules/blocknews/news-detail.php?id=$1&name=$2&',
    		'rewrite'   => 'aktuality/detail/([0-9]*)_([a-zA-Z0-9-]*)',
    		),                        
    	'news-list'		=> array(
    		'title'		=> 'List news',
    		'page'		=> 'modules/blocknews/news-list.php?number=$1&',
    		'rewrite'   => 'aktuality/list/([0-9]*)',
    		),
    	'news-all-list'	=> array(
    		'title'		=> 'All news',
    		'page'		=> 'modules/blocknews/news-list.php',
    		'rewrite'   => 'aktuality/list',
    		),
    	);

který pak ukládám do DB v metodě installUrlRewrite

foreach($this->_rewriteRules as $rewriteRule) {
			
			$args = array(
				'page'	=> $rewriteRule['page']
				);
				
	        Db::getInstance()->autoExecuteWithNullValues(_DB_PREFIX_.'meta', $args, 'INSERT');
	        
	        $id_meta = Db::getInstance()->Insert_ID();
	        
			$langs = Language::getLanguages();
			foreach ($langs as $lang)
			{
				$args = array(
					'id_meta'		=> $id_meta,
					'id_lang'		=> $lang['id_lang'],
					'title'			=> $rewriteRule['title'],
					'url_rewrite'	=> $rewriteRule['rewrite'],
					);
					
		        Db::getInstance()->autoExecuteWithNullValues(_DB_PREFIX_.'meta_lang', $args, 'INSERT');
			}
		}

V metodě hookLeftColumn pak vypisuji informace o novinkách:

foreach($news as $key=>$value) {
			$news[$key]['link'] = $link->getPageLink('') . 'aktuality/detail/'.$value['id_news'].'_'.Tools::link_rewrite($value['title']);
		}
		
		$smarty->assign(array(
			'news' 	=> $news,
			'link_list'	=> $link->getPageLink('').'modules/blocknews/news-list.php',
			));

V třídě NewsDetailController pak v konstruktoru nastavuji

if (Configuration::get("PS_REWRITING_SETTINGS") == 1)
			$this->php_self = "aktuality/".Tools::getValue('id').'-'.Tools::getValue('name').".html";
		parent::__construct();

a v metodě display nastavuji smarty

$smarty->assign(array(
			'news'				=> ($news<>null) ? $news : null,
			'link_news_list'    => $link->getPageLink('').'modules/blocknews/news-list.php',
			));

stejně tak poté ve třídě NewListController.

 

Tak trochu jsem to okoukal ze starých verzí presty, tak je možné, že někdě něco špatně nastavuji, co PS 1.6. nezkousne.

Edited by haus (see edit history)
Link to comment
Share on other sites

najít:

'rewrite'   => 'aktuality/detail/([0-9]*)_([a-zA-Z0-9-]*)',
nahradit:

'rewrite'   => 'aktuality/detail/([0-9]+)_([a-zA-Z0-9\-]*)',
najít (plus mínus kosmetika):

'rewrite'   => 'aktuality/list/([0-9]*)',
nahradit:

'rewrite'   => 'aktuality/list/([0-9]+)',
Link to comment
Share on other sites

  • 4 weeks later...

najít:

'rewrite'   => 'aktuality/detail/([0-9]*)_([a-zA-Z0-9-]*)',
nahradit:

'rewrite'   => 'aktuality/detail/([0-9]+)_([a-zA-Z0-9\-]*)',
najít (plus mínus kosmetika):

'rewrite'   => 'aktuality/list/([0-9]*)',
nahradit:

'rewrite'   => 'aktuality/list/([0-9]+)',

 

To mi bohuzel nepomohlo.

Dokázal jsem si už zobrazit stránku ve správné url ale je potíž že se mi na té stránce zobrazuje pouze ten můj template a nic jinýho. Takže se mi zobrazí novinky, ale nejsou pod css stylama a vůbec chybí zbytek stránky.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...