PDA

Zobacz pełną wersję : Dodatkowe pola artykułów w własnym szablonie



ons
11-04-2019, 18:49
Witam serdecznie, jestem w trakcie tworzenia własnego szablonu. Nowa Joomla ma ciekawą funkcjonalność w artykułach a mianowicie dodatkowe pola w artykułach. Czy ktoś z szanownych forumowiczów wie w jaki sposób mogę zapanować nad wyświetlaniem tego pola? W szablonie mam określoną pozycję i do niej podpinam moduł migawkę. W CSS mogę sobie ostylowac dodatkowe pole ale może da się to jakoś zaimplementować do szablonu ? Czyli: zamiast w kodzie zostawiać samo *position... Wrzucam typ: tytuł, typ:pole dodatkowe itd?

siristru
11-04-2019, 20:21
Pola dodatkowe dotyczą artykułów i powinny być wyświetlane na stronach związanych bezpośrednio z artykułami (np. artykuł lub kategoria).
Oczywiście można by je wyświetlać bezpośrednio w szablonie... tylko po co?
Szablon jest grafika ogólną i może wyświetlać widoki NIEzwiązane z artykułami np. kontakty lub cokolwiek innego.
Wpisywanie do szablonu kodu wyświetlającego coś z artykułów będzie takim wstawieniem na sztywno. Po co to robić skoro można używać modułów wraz z zachowaniem ich elastyczności.

Jak już wspomniałem, dodatkowe pola dotyczą artykułów i jest to niesamowicie przydatna funkcjonalność.
Można zapanować nad wyświetlaniem dodatkowych pól w widoku kategorii, artykułu lub modułu związanego z artykułami.

W widoku kategorii ten kod;


$this->item->jcfields

Wyświetli listę pól.

Można też wyświetlić konkretną wartość z pola:


$this->item->jcfields[1]->value

Wcześniej by określić numer danego pola w tablicy robisz:


print_r($this->item->jcfields)

Możesz też zrobić pętlę (przykład z pętlą w pętli z jednego z moich projektów):


<?php foreach ($this->item->jcfields as $key => &$poleBazy) { ?>
<tr>
<?php if($poleBazy->required == 1){$req = '<span class="klasa-wymagane">*</span>';} else {$req = null;}; ?>
<td class="tabela-etykieta ">
<?php echo $poleBazy->title; ?><?php echo $req; ?>
<?php if(isset($poleBazy->description)) { ?>
<div class="font-italic"><?php echo $poleBazy->description; ?></div>
<?php } ?>
</td>
<td class="tabela-wartosc">
<?php
if(is_array($poleBazy->value)) {
echo '<ul>';
foreach ($poleBazy->value as $key => &$poleParam) {
echo '<li>' . $poleParam . '</li>';
}
echo '</ul>';
} else {
echo nl2br($poleBazy->value);
}
?>
</td>
</tr>
<?php } ?>

Tak też można czarować całkiem nieźle :) Ale ma to sens wyłącznie w widoku związanym z artykułem a nie po prostu szablonem.

ons
11-04-2019, 20:47
Chodzi o to, że mam swój szablon coś na zasadzie onepage. Poszczególne "sekcje" strony buduję z modułów migawki z podpiętym danym artykułem. Każda część strony posiada tytuł sekcji (tytuł artykułu) i podtytuł (dodatkowe pole). Chciałbym uzyskać taki efekt każdej sekcji onepage jak na obrazku:

9571
Z tego co zauważyłem tytuł artykułu ma klasę .newsflash-title a dodatkowe pole .field-value . Czy efekt uzyskam tylko w CSS dla tych klas? Czy może mogę wypisać sobie do szablonu w dane miejsca tytuł a osobno dodatkowe pole?

siristru
11-04-2019, 21:23
Projekt one page może być zbudowany na modułach lub na widoku kategorii artykułów (+ moduły).
Szablon stanowi jedynie szablon, rusztowanie do wyświetlania w nim różnych elementów.
Wpisywanie czegoś na stałe nie ma większego sensu gdyż przeczy to idei szablonu. Kiedy zmieni się koncepcja lub potrzeba wyświetlania czegoś nowego będziesz musiał przekopać szablon zamiast dodać nowy element w panelu administracyjnym.


Czy może mogę wypisać sobie do szablonu w dane miejsca tytuł a osobno dodatkowe pole?

Nie do szablonu tylko do widoku modułu. Wykorzystujesz nadpisanie widoku: http://wiki.joomla.pl/Zrozumie%C4%87_koncepcj%C4%99_nadpisywania_szablon em
I oczywiście możesz sobie wpisać "na sztywno" (hardcoded) z reki tytuł pola ale możesz też wyświetlić ze zmiennej (co jest lepszym rozwiązaniem bo gdy zmieni się nazwa pola nie trzeba będzie edytować widoku).

Użyj:


print_r($this->item->jcfields)

By zobaczyć co jest przechowywane w zmiennej i co wywoływać.

terra
12-04-2019, 14:17
tak na marginesie, pola dodatkowe nie dotyczą tylko artykułów, można je stosować także w profilach użytkowników i formularzach kontaktowych. Dla tych elementów można je stylizować w css szablonu.