PDA

Zobacz pełną wersję : Różne kolory artykułów na stronie głównej



Robster
18-09-2010, 11:11
Mam problem z wymyśleniem metody, która nadawałaby jednej z kolumn na stronie głównej, w widoku artykułów identyfikator. Chodzi o proste rozróżnienie 1-2. Parzyste artykuły miałyby jeden kolor a nieparzyste drugi.

Najprostszym rozwiązaniem wydaje mi się sprawdzanie aktualnej ilości artykułów, ale nie mogę w dokumentacji znaleźć, czy istnieje jakaś zmienna która przechowuje tą liczbę.
Z tego co zauważyłem wcześniej łączenie się z bazą i wyciąganie z niej bezpośrednio tej zmiennej, nie jest dobrą metodą bo większość tych danych ma już swoją nazwę w J!, tyle że ja nie za bardzo się w tym orientuję.

Podsumowując, chcę wiedzieć czy moje podejście jest prawidłowe i jeśli tak, to jakieś wskazówki co do tej zmiennej (jest jakaś lista zmiennych w J!?). Jeśli natomiast źle kombinuję, to proszę o jakieś inne rozwiązanie.

Jola
18-09-2010, 20:43
Witam,
chodzi o blog czy o listę, sekcje czy kategorie?

Robster
19-09-2010, 00:45
O artykuły wyświetlane na stronie głównej. Modyfikuję (nadpisuję szablonem) pliki z katalogu frontpage.

Jola
19-09-2010, 01:49
Nie wiem czy rozumiem (wizualnie) o co Ci chodzi.
Ile ma być kolumn? Mam rozwiązanie dla np. 2 kolumn, jedna w kolorze a , druga w kolorze b.
Ale nie jestem pewna czy o to chodzi.
Najlepszy byłby jakiś rysunek, szablonik??

Robster
19-09-2010, 09:14
<?php // no direct access
defined('_JEXEC') or die('Restricted access');

$canEdit = ($this->user->authorize('com_content', 'edit', 'content', 'all') || $this->user->authorize('com_content', 'edit', 'content', 'own'));
?>
<?php if ($this->item->state == 0) : ?>
<div class="system-unpublished">
<?php endif; ?>
<?php if ($canEdit || $this->item->params->get('show_title') || $this->item->params->get('show_pdf_icon') || $this->item->params->get('show_print_icon') || $this->item->params->get('show_email_icon')) : ?>
<div id="artykul">
<div id="art_left">
<div id="data">
<div id="rok">

<?php if ($this->item->params->get('show_create_date')) : ?>
<?php echo JHTML::_('date', $this->item->created, JText::_('%Y')); ?>

</div>
<div class="szczegoly">
<?php echo JHTML::_('date', $this->item->created, JText::_('<strong>%d</strong>/%m')); ?>
<?php endif;?>
</div>
<div class="linia"></div>
</div>
<div id="autor">
<div class="posted">WPISANY PRZEZ:</div>
<div class="szczegoly2">
<?php if (($this->item->params->get('show_author')) && ($this->item->author != "")) : ?>
<?php JText::printf(($this->escape($this->item->created_by_alias) ? $this->escape($this->item->created_by_alias) : $this->escape($this->item->author)) ); ?>
<?php endif; ?>
</div>
<div class="linia"></div>
</div>
<div id="kategoria">
<div class="posted">Kategoria:</div>
<div id="kat_szczeg">
<?php if (($this->item->params->get('show_section') && $this->item->sectionid) || ($this->item->params->get('show_category') && $this->item->catid)) : ?>

<?php if ($this->item->params->get('show_section') && $this->item->sectionid && isset($this->item->section)) : ?>

<?php if ($this->item->params->get('link_section')) : ?>
<?php echo '<a href="'.JRoute::_(ContentHelperRoute::getSectionRoute($t his->item->sectionid)).'">'; ?>
<?php endif; ?>
<?php echo $this->escape($this->item->section); ?>
<?php if ($this->item->params->get('link_section')) : ?>
<?php echo '</a>'; ?>
<?php endif; ?>
<?php if ($this->item->params->get('show_category')) : ?>
<?php echo ' - '; ?>
<?php endif; ?>

<?php endif; ?>
<?php if ($this->item->params->get('show_category') && $this->item->catid) : ?>

<?php if ($this->item->params->get('link_category')) : ?>
<?php echo '<a href="'.JRoute::_(ContentHelperRoute::getCategoryRoute($ this->item->catslug, $this->item->sectionid)).'">'; ?>
<?php endif; ?>
<?php echo $this->escape($this->item->category); ?>
<?php if ($this->item->params->get('link_category')) : ?>
<?php echo '</a>'; ?>
<?php endif; ?>

<?php endif; ?>

<?php endif; ?>
</div>
</div>
<div id="czytaj_wiecej">
<?php if ($this->item->params->get('show_readmore') && $this->item->readmore) : ?>
<a href="<?php echo $this->item->readmore_link; ?>" class="readon<?php echo $this->escape($this->item->params->get('pageclass_sfx')); ?>">
<?php if ($this->item->readmore_register) :
echo JText::_('Register to read more...');
elseif ($readmore = $this->item->params->get('readmore')) :
echo $readmore;
else :
echo JText::sprintf('Read more...');
endif; ?></a>
<?php endif; ?>
</div>
</div>
<div id="art_right">
<table class="contentpaneopen<?php echo $this->escape($this->item->params->get( 'pageclass_sfx' )); ?>">
<tr>
<?php if ($this->item->params->get('show_title')) : ?>
<td class="contentheading<?php echo $this->escape($this->item->params->get( 'pageclass_sfx' )); ?>" width="100%">
<?php if ($this->item->params->get('link_titles') && $this->item->readmore_link != '') : ?>
<a href="<?php echo $this->item->readmore_link; ?>" class="contentpagetitle<?php echo $this->escape($this->item->params->get( 'pageclass_sfx' )); ?>">
<?php echo $this->escape($this->item->title); ?></a>
<?php else : ?>
<?php echo $this->escape($this->item->title); ?>
<?php endif; ?>
</td>
<?php endif; ?>
<!--Przyciski kolo tytulu newsa -->
<?php if ($this->item->params->get('show_pdf_icon')) : ?>
<td align="right" width="100%" class="buttonheading">
<?php echo JHTML::_('icon.pdf', $this->item, $this->item->params, $this->access); ?>
</td>
<?php endif; ?>

<?php if ( $this->item->params->get( 'show_print_icon' )) : ?>
<td align="right" width="100%" class="buttonheading">
<?php echo JHTML::_('icon.print_popup', $this->item, $this->item->params, $this->access); ?>
</td>
<?php endif; ?>

<?php if ($this->item->params->get('show_email_icon')) : ?>
<td align="right" width="100%" class="buttonheading">
<?php echo JHTML::_('icon.email', $this->item, $this->item->params, $this->access); ?>
</td>
<?php endif; ?>
<?php if ($canEdit) : ?>
<td align="right" width="100%" class="buttonheading">
<?php echo JHTML::_('icon.edit', $this->item, $this->item->params, $this->access); ?>
</td>
<?php endif; ?>

</tr>
</table>
<?php endif; ?>
<?php if (!$this->item->params->get('show_intro')) :
echo $this->item->event->afterDisplayTitle;
endif; ?>
<?php echo $this->item->event->beforeDisplayContent; ?>
<table class="contentpaneopen<?php echo $this->escape($this->item->params->get( 'pageclass_sfx' )); ?>">

<tr class="podkreslenie"></tr>
<?php if ($this->item->params->get('show_url') && $this->item->urls) : ?>
<tr>
<td valign="top" colspan="2">
<a href="http://<?php echo $this->escape($this->item->urls) ; ?>" target="_blank">
<?php echo $this->escape($this->item->urls); ?></a>
</td>
</tr>
<?php endif; ?>

<tr>
<td valign="top" colspan="2">
<?php if (isset ($this->item->toc)) : ?>
<?php echo $this->item->toc; ?>
<?php endif; ?>
<?php echo $this->item->text; ?>
</td>
</tr>

<?php if ( intval($this->item->modified) != 0 && $this->item->params->get('show_modify_date')) : ?>
<tr>
<td colspan="2" class="modifydate">
<?php echo JText::sprintf('LAST_UPDATED2', JHTML::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC2'))); ?>
</td>
</tr>
<?php endif; ?>
</table>
<?php if ($this->item->state == 0) : ?>
</div>
<?php endif; ?>
<span class="article_separator">&nbsp;</span>
<?php echo $this->item->event->afterDisplayContent; ?>
</div>
<div class="clear"></div>
</div>


Chodzi o kolor WIERSZY. Div o ID art_left ma zmieniać kolor (raz kolor a, drugi raz kolor b). Kod wygląda dość spartańsko, ale układ jest też dość skomplikowany :/

Hamster21
19-09-2010, 21:48
A nie lepiej zrobić przypisywanie clasy w css w zależności od parzystości zmiennej?

Robster
19-09-2010, 22:24
Oj @Hamster21 a co ja właśnie próbuję zrobić? Ale tą zmienną trzeba skądś wziąć i ja się zastanawiam skąd najlepiej (zresztą w pierwszym poście o tym napisałem).

a_m
19-09-2010, 22:28
@Robster, jeśli chodzi o to co napisał Hamster21, wyguglaj sobie o pseudoklasie nth-child
-----------
( tylko w ie < 9 - "lipa")

Jola
19-09-2010, 22:50
Najłatwiej jest dodać numerowanie wyświetlanych artykułów, potem sprawdzić czy nr jest parzysty czy nie ..

1. dodanie numerowania: plik components/com_content/models/frontpage.php linia 104 jest

foreach ($Arows as $row)
{
// check to determine if section or category has proper access rights
$rows[$i] = $row;
$i ++;
}zamień na

foreach ($Arows as $row)
{
// check to determine if section or category has proper access rights
$rows[$i] = $row;
$rows[$i]->nr = $i;
$i ++;
}2. pobranie numeru i sprawdzenie czy numer jest parzysty w pliku default_item.php

$nr = $this->item->nr;
$parzysty = $nr%2;Wystarczy dodać warunek sprawdzający czy $parzysty == 0 (wtedy nr parzysty) i reszta chyba jasna...
:)

Robster
20-09-2010, 16:05
@Robster, jeśli chodzi o to co napisał Hamster21, wyguglaj sobie o pseudoklasie nth-child
-----------
( tylko w ie < 9 - "lipa")

Znam tą klasę, ale umknęło Ci, że ja potrzebuję tego do DIV'a :) A z tego co pamiętam w ten sposób ta pseudoklasa nie funkcjonuje :)

@jolaass dzięki serdeczne. Szukałem pliku który byłby odpowiedzialny za numerowanie artykułów i do tego pliku też zaglądałem, ale oczywiście mi umknęło :/

A już całkiem na marginesie zapytam, czy w dokumentacji J! jest gdzieś dział z opisem metod i funkcji jakie znajdują się w każdym pliku? Chodzi o to by się zorientować gdzie szukać kodu, który odpowiada za konkretną rzecz. Na razie uczę się tego w taki sposób jak tutaj, czyli w praktyce, na własnych błędach i z pomocą bardziej doświadczonych.

PS
Ten post jest numerem 666 :lol:

szoq
21-09-2010, 00:31
a po co sprawdzać numery artykułów?


$zmienna = 0;
if($zmienna){$klasa="klasa1"; $zmienna=0;}
else{{$klasa="klasa2"; $zmienna=1;}}

Robster
21-09-2010, 09:36
A ta $zmienna, nie zostanie przypadkiem skasowana po dodaniu artykułu i w kółko będzie 0?

szoq
21-09-2010, 11:32
raczej nie, jeśli umieścisz definicję jej poza foreach a warunki w środku to powinno wszystko się zgrać.

Robster
21-09-2010, 12:53
Pytam z ciekawości bo problem rozwiązałem wcześniej podanym kodem, a tutaj zwyczajnie mi się wydaje, że zmienna przy każdym dodaniu artykułu ulatuje w powietrze :)

szoq
21-09-2010, 13:00
to zależy jak do tego podejdziesz.
Jeśli chcesz od razu definiować klasę przy dodawaniu artykułu to faktycznie uleci, jeśli natomiast chcesz przypisywać klasy dopiero przy listingu to nie

Robster
21-09-2010, 15:12
No właśnie klasa jest definiowana zaraz po dodaniu artykułu (a przynajmniej tak sądzę, biorąc pod uwagę modyfikowany plik).