Search

Visitors Counter

TodayToday19
YesterdayYesterday69
This_WeekThis_Week145
This_MonthThis_Month1388
All_DaysAll_Days82372
Your_IP 54.163.19.57

W nowym szablonie w katalogu /templates/nazwa_szablonu/html możemy nadpisywać domyślne układy stron Joomli i jej dodatków.

 

Używając komponentu K2 chcąc na stronie listy etykiet dodać nazwę autora spotykamy się z poważnym problemem. Nie wystarczy nadpisać domyślny układ dodając odpowiednie linijki kodu ponieważ domyślnie kod ten nie będzie działał dla tego typu strony. 

 

Przede wszystkim w katalogu html naszego szablonu tworzymy podkatalog "com_k2" oraz w nim, podkatalog "default". Do niego kopiujemy plik tag.php z lokalizacji /components/com_k2/templates/default. Plik ten odpowiada za to jak wygląda strona listy etykiet. 

 

Jeżeli chcemy aby nazwa autora artykułu wyświetlała się bezpośrednio pod nim to w okolicach linii 83, pod kodem odpowiadającym za wyświetlenie wprowadzenia do artykułu:

 

<?php if($item->params->get('tagItemIntroText',1)): ?>

<!-- Item introtext -->

<div class="tagItemIntroText">

   <?php echo $item->introtext; ?>

</div>

<?php endif; ?>

 

wstawiamy kod odpowiadający za wyświetlenie nazwy autora:

 

<!-- Item Author -->

<span class="catItemAuthor">

  <?php echo K2HelperUtilities::writtenBy($item->author->profile->gender); ?>

  <a rel="author" href="/<?php echo $item->author->link; ?>"><?php echo $item->author->name; ?></a>

</span>

 

Kod ten jest niezależny od nastawy przełączników w menu administracyjnym.

 

Niestety po odświerzeniu strony zobaczymy tylko napis "Napisane przez". Długo walczyłem, zanim zrozumiałem dlaczego to nie działa. Mianowicie zmienna $item lub $items nie zawiera w sobie informacji o autorze. Jest to wycięte w pliku item.php, który znajduje się w katalogu /components/com_k2/models. Otwierając ten plik, przechodząc do pozycji oznaczonej komentarzem //Author - linia 222 napotykamy na warunek w postaci:

 

if (($view == 'item' && ($item->params->get('itemAuthorBlock') || $item->params->get('itemAuthor'))) ||

($view == 'itemlist' && ($task == '' || $task == 'category') && ($item->params->get('catItemAuthorBlock') || $item->params->get('catItemAuthor'))) || 

($view == 'itemlist' && $task == 'user') ||

($view == 'relatedByTag'))

 

mówi ono o tym kiedy do zmiennej $item zostaną przypisane informacje o autorze. Wystarczy więc dodać w odpowiednie miejsce $task == 'tag' aby wszystko działało zgodnie z naszymi założeniami. Kod ten dodajemy do drugiego warunku w miejscu zaznaczonym poniżej:

 

if (($view == 'item' && ($item->params->get('itemAuthorBlock') || $item->params->get('itemAuthor'))) ||

($view == 'itemlist' && ($task == '' || $task == 'tag' || $task == 'category') && ($item->params->get('catItemAuthorBlock') || $item->params->get('catItemAuthor'))) || 

($view == 'itemlist' && $task == 'user') ||

($view == 'relatedByTag'))

 

Po tej operacji zapisujemy plik i cieszymy się ze wspólnie dokonanych modyfikacji. 

W pliku  \libraries\joomla\database\table\user.php

Zmaina linii numer 242:

 

// check for existing email

$query->clear();

$query->select($this->_db->quoteName('id'));

$query->from($this->_db->quoteName('#__users'));

$query->where($this->_db->quoteName('email') . ' = ' . $this->_db->quote($this->email));

$query->where($this->_db->quoteName('id') . ' != ' . (int) $this->id);

$this->_db->setQuery($query);

$xid = intval($this->_db->loadResult());

if ($xid && $xid != intval($this->id))

{

$this->setError(JText::_('JLIB_DATABASE_ERROR_EMAIL_INUSE'));

return false;

}

 

na

 

// check for existing email

$query->clear();

$query->select($this->_db->quoteName('id'));

$query->from($this->_db->quoteName('#__users'));

$query->where($this->_db->quoteName('email') . ' = ' . $this->_db->quote($this->email));

$query->where($this->_db->quoteName('id') . ' != ' . (int) $this->id);

$this->_db->setQuery($query);

$xid = intval($this->_db->loadResult());

if ($xid && $xid != intval($this->id))

{

$this->setError(JText::_('JLIB_DATABASE_ERROR_EMAIL_INUSE'));

return true;

}

Dziś odświeżam swoją wiedzę na temat appletów Java. Budując applet importujemy przynajmniej 2 biblioteki:

 

import javax.swing.*;

import java.awt.*;

 

Nasza główna klasa musi roszerzać klasę Applet. W przypadku używania Swing-a rozszerzamy jej podklasę czyli JApplet. 

 

Applet zawiera kilka metod. Najważniejszą jest init, za pomocą której inicjalizujemy dane. Jest to klasa na wzór konstruktora. Mimo, że klasy mogą posiadać swój własny to cała inicjalizacja odbywa się w tej właśnie metodzie.

 

Innymi metodami appletu są start, stop i destroy. 

 

Metoda start jest wywoływana za każdym razem gdy użytkownik otworzy stronę lub powróci do niej z innego okna. 

Metoda stop jest wywoływana gdy użytkownik opuszcza stronę.

Metoda destroy jest wywoływana po metodzie stop w momencie standardowego zamknięcia przeglądarki. Zwalniamy w niej zasoby niezależne od pamięci takie jak konteksty graficzne?

 

Kod najprostszego appletu wygląda więc mniej więcej tak

 

package MainPackage;

import javax.swing.*;

import java.awt.*;

 

public class MainClass extends JApplet{

    /**

     * 

    */

    private static final long serialVersionUID = 1L;

    public void init() {

        Container cp = getContentPane();

        JLabel etykieta = new JLabel("Hello World", SwingConstants.CENTER);

        cp.add(etykieta);

    }

}

Eos 350d

Dziś, znaczy się wczoraj stała się rzecz niesamowita. Od około 8 lat jestem posiadaczem lustrzanki Canon EOS 350d a dopiero wczoraj wziąłem płytę i zainstalowałem załączone tam oprogramowanie. To jest tak trochę jak z instrukcjami. Po co jest je czytać, skoro my już wszystko wiemy. Jak się okazuje to nie do końca. Wczoraj postanowiłem zrobić sobie małą sesję zdjęciową przy okazji odkurzania aparatu przed wiosną. Ponieważ baterie w pilocie mam wyczerpane a robienie sobie zdjęć z 10 sekundowym wyzwalaczem jest problematyczne postanowiłem poszukać jak sterować aparatem z pozycji komputera. Pierwsze strony jakie znalazłem, mówiły o kabelku USB i jakimś dodatkowym podłączanym w miejsce wężyka spustowego. Uznałem to za zbyt problematyczne i już chciałem temat odpuścić, ale coś mnie pokusiło żeby poszukać dalej. To była dobra decyzja. Na jednej ze stron znalazłem informacje o oprogramowaniu potrzebnym do sterowania za pomocą samego tylko kabelka USB. Wpisując nazwę programu znalazłem się na stronie Canona. Było tam napisane, że oprogramowanie można znaleźć na dołączonej płycie. Z racji, że internet w tym czasie nie chodził mi zbyt dobrze postanowiłem odgrzebać płyty ze sterownikami i zainstalować je na moim kompie.  Do tego celu potrzebny jest EOS Capture. On jednak nie jest samodzielną aplikacją wiec musimy jeszcze zainstalować ZoomBrowser EX. Ten zestaw programów pozwoli nam na sterowanie aparatem z pozycji komputera. Dodatkowo zainstalował mi się program PhotoStitch do robienia panoram. Warto więc było:) Wracając do zestawu programów ZoomBrowser EX i EOS Capture. Umożliwiają one dobieranie czułości filmu, rozmiaru zdjęcia, czy ustawień takich jak wielkość przesłony oraz prędkość migawki. Opcją, którą ja wykorzystałem były zdjęcia seryjne. Polecenie do ich ustawień, ukryte jest w menu Tools. Możemy wybrać czas jaki musi minąć do zrobienia pierwszego zdjęcia, czas pomiędzy kolejnymi zdjęciami (minimum 5 sekund) oraz ilości zdjęć w serii. Podczas ustawiania aparat nie może być ustawiony w tryb samowyzwalacza. Wtedy sterowanie z komputera nie działa. 

Dziś zagłębiłem się trochę w świat Joomli. Stworzyłem swój komponent do wyświetlania dnia tygodnia, daty oraz solenizantów imieninowych. Nie jest to takie trudne jak by się wydawało. Najpierw z jakiejś strony ściągnąłem listę imion posegregowanych według kolejnych dni tygodnia. Listę tą wkleiłem do arkusza kalkulacyjnego, żebym łatwo mógł ją wyedytować. Edycja polegała na przypisaniu do dwuwymiarowej tablicy imion z poszczególnych dni.

Tak wygląda dzień 2 stycznia. $imieniny[1][2]=""Makary, Izydor, Grzegorz"; Przeciągając odpowiednie numerki stworzenie 366 elementów nie zajęło mi więcej jak 5 minut. 

Następnym elementem było stworzenie pliku modułu z rozszerzeniem php. Opiszę poniżej co się w nim znajduje

<?php //początek pliku

defined('_JEXEC') or die('Direct Access to this location is not allowed.'); //w Joomli do wszystkiego odwołujemy się poprzez plik index.php. Jeżeli ktoś próbuje odwołać się do jakiegoś pliku bezpośrednio - DIE die DIE

$dzien = date("j");  //dla przejrzystości kodu do kolejnych zmiennych pobieramy aktualną datę

$miesiac = date("m"); 

$rok = date("Y"); 

$dayname = date("w");

$imieniny[1][1]="Mieczysław, Wilhelm, Mieszko";

$imieniny[1][2]="Makary, Izydor, Grzegorz";

.... //nie będę wklejał tu wszystkich dni. Wcześniej zostało napisane co przyjmują te zmienne.

//czas na wyświetlenie zebranych danych. Podzieliłem je na 2 części - data i imieniny. Obie części wrzuciłem w div-y, które przypisałem do różnych klas CSS abym mógł kontrolować ich wygląd niezależnie

print '<div class="mod_dzien">'; 

print 'Dziś mamy '.$dayname.'<br>';

print $dzien.' '.$miesiac.' '.$rok.'<br><br>';

print '</div>';

print '<div class="mod_imieniny">';

print 'Imieniny obchodzą<br>'.$imieniny[date("n",time())][date("j",time())];

print '</div>';

?> // i to by było na tyle pliku mod_start.php

 

Kolejnym plikiem który zawiera mój moduł jest plik index.html - przyjęło się, że umieszcza się go w każdym katalogu Joomli. Plik ten zawiera tylko jedną linijkę kodu <html><body bgcolor=”#ffffff”></body></html>

Ostatnim z plików jest plik xml zawierający informację dla instalatora

<?xml version="1.0" encoding="utf-8"?> //rodzaj kodowania znaków

// w przypadku starszych wersji Joomla //<install type="module" version="1.5.0"> //wersja Jommli z którą ten moduł jest kompatybilny

<extension version="3.0" type="template" client="site">

<name>Start</name> //nazwa modułu

<author>Kamil</author> //nazwa autora

<creationDate>2012</creationDate> //data utworzenia

<copyright>firma</copyright> //prawa

<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license> //licencja

<authorEmail>email</authorEmail> //adres email

<authorUrl>strona.pl</authorUrl> //strona WWW

<version>1.5.0</version> //wersja modułu

<description>Moduł wyświetlający informację o dniu tygodnia, dacie i imieninach</description> //opis modułu wyświetlany w panelu administracyjnym

<files> //lista plików które instalator ma zainstalować

<filename module="mod_start">mod_start.php</filename>

<filename module="mod_start">index.html</filename>

</files>

</extension>

 

I to by było na tyle. Całość pakujemy w katalog, zipujemy i wgrywamy do Joomli. Następnie w menu rozszerzenia/moduły ustawiamy pozycję wyświetlania, stronach na których nasz moduł ma się wyświetlać oraz włączamy publikację. 

 

Z uwagi, że dziś walczyłem z blogiem drogizycia.tk a konkretnie z paginacją zamieszczę jeszcze kilka informacji

 

Zmiana paginacji w szablonie jest możliwa poprzez przekopiowanie pliku public_html/libraries/joomla/html/pagination.php do katalogu public_html/templates/drogazycia.tk/html naszej templatki a następnie jego edycja. Jeżeli chcemy prze edytować napisy "poprz." "nast." możemy to zrobić w pliku /public_html/language/pl-PL

 

 

Pierwsze post opisujące zagadnienia techniczne będą mówiły o problemach napotkanych podczas realizacji tej strony.

Strona ta jest oparta o CMS Joomla. Nie jest on do końca przystosowany aby pełnić funkcję bloga. Poszukiwania odpowiednich rozszerzeń postawiły pytanie czy nie lepiej do tego celu użyć Wordpress-a. Moja znajomość Joomli jednak wygrała i w ostatecznym rozrachunku postawiłem na nią. Dodataki ułatwiające blogowanie są przeważnie płatne. Te bezpłatne oferują bardzo mała funkcjonalność. Znalazłem darmowe rozszerzenie K2, które ułatwiło przystosowanie Joomli do nowej funkcji. Poniżej przestawaiam listę pakietów, które postanowiłem zainstalować

Joomla_2.5.1-Stable-Full_Package.zip http://www.joomla.pl/ Pakiet joomla - dla przypomnienia w celu szybszej instalacji kopiujemy na serwer plik zip i poprzez konsole rozpakowywujemy

pl-PL_joomla_lang_full_2.5.1.zip.zip http://www.joomla.pl/ Spolszczenie pakietu Joomla

 

K2_v2.5.4.zip http://getk2.org Roszerzenie Joomli o możliwości blogowania, łatwiejszego wstawiania obrazów i przesyłania plików.

k2_pl-PL_language_pack.zip http://getk2.org Spolszczenie K2

mod_minicalendar_3.02.01.zip http://extensions.lesarbresdesign.info/extensions/mini-calendar Mini kalendarz. Bez linkowy, ale bardzo prosty.

nivo-slider2.7.1.zip http://cloud.github.com/downloads/gilbitron/Nivo-Slider/nivo-slider2.7.1.zip Roszerzenie pozwalające na wyświetlanie pokazu slajdów z efektownym przejściem - zainstalowane w templatce

noticeboard_pack_2_x_1.zip http://www.code-garage.com/downloads/noticeboard-pack/2_X_1/noticeboard_pack_2_x_1zip?format=raw Przypominajka umieszczona z lewej strony strony.

Startuje moja prywatna strona, na której będę zamieszczał wszystko co przyjdzie mi do głowy, czyli to czym się aktualnie zajmuję.

Na wstępie chciałbym zaznaczyć, że strona ta jest przeznaczona przede wszystkim na moje potrzeby. Proszę więc nie oczekiwać, że posty będą dla wszystkich jasne i zrozumiałe. Wykonanie tej strony, oraz jej aktualizacja ma posłużyć jako swoisty pamiętnik techniczny zawierający niuansy realizowanych projektów i tego co mi w tym czasie do go głowy przyszło. Jej celem jest zwrócenie mojej uwagi na pułapki napotkane podczas tych realizacji oraz wyciągnięcie wniosków na przyszłe.