PDA

Zobacz pełną wersję : Szablon artykułu K2 zależny od dodatkowego pola



maty321
04-09-2012, 18:48
Chcę aby szablon wpisu (tylko wpisu, nie kategoria) w K2 był zależny od jednego z dodatkowych pól. Mam przy dodawaniu artykułu np pole "szablon" z wyborem dwóch opcji "opcja1" "opcja2" jeśli wybiorę opcje 1 ma być zastosowany szablon1...

w pliku components\com_k2\views\item\view.html.php edytowałem fragment kodu odpowiedzialny za szablon:



$this->_addPath('template', JPATH_COMPONENT.DS.'templates'.DS.$item->params->get('theme'));
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.'templates' .DS.$item->params->get('theme'));
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.$item->params->get('theme'));





$extrafields = array();
foreach($item->extra_fields as $item)
{
$extrafields[$item->id] = $item->value;
}
$szablon = $extrafields[1]; // 1 to id pola


$this->_addPath('template', JPATH_COMPONENT.DS.'templates'.DS.$item->params->get('theme'));
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.'templates' .DS.$item->params->get('theme'));
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.$item->params->get('theme'));


if ( $szablon == 'opcja1')
{
$this->_addPath('template', JPATH_COMPONENT.DS.'templates'.DS.'szablon1');
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.'templates' .DS.'szablon1');
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.'szablon1') ;
}
if ($szablon == 'opcja2')
{
$this->_addPath('template', JPATH_COMPONENT.DS.'templates'.DS.'szablon2');
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.'templates' .DS.'szablon2');
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.'szablon2') ;
}


Mam jednak problem bo wyświetla się wyłącznie biała strona, zawartość pola pobieram poprawnie ponieważ gdy dodam echo $extrafields[1] wyświetli mi się poprawna zawartość. Może ktoś na tym forum wie jak można coś takiego zrobić aby działało poprawnie :)

deviapps
05-09-2012, 08:47
Włącz pełne rejestrowanie błędów, to zamiast białej strony zobaczysz, jakie błędy zwraca PHP.
Może spróbuj zamiast pełnych linii kodu podmieniać tylko parametr (może gdzieś dalej też jest używany?)


$szablon = ''; //opcje i szablony inaczej się nazywają. $item->params->get('theme');
if ( isset($extrafields[1]) ) {
$szablon = $extrafields[1]; // 1 to id pola
}
switch ($szablon) {
case 'opcja1':
$item->params->set('theme','szablon1');
break;
case 'opcja2':
$item->params->set('theme','szablon2');
break;
default:
break;
}
//oryginalny kod

$this->_addPath('template', JPATH_COMPONENT.DS.'templates'.DS.$item->params->get('theme'));
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.'templates' .DS.$item->params->get('theme'));
$this->_addPath('template', JPATH_SITE.DS.'templates'.DS.$mainframe->getTemplate().DS.'html'.DS.'com_k2'.DS.$item->params->get('theme'));

przy okazji nie będziesz dodawał ścieżek do dwóch szablonów (get('theme') i swojego

maty321
05-09-2012, 13:21
Masz rację, lepiej podmienić parametr. Mam włączone rejestrowanie błędów, winą jest konkretny fragment foreach($item->extra_fields as $item) Wystarczy że go za komentuje i strona wczytuje się, ale nie pobiera prawidłowo wartości pola z kolei jak wstawię ten sam kod do innego pliku np "components\com_k2\templates\default\item.php" to w artykule prawidłowo zwraca wartość pola.

deviapps
05-09-2012, 21:33
foreach($item->extra_fields as $item)
trochę nie pasuje, bo pobierasz dane z property obiektu $item i zapisujesz je do $item nadpisując.

maty321
06-09-2012, 11:51
Wielkie dzięki za pomoc, zmieniłem nazwę i wszystko działa tak jak chciałem