Wpisy autora

Obiektowe php – zaawansowany przykład – obsługa formularzy html cz1

Witam. Ostatnio mamy z Goto straszny nawał pracy (praca, studia oraz niespodzianka o której cały czas pamiętamy i niedługo napiszemy) co nie pozwala nam systematycznie rozwijać podjętych przez nas tematów. Ja dla odmiany znalazłem dzisiaj chwile czasu i postanowiłem rozpocząć kolejny – czyste PHP. Nie chcę rozpisywać się na temat czegoś czego w internecie pełno. Chcę się dziś zająć całkiem zaawansowanych programowaniem. Mam nadzieję że uda mi się poniższym artykułem przekonać twardzieli kodujących strukturalnie do potęgi obiektowego PHP.

Do zrozumienia poniższego przykładu potrzebna będzie dość biegła znajomość podstaw programowania w PHP, ponieważ nie będę tutaj tłumaczył żadnej składni. Tego w internecie pełno w każdym języku. Nie będę też tłumaczył za bardzo składni obiektowego php. O tym też zostało napisanych wiele bardzo dobrych kursów i nie ma sensu tego powielać. Ja chcę się skupić na mądrym i przydatnym wykorzystaniu potęgi jaką jest programowanie obiektowe. A zatem – do dzieła.

Najpierw Plan

Jak wiemy (a przynajmniej powinniśmy) obsługa formularzy w php jest bardzo prosta. Najpierw tworzymy jego strukturę w HTML, następnie po kliknięciu na stronie wyślij otwiera się zdefiniowana przez nas strona (ta sama albo inna) gdzie w tablicy $_POST lub $_GET (zależnie od naszych potrzeb) oraz $_FILES znajdują się wartości przesłane przez formularz które możemy dowolnie wykorzystać. Jest to bardzo proste, ale bardzo uciążliwe.  A w jaki sposób wykorzystać do obsługi formularzy programowanie obiektowe?

Każdy formularz zawiera jakies pola (tekstowe, ptaszki do zaznaczania itp). Pola owe posiadają szereg właściwości, które dla poszczególnych typów pól mogą się różnić. Każdemu elementowi w taki sam sposób możemy nadać parametr value ale nie możemy w elemencie tekstowym podać checked=”checked”, a co możemy zrobić dla elementu typu radio. Taka zasada działania formularza wręcz jest idealna do tego by każdy z jego elementów stał się obiektem. Co więcej poszczególne obiekty powinny się różnić kilkoma szczegółami (w zależnosci od typu pola). Aż się prosi by stworzyć klasę podstawową dla elementu formularza oraz szereg klas potomnych ze szczególnymi własnościami dla wyodrębnienia poszczególnych elementów.

Czyli narazie doszliśmy do tego iż potrzebujemy:

  • klasy input, zawierającej najważniejsze własności oraz funkcje identyczne dla wszystkich elementów formularza (takich jak label czy value)
  • poszczególnych klas dla różnych elementów takich jak input_text, input_textarea, input_radio, input_select. Klasy te będą dziedziczyć z klasy input. dzięki temu zaoszczędzimy na kodzie. Nie będziemy musieli za każdym razem definiować własności “value”.

Co dalej? Sam formularz również zawiera swoje parametry a także  listę elementów. Zróbmy więc i z niego objekt, a przekonamy się co zyskamy dzięki temu.

Nasza klasa form będzie zawierała tablicę przechowującą listę jego elementów. Co to daje? Pomyślmy co będzie się działo po kolei w kodzie wykorzystującą nasz formularz.

Najpierw zdefiniujemy sobie nowy obiekt formularza.

$form = new form;

Następnie wypełnimy jego tablicę elementami tworząc odpowiednie nowe obiekty. Przyjmijmy że każdemu elementowi już w momencie tworzenia (za pomocą magicznej metody __construct() ) przypiszemy jego unikalną nazwę. Co nam to da? Zastanówmy się co się stanie jeśli prześlemy ten formularz (narazie pomijamy w jaki sposób on się pojawi w ogóle na stronie – zajmiemy się tym później) na tą samą stronę i znowy wywołamy skrypt ładujący nasz obiekt formularza z listą elementów. Tym razem mamy już w pamięci także wypełnioną tabelę $_POST i możemy korzystając z listy elementów z których każdy ma nazwę wyciągnąć z tej tablicy interesujące nas (przesłane za pomocą naszego formularza) dane.

metoda getData()

napiszemy sobie metodę getData(), która wykonując pętlę po wszystkich elementach formularza, za pomocą parametru name danego elementu sprawdzi czy został on przesłany – to znaczy pobierze go z tablicy $_POST. Co możemy zrobić dalej? Dla każdego elementu formularza (a właściwie jego obiektu) stworzymy sobie parametr $correct oraz metodę check(). Podczas pobierania wartości przesłanych przez formularz dla każdego obiektu w zależności od zmiennej $correct sprawdzimy poprawność przesłanej zmiennej (0 – brak sprawdzania, 1-mail, 2-data itp) jeżeli okaże się że wartość jest niepoprawna wtedy wygenerujemy odpowiedni błąd i wstawimy go do parametru $err naszego elementu formularza. Co najfajniejsze będzie się to działo wewnątrz klasy, bez jakiegokolwiek zainteresowania z naszej strony z punktu widzenia właściwego już kodu.

Ale co zrobić z tymi danymi które się pobrały? Każdy element ma unikalną nazwę. Możemy więc stworzyć dla każdego elementu parametr o nazwie takiej jaką nazwę ma element. Dzięki temu wartość przesłana przez element “desc” będzie dostępna za pomocą kodu:

echo $form->desc;

Fajne prawda? 🙂

metoda sended()

Skoro mamy możliwość sprawdzenia czy nasz element przesłał poprawne dane, powinniśmy móc też wykonać inny kod dla poprawnego całego formularza a inny dla formularza z jakimś błędem. Do tego posłuży metoda sended() obiektu formularza, która sprawdzi czy wszystkie elementu są poprawne, czy też coś jest nie tak. wynik metody będziemy mogli wykorzystać w instrukcji warunkowej.

Wykorzystanie całego tego majdanu.

W uproszeczeniu (pomijając definicję klas. Przyjmijmy że one już są) obsługa naszego formularza może wyglądać tak:

    $form = new $form;
    $form->elements[]=new input_text('name', 'Imię');
    $form->elements[]=new input_text('sname', 'Nazwisko');
    $element=new input_text('mail', 'E-mail');
    $element->class='mail';
    $element->correct=2;
    $form->elements[] = $element; // ten element jest troszke
                               // bardziej rozbudowany.
    $form->getData();
    if($form->sended){
        echo 'Witaj '.$form->name.' '.$form->sname.'.';
    } else {
        echo $form->renderErrors(); //metoda wyświetlająca błędy
                 // poszczególnych elementów jeśli istnieją
        echo $form->render(); // metoda wyświetlająca formularz
    }

I to tyle. Powyższy kod w zależności od tego czy dane zostały poprawnie przesłane wykorzysta je, albo wyświetli informacje o błędzie oraz wyświetli sam formularz (jeśli któreś dane były niepoprane, również odpowiednie kontrolki zostaną zaznaczone np. czerwonym tłem). Wszystko w kilkunastu liniach bardzo przejrzystego kodu. Cały kod obsługujący to będzie siedział w klasach, które niebawem napiszemy. I nie iteresuje nas w momencie korzystania z formularzy HTML, sprawdzanie poprawności, sprawdzanie czy formularz wysłany, wyświetlanie listy błędów oraz pobieranie danych z tablicy $_POST. Wszystko robi się samo.

Pozdrawiam i zapraszam na drugą część tego artykułu która pojawi się już niebawem.

| Komentarze (4)

Joomla – parametry modułów

Co to jest parametr modułu

Moduły w joomli to wg mnie jedna z najprzyjemniejszych rzeczy z punktu widzenia programisty. Wystarczy napisać 2 pliki, by można było zainstalować a następnie użyć jakiś kawałek kodu. Dzisiaj po krótce opiszę jak bardzo szybko dodać do istniejącego już modułu (zainstalowanego nawet) jakiś dodatkowy parametr.

Ale co to jest w ogóle parametr? Joomla w panelu admina w ustawieniach modułu po prawej stronie wyświetla zwykle krótszą lub dłuższą listę dodatkowych ustawień, z jakich możemy skorzystać przystosowując moduł do naszych potrzeb. Na przykład moduł “mod_mainmenu” wykorzystywany do renderowania Menu na stronie posiada ich całkiem sporo:

2009-06-04_113110Jak widać parametry owe są pogrupowane w trzy grupy. Możemy w ten sposób indywidualnie dostosować do naszych potrzeb każdą kopię modułu “mod_mainmenu” wykorzystywaną w portalu.

Ale skąd moduł wie, jakie parametry są dostępne dla danego modułu?

Jest to bardzo proste. Zerknijmy do katalogu modules w naszej instalacji joomla. Jest w nim napewno katalog mod_mainmenu a w nim:

  • katalog [tmpl]
  • helper.php
  • index.html
  • legacy.php
  • mod_mainmenu.php
  • mod_mainmenu.xml

Nie będziemy się teraz zajmować budową modułu oraz pisaniem go. To znajdzie się w innych artykułach. Dzisiaj zajmujemy się tylko parametrami, a te znajdują się… w pliku mod_mainmenu.xml.

Jest to plik instalacyjny modułu, w którym znajduje się para znaczników:

 

<install type="module" version="1.5.0">

</install>

gdzieś na końcu znajdują się 3 grupy parametrów (<params></params>), a w każdej z nich lista parametrów.

Każdy parametr to znacznik xml <param> z parametrami (parametrami znacznika)

  • name – z tej nazwy korzystamy pobierając potem w module wartość parametru
  • type – definiujemy typ pola.
    • text – pole tekstowe jednolinijkowe
    • textarea – pole tekstowe wielolinijkowe
  • default – wartość wpisywana w pole domyślnie
  • label – etykieta widoczna obok pola
  • description – dłuższy opis wyświetlający się po najechaniu myszką na pole

dodatkowo można skorzystać z 

  • rows – ilość wierszy w przypadku textarea
  • cols – ilość kolum (praktycznie – szerokość pola)

Aby stworzyć w ten sposób parametr który będzie przechowywał tytuł piszemy:

<param name="title" type="text" default="" 
label="Tytuł" description="Tytuł który będzie wyświetlany w module"/>

Możemy także stworzyć pole specjalne:

  • <param name=”indent_image1″ type=”imagelist” directory=”/images/M_images” default=”” label=”Indent Image 1″ description=”Image for the first sub-level” /> – lista obrazków z katalogu
  • <param name=”@spacer” type=”spacer” default=”” label=”” description=”” /> – linia pozioma

Listy wyboru:

<param name="indent_image" type="list" default="0" label="Indent Image"
description="Choose which indent image system to utilise">
			<option value="0">Template</option>
			<option value="1">Joomla! default images</option>
			<option value="2">Use params below</option>
			<option value="3">None</option>
</param>

Oraz liste opcji (radiobuttons):

<param name="full_active_id" type="radio" default="0" 
label="Full Active highlighting" description="PARAMFULLACTIVEHIGHLIGHTING">
			<option value="0">No</option>
			<option value="1">Yes</option>
</param>

W ten sposób definiujemy listę parametrów dla modułu. 

A jak tego użyć?

Równie prosto. W pliku z kodem modułu, czyli mod_nazwamodułu.php, o raz w plikach includowanych wystarczy że skorzystamy z obiektu $params zawierającego wszystkie parametry, które zostały ustawione dla naszego modułu:

echo $params->get('desc', 'Brak');

jako pierwszy parametr metody get() podajemy nazwę parametru który chcemy pobrać. Jako drugą podajemy wartość jaka ma zostać zwrócona w przypadku niepowodzenia, lub też pustego wyniku. I już. 

W ten sposób możemy bardzo łatwo dodać dodatkowy parametr na przykład do modułu mainmenu (problemem może się okazać sama budowa modułu mainmenu, która na początku moze się wydawać lekko zamotana). 

Pozdrawiam, Maciej

| Komentarze (2)

Joomla – Piszemy pierwszy moduł

Kiedy skrypt napotyka żądanie wyrenderowania jakiegoś modułu, wtedy za pomocą klasy JModuleHelper pobierana jest zawartość pliku modules/mod_nazwamodulu/mod_nazwamodulu.php – to tak w uproszczeniu, bo jeszcze w zależności od templatki moduł może być ubierany w jakieś divy albo tabelkę. A więc do programisty teoretycznie należy napisanie pliku mod_nazwamodulu.php. Praktycznie – też tak jest. Należy jednak pamiętać o pewnych “trendach” jakich powinno się trzymać pisząc moduły. Przez kilka następnych artykułów będziemy uczyć się właśnie tych trendów. Będziemy też powoli przyswajać budowę samej Joomli. Nie będziemy natomiast uczyć się PHP. To mam nadzieję już w jakimś stopniu jest opanowane

Po pierwsze – Plan

Musimy się najpierw zastanowić co chcemy zrobić i jakoś to rozplanować. Nasz moduł nie będzie zbyt skomplikowany. Jego działanie polegać będzie na wypisaniu na ekran “Hello world”. Całość więc zakodujemy po prostu w pliku mod_hello.php – ponieważ tak będzie nazywał się nasz komponent – mod_hello.

mod_hello

zobaczmy na poniższy kod

<?php
/**
 * Moduł mod_helloworld - stworzony na potrzeby www.morony.pl
 * autor Maciej Mucha, maciej@morony.pl
 */

defined('_JEXEC') or die('Direct Access to this
		 location is not allowed.');

echo 'Hello World!';

Jest to zwykły plik php. Wyjaśnienia wymaga linia sprawdzająca istnienie stałej ‘_JEXEC’. Jest to stała zdefiniowana w pliku index.php. Joomla cała opiera się właśnie na tym pliku. tzn wszystkie adresy naszej strony to index.php?… Nie ma więc potrzeby otwierania bezpośrednio jakiegokolwiek innego pliku (może to być nawet niebezpieczne). Sprawdzamy więc czy plik został wczytany za pomocą pliku index.php. Jeśli nie – wtedy blokujemy dostęp. tą klauzulę możemy znaleźć prakrycznie w każdym pliku php wchodzącym w skład joomli.

Kiedy jesteśmy już pewni że strona została wczytana prawidłowo przechodzimy do właściwego kodu. W tym przypadku kod nie wymaga chyba tłumaczenia 🙂

Skrypt się skończył.. A gdzie tag zamykający skrypt php? Nie jest on wymagany. A ponieważ plik który napisalismy ma być ładowany do innego pliku, wszelkie spacje czy inne białe znaki były by bardzo niepożądane, A takie zostały by wczytane gdyby wystąpiły po “?>”. Jest to praktyka przyjęta w Joomla 1.5, i będziemy ją stosować za każdym razem.

Pięknie – skrypt napisany. Ale co z tego? jak go teraz wgrać aby był dostępny z poziomu panelu administracyjnego? W Joomli służą do tego pliki instalacyjne XML.

Plik instalacyjny

nasz plik instalacyjny będzie wyglądał tak:

<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
	<name>Hello World</name>
	<author>Maciej Mucha - www.morony.pl</author>
	<creationDate>December 2008</creationDate>
	<copyright>Maciej Mucha - www.morony.pl</copyright>
	<license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
              </license>
	<authorEmail>maciej@morony.pl</authorEmail>
	<authorUrl>http://www.morony.pl</authorUrl>
	<version>1.5.0</version>
	<description>Moduł służący do wyświetlenia 
               informacji "Hellow World"</description>
	<files>
		<filename module="mod_hello">mod_hello.php</filename>
		<filename module="mod_hello">index.html</filename>
	</files>
</install>

O co tu chodzi? To proste, najpierw podajemy kilka informacji o sobie i o skrypcie które będą widoczne w panelu admina, oraz listę plików, które instalator przekopiuje na dysk.

Co jest ważne:

 

  • <install type=”module” version=”1.5.0″> – informacja o tym że instalujemy moduł, kompatybilny z joomlą 1.5.x i wyższe
  • <name>Hello World</name> – nazwa modułu wyswietlana w panelu administracyjnym
  • <filename module=”mod_hello”>mod_hello.php</filename> – parametr module=”mod_hello” zostanie przyjęty jako nasza nazwa modułu oraz katalog w kórym będzie dostępny moduł. Nie mylić z przyjazną nazwą wyświetlaną.
  • <?xml version=”1.0″ encoding=”utf-8″?> – ważne jest aby plik został zakodowany w kodowaniu które zadeklarowaliśmy. W przeciwnym wypadku instalator wurzuci błąd.
  • <filename module=”mod_hello”>index.html</filename> – w dobrym tonie jest, aby w każdym katalogu joomli znajdował się plik index.html o treści”<html><body bgcolor=”#ffffff”></body></html>

Instalujemy!

Aby móc przystąpić do instalacji musimy jeszcze spakować pliki (razem z plikiem instalacyjnym, który zapisujemy jao mod_hello.xml). Najlepiej do pliku mod_hello.zip. Następnie instalujemy komponent. 

1. Wybieramy instalator

 

2. Wybieramy plik i klikamy instaluj

 

3. Cieszymy się z zainstalowanego modułu.

 

Uruchamiamy moduł

1. Wybieramy moduły z menu

 

2. Tworzymy nowy moduł

 

3. Z listy wybieramy nasz moduł

 

4. Ustawiamy parametry wyświetlania modułu

 

5. Jeśli wszystko zrobiliśmy dobrze, powinniśmy zobaczyć coś takiego – działający moduł

Poprawki

To że moduł nam się zainstalował, nie znaczy jeszcze że będzie działał. Może się okazać, ze popełniliśmy jakiegoś babola i nasz moduł wywala błąd php. Nie musimy wtedy powtarzać całej procedury od początku. Wystarczy, że podmienimy odpowiedni moduł na serwerze i już (no i oczywiście potem w paczce z modułem, kiedy już będzie działał. 

Podsumowanie

Jak widać napisanie prostego modułu dla Joomli nie jest czymś szczególnie trudnym (choć nasz moduł nie robił za wiele). W następnych artykułach dowiemy się już jak napisać coś pożytecznego.

Pozdrawiam,

Much

| Komentarze (6)

Joomla – Przydatne kawałki kodu

Kiedy Piszę jakiś komponent albo moduł dla joomli są pewne partie kodu, które się często powtarzają. Postanowiłem je zebrać w jedno miejsce.

 

Blokowanie bezpośredniego dostępu do plików:

defined('_JEXEC') or die('Restricted access');

W pliku index.php zdefiniowana została stała _JEXEC – sprawdzamy czy ona istnieje, a więc czy uzytkownik załadował plik index.php

 

Blokowanie dostępu do treści niezalogowanym użytkownikom

$user =& JFactory::getUser();
if($user->guest){
	// kod dla niezalogowanego
} else {
	// kod dla zalogowanego
}

Do zmiennej $user zostaje załadowany objekt (klasy JUser) przechowujący dane a temat zalogowanego uzytkownika. Pole guest przechowuje informacje o tym czy uzytkownik jest zalogowany (boolean)

 

Informacje o zalogowanym użytkowniku

$user =& JFactory::getUser();
	$name = $user->name; // Imię
	$username = $user->username; // Nick
	$email = $user->email; // e-mail
	$id = $user->id; // unikalne ID
	$lastVisit=$user->lastvisitDate; // Data ostatniej wizyty
	$registerDate=$user->registerDate; // Data rejestracji
	$guest=$user->guest; // Czy gość (boolean)

 

Tworzenie zmiennej do wykorzystania w templatce przy wykorzystaniu modelu MVC

$zmienna='cokolwiek';
$this->AssignRef('zmienna' $zmienna);

 

Wykorzystanie zmiennej w templatce przy wykorzystaniu modelu MVC

<b><?php echo $this->zmienna; ?></b>

 

Pobranie wartości z pliku językowego

JText :: _('PLEASE LOG IN');

W odpowiednim pliku językowym zostanie znaleziona poniższa linia oraz pobrana będzie jej wartość. Jest to plik ini

PLEASE LOG IN=Proszę, zaloguj się.
Kolejne pomocne partie kodu będę dopisywł systematycznie.
Pozdrawiam,
Much

| Komentarze (1)

Joomla – Pisanie własnych modułów i komponentów

 

Kiedyś stworzenie małej strony domowej zajmowało dużo czasu.  Trzeba było zaprojektować ciekawy layout, napisać w HTMLu osobno każdą stronę. A jeśli nagle zachciało nam się dodać jedną pozycję w menu trzeba było edytować kilkanaście (kilkadziesiąt czasem) plików. Jeśli ktoś był ambitny, pisał stronę z użyciem php, co pozwalało na includowanie elementów powtarzających się na każdej stronie itp. W dalszym ciągu podmiana jakiejś treści była jednak żmudna. Czasy te minęły, gdy ludzie wymyślili systemy CMS. Jednym z najpopularniejszych i najlepszych tego typu rozwiązań jest Joomla!

Zalety Joomla:

  • Joomla jest darmowa. – Możemy ją wykorzystywać za darmo, bez ograniczeń i to nawet w komercyjnych projektach.
  • Joomla jest pisana przez ogromny zespół zapaleńców, którzy od kilku lat dopieszczają każdy szczególik kodu. Na 99%, jeśli w kodzie isntnieje jakiś babol, zostanie on znaleziony przez tych którzy naprawią ten błąd i wydadzą łatkę. Nie przez tych którzy go wykorzystają do zniszczenia strony.
  • Umożliwia bardzo proste tworzenie oraz instalowanie pobranych z internetu rozszeżeń – skórek, modułów i komponentów. 
  • Bogaty zbiór rozszeżeń oraz funkcji wbudowanych w joomle pozwala na stworzenie bardzo zaawansowanej strony internetowej.

 

Czym jest moduł a czym komponent?

Kiedy przeglądamy jakąś stronę internetową, zazwyczaj korzystamy z menu. Czyli takiej tam listy odnośników, które prowadzą nas w różne miejsca na witrynie. To gdzie się przeniesiemy po kliknięciu w link, to jest właśnie komponent. Jest to Jakaś trześć, która znajduje się w centralnym (zazwyczaj) miejscu strony. Przykładami komponentów mogą być Forum, Artykuł, sklep internetowy , Panel konfiguracji konta użytkownika, Lista najnowszych artykułów, Wyniki ankiety. 

Moduł natomiast jest mniejszym fragmentem kodu (tworzącego jakąś logiczną całość). Z których układamy wszystko znajdujące się dookoła komponentów. Np. Na górze witryny pokazuje nam się menu. Jest to własnie moduł. Modułami mogą też być: Panel logowania, Panel newslettera, Panel statystyk. 

To gdzie są wyświetlane moduły i treśc komponentu na stronie zależy od skórki. Tworząc skórkę (czego niedługą się nauczymy) definiujemy miejsca na moduły, oraz miejsce na treść komponentu – czyli miejsce gdzie będzie ładowana główna treść strony. Spójżmy na poniższy shcemat:

Na obrazku widzimy jakąś bardzo schematyczną skórkę. Na czerwono zaznaczono miejsce (najczęściej jakąś warstwę – <div>), do której jest łądowana zawartość aktualnie przeglądanego komponentu. Jeśli kliknąłeś w menu „Forum” wtedy w czerwonym polu wczyta się forum, a nie treść artykułu. Na stronie jednocześnie może być wyświetlony tylko jeden komponent.

Na niebiesko natomiast zaznaczono miesca (czyli inne warstwy HTML), do których będą ładowane moduły. Zawsze. Jeżeli miejscu każemy jakiemuś modułowi wyświetlać się w miejscu „top” wtedy za każdym razem i przy wczytaniu każdego komponentu, w miejscu „top” znajdziemy zawartość menu. (To nie jest do końca prawda. Przy tworzeniu modułu możemy zdefiniować na których stronach ma być on widoczny a na których nie. Technicznie rzecz biorąc wybieramy dla jakich pozycji menu (wszystkich menu dostępnych na witrynie) ma być widoczny dany moduł)

Twórca zdefiniował 7 miejsc na stronie, do których możemy wczytywać moduły:

 

  • Search – możemy tam wpakować moduł zarządzania użytkownikiem (wyloguj, konto, wiadomości), oraz moduł wyszukiwarki (czyli malutkie okienko z polem do wpisania słowakluczowego. Kiedy wciśniemy „szukaj” wczytana zostanie strona z komponentem „wyniki wyszukiwania” – czyli wyniki wyszukiwania wyświetlą się w czerwonym polu. Kiedy do jednego miejsca na moduły (nazwijmy to miejsce kontenerem) zostanie przypisanych kilka modułów, zostaną one wyświetlone wszystkie. Możemy za pomocą panelu administracyjnego ustawiać kolejność, a dodatkowo programista przy tworzeniu templatki ma możliwość wyboru w jaki sposób mają być wczytywane moduły (lista, każdy moduł w osobnej tabelce, czy też bez żadnego formatowania)
  • Top – Miejsce na menu. 
  • Route – Miejsce na moduł, który wyświetli aktualną pozycję użytkownika na stronie (np. www.adres.pl > forum > samochody > Tworzenie nowego wątku
  • Left, Right – obszerne miejsca na duże moduły takie jak ankieta, subskrypcja newslettera itp.
  • Footer – miejsce na stopkę. Może to być moduł „własny tekst HTML” – dzięki temu będziemy mogli łatwo zmienić treść stopki za pomocą panelu admina. Nie mielibyśmy takiej możliwości gdybyśmy zakodowali stokę bezpośrenio w skórce.
  • Info – Moduł dodatkowych informacji. Na przykład informacji o promocji.

 

Miejsca na moduły w templatce, często są napisane tak, że gdy nie ma przypisanego żadnego moduły, wtedy kontenery są nie widoczne. W powyższym przypadku na przykład gdy pozostawimy „info” puste, wtedy komponent może nam się przeciągnąć aż do „route”

Dzięki temu, możemy błyskawicznie w panelu włączać, wyłączać moduły oraz przenosić je z jednego kontenera na drugi.

Zalety płynące z tego, że piszemy w joomli

Ponieważ pliki modułów i komponentów, które piszemy są przetwarzane przez joomle, mamy dostęp do wszystkich jej klas. Np:

 

  • JUser – Pobieranie informacji o użytkownikach, tworzenie różnych poziomów dostępu do modułów i komponentów.
  • JText – Obsługa plików językowych.
  • JFactory – Np. Obsługa bazy danych Joomli.
  • JRequest – Obsługa metod GET, POST i FILE.

 

Komponent w praktyce:

 

  • Z reguły posiada swój panel administracyjny, który również możemy mu napisać. Na przykład komponent wczytujący z bazy danych dane o artystach muzycznych oraz ich albumach oraz bliźniaczy komponent w bazie danych do tworzenia nowych rekordów

 

Moduł w praktyce

 

  • Możemy zdefiniować (za pomocą pliku instalacyjnego) parametry, które będziemy ustawiać w panelu admina. Następnie możemy bardzo łatwo w kodzie modułu pobierać te ustawienia. Np. Moduł wyświetlający listę użytkowników. W zależności od parametru „wyświetlanie” (lista, tabelka, plain) moduł generuje inny kod – rekordy w postaci tabelki albo listy. Jest to najczęstrze wykorzystanie parametrów modułu.
  • Możemy utworzyć kilka egzemplarzy jakiegoś modułu. Każdy o swoich parametrach, oraz miejscu na stronie. Na przykład na wszystkich stronach po lewej moduł wyświetlający listę kategorii artykułów. A dodatkowo na jakiejś stronie wyświetlający listę trzech najbogatszych w artykuły. Praktycznie (w powiązaniu z bazą) działa to tak: 

 

Teraz kiedy już wiemy z czym będziemy mieli doczynienia możemy zacząć uczyć się pisać. Poniżej przedstawiam planowaną listę artykułów, które niedługo się ukażą.

Moduły:

 

  • Moduł „Hello world”
  • Budowa Modułów – Przypisywanie parametrów
  • JText – Tworzymy moduł z obsługą języków
  • JUser – „dostęp zablokowany, zaloguj się”
  • Korzystamy z bazy danych
  • Pożądkujemy kod
  • Moduł mod_latestnews – komentarz krok po kroku.

 

Komponenty:

 

  • Zasada działania i pierwszy komponent „Hello world”;
  • System trójwarstwowy – MVC
  • MVC – bardziej zaawansowanie
  • Komponent z panelem administracyjnym
  • Komponent w joomla + AJAX
  • JRequest – Obsługa formularzy itp
  • Dołączanie arkuszy css

 

Mam nadzieję że rozbudziłem waszą ciekawość, Zwłaszcza że w polskim internecie ciężko znaleźć cokolwiek na tamat pisania dodatków do joomli w zwartej formie. Do zobaczenia niedługo

 

| Komentarze (10)

LaTeX – strona tytułowa

Strona tytułowa powinna być prosta i czytelna! To zdanie twórcy LaTeX-a wzięli sobie głęboko do serca, ponieważ standardowy kod służący tworzeniu jej a przedstawiony poniżej tworzy dokładnie 3 linijki widoczne jeszcze niżej:

\documentclass[12pt,a4paper,titlepage]{report}
\author{Maciej Mucha}
\title{Badanie układu całkującego.}

\begin{document}

\maketitle

....

tyt

No delikatnie mówiąc nie rzuca na kolana to to. A przecież mogło by wyglądać na przykład o tak:

screen

Jak zmusić LaTeX-a, aby po podaniu mu w standardowy sposób autora, tytułu i daty wygenerował powyższą stronę? Wbrew pozorom – to bardzo proste.

Ogólne wprowadzenie

Jak wiemy (a przynajmniej powinniśmy) LaTeX udostępnia nam polecenie \maketitle, które generuje stronę tytułową. Tytułową czyli taką, która nie jest numerowana i nie zawiera nagłówka oraz stopki (No i jest na niej tytuł… Tak tylko przypominam). Aby móc się wkopać w to polecenie, musimy zrozumieć jak ono działa, a działa bardzo prosto. Kiedy my wykonujemy polecenie \maketitle, LaTeX zagląda (ja też zaglądnąłem – wy nie musicie) do pliku ze stylem dokumentu (report, article etc.), gdzie to polecenie jest zdefiniowane mniej więcej w taki sposób:

\newcommand\maketitle{\begin{titlepage}

 sratatata \@author sratatata \@date sratatata

 \@thanks sratatata \@title sratatata

 \end{titlepage}}

Co to oznacza? A to, że istnieje środowisko titlepage, wewnątrz którego wpisujemy po prostu na chama treść strony tytułowej, korzystając ze “zmiennych” które zamieniają się potem na autora itp… I to środowisko zapewnia nam:

  • Brak numeru strony (ściśle mówiąc strona ta ma numer 1 (niewyświetlany). Następna strona również ma nr 1)
  • Brak nagłówka i stopki
  • Przejście na następną stronę po zakończeniu generowania strony tytułowej

I dokładnie taki sposób my stworzymy własny “styl” tworzenia strony tytułowej. Za pomocą polecenie \renewcommand zredefiniujemy (zamienimy na swoje) polecenie \maketitle.

Z czego można korzystać tworząc treść strony tytułowej?

Redagowanie s.t. nie różni się niczym od normalnego redagowania dokumentu. W zasadzie można używać wszystkiego, Najczęściej jednak będziemy korzystać z:

  • Żonglerki wielkościami czcionek. Nie będę tu tłumaczył jak to działa. Jeżeli ktoś już czyta ten artykuł to chyba wie mniej-więcej na czym polega LaTeX.
  • Odstępy pionowe tworzone za pomocą polecenia \vspace
  • Linie poziome tworzone za pomocą \rule
  • Pogrubienia, kursywy
  • polecenia \@author, \@title, \@date, \@thanks – do wyświetlenia wartości pobranych przez polecenia \author, \title, \date, \thanks umieszczone przed \maketitle. Przypominam, że brak daty uzyskujemy za pomocą \date{\empty}}

Kod i wytłumaczenie niektórych aspektów

 

 

\documentclass[12pt,a4paper,notitlepage]{report}
\usepackage{polski}
\usepackage[T1]{fontenc}
\usepackage[cp1250]{inputenc}
\usepackage[top=2cm, bottom=2cm, left=3cm, right=3cm]{geometry}
\makeatletter
\newcommand{\linia}{\rule{\linewidth}{0.4mm}}
\renewcommand{\maketitle}{\begin{titlepage}
    \vspace*{1cm}
    \begin{center}\small
    Uniwersytet warszawski\\
    Wydział Fizyki\\
    Raport z pracowni elektronicznej
    \end{center}
    \vspace{3cm}
    \noindent\linia
    \begin{center}
      \LARGE \textsc{\@title}
         \end{center}
     \linia
    \vspace{0.5cm}
    \begin{flushright}
    \begin{minipage}{5cm}
    \textit{\small Autor:}\\
    \normalsize \textsc{\@author} \par
    \end{minipage}


    \vspace{5cm}

     {\small Praca wykonana pod przewodnictwem:}\\
         dr Tomasz Słupiński
     \end{flushright}
    \vspace*{\stretch{6}}
    \begin{center}
    \@date
    \end{center}
  \end{titlepage}%
}
\makeatother
\author{Maciej Mucha }
\title{Badanie układów cyfrowych}
\begin{document}
\maketitle
\end{document}
  • \makeatletter, \makeatother – Jak widać w kodzie użyliśmy paru poleceń, w których nazwie znalazła się “@”. Jest to niedozwolone, i samo użycie takiego polecenia generuje błąd. Aby temu zapobiec musimy uprzedzić LaTeX-a, że małpka to też literka. Służy do tego pierwsze z użytych poleceń. Drugie natomiast przywraca wszystko do normy
  • \vspace – odstęp pionowy. Gwiazdka oznacza, iż odstęp będzie działał nawet jeśli jest pierwszym lub ostatnim odstępem na stronie.
  • \newcommand{\linia}{\rule{\linewidth}{0.4mm}} – tworzymy sobie polecenie pomocnicze, wstawiające poziomą linię szeroką na 0.4mm a długą od prawego do lewego marginesu.
  • \noindent – W tym miejscu linia zaczyna nowy akapit, a więc tworzy się wcięcie i linia się przesuwa w prawo. Polecenie to usuwa wcięcie.
  • \minipage o szerokości 5cm – cały minipage jest wyrównany do prawej strony. Tekst w nim natomiast wyrównany jest do jego lewego brzegu a więc zaczyna się 5 cm od prawego marginesu strony. Taki Trik.
  • \vspace*{\stretch{6}} – duuży pionowy odstęp. Na tyle duży, że wystaje poza kraniec strony. Wyświetlenie daty znajduje się jeszcze dalej, ale LaTeX nie pozwala na wywalenie jednej linijki poza stronę, a więc efektem jest data wyrównana do dolnego marginesu.

Generalnie jak widać daje to wiele swobody a do tego jest bardzo proste. Zachęcam więc do oddawania raportów z ładnymi stronami tytułowymi, bo to co robi nam LaTeX własnoręcznie to gniot jednym słowem.

 

Pozdrawiam

Much

| Komentarze (9)

Silverfrost FTN95

Aby pisać programy w Fortranie potrzebujemy czegoś niezmiernie ważnego… tym czymś jest kompilator, a z tym w środowisku Windows nie jest łatwo. Najlepiej, jeżeli od razu ściągniecie sobie kompilator Silverfrost FTN95, który uwalnia nas od pieprzenia się w czarno-białym okienku MS-DOSa. (Przyznam się, że sam odkryłem go dopiero parę dni temu…) Co daje nam ten kompilator? Otóż proszę państwa daje nam “Plato3 IDE“! Wszyscy wiedzą co to znaczy IDE? Jeśli nie to napiszę. IDE to Zintegrowane środowisko programistyczne, a to znaczy że mamy do czynienia z zespołem aplikacji, wspomagających programowanie tak, a żeby stało się ono proste i przyjemne. Plato posiada to co każde szanujące się IDE powinno posiadać, czyli np. kolorowanie składni, wbudowany kompilator czy niekończące się “cofnij”

Po zainstalowaniu wchodzimy w Start/Silverfrost/Silverfrost FTN95/Plato3 IDE. Oczom naszym ukazuje się coś takiego:

jeden.jpg

Aby zacząć pisać musimy otworzyć nowy dokument. Robimy to poleceniem File/New, a następnie wybieramy z listy tym dokumentu. Nas interesują tylko dwa pierwsze typy dokumentu. “Free format Fortran file” i “Fixed format Fortran file” Fortran 77 ma “dziką” składnię, wywodzącą się jeszcze z taśm perforowanych. Począwszy od F90, można już używać formatu wolnego. Obie te rzeczy opiszę następnym razem. Tym razem wybierzmy “Fixed format Fortran file” a więc składnię f77. (UWAGA! To że wybierzemy typ pliku Fixed, nie oznacza iż będziemy używali F77 jako kompilatora. Kompilujemy za pomocą F95, który przełyka oba rodzaje kodu. Chodzi po prostu o różne kolorowanie składni.)

Aby do końca opisać podstawy obchodzenia się z programem musimy coś skompilować. Wpiszmy poniższy kod:

       PROGRAM pierwszy
       PRINT *, 'Hello World'
       END

Nie ważne jest teraz jak on działa, ważne co będziemy po kolei klikać aby działał. Oto pasek narzędzi:

dwa.jpg

Przed kompilacją wypada plik zapisać. Klikamy więc na dyskietkę. Następnie klikamy pierwsze trzy guziki na dolnym pasku (kompilacja, tworzenie pliku wykonywalnego, uruchomienie.) Jeśli wszystko poszło ok, to po kompilacji otrzymujemy informację o poprawnym jej przebiegu:

trzy.jpg

Następnie, po drugim kliknięciu otrzymujemy informację o poprawnej kompilacji, łączeniu oraz utworzeniu pliku wykonywalnego:

cztery.jpg

Gdy to wszystko przebiegło pomyślnie, możemy nacieszyć się widokiem tego co udało nam się stworzyć (najpierw trzeba jeszcze poczekać dwie sekundy, ponieważ na środku pojawia nam się mała reklama producenta…):

piec.jpg

Następnym razem zaczniemy się już zagłębiać w prawdziwego Fortrana. Najpierw opiszę Składnię F77, potem F90, a potem będziemy rozwiązywać już konkretne problemy związane z fortranem.

P.S. Goto jak widać prawie mnie już zmiótł swoimi postami ze strony głównej… Tak się stało że mój komputer odmówił posłuszeństwa i leży grzecznie w szafie i czeka na śrubokręt…

| Komentarze (2)

Fortran – wstęp

Można by się zastanawiać, po co babrać się w najstarszym języku programowania wysokiego poziomu. Ja jednak im dłużej w nim się babrzę twierdzę, że ma on wiele zalet i osoby zajmujące się dziedzinami naukowymi i inżynierskimi (jak na przykład fizycy) powinny go znać.

Do zalet języka należą:

  • Kod jest niezmiernie prosty.
  • Posiada typ complex (tryb liczb zespolonych).
  • Programy są bardzo szybkie.
  • Ogromna liczba bibliotek.
  • Przenośność kodu pomiędzy systemami operacyjnymi.

Oczywiście są też wady:

  • XXI wiek, a programy fortranowskie działają w “czarnym okienku”.
  • Z powodu trybu implikowanego można się pomylić.
  • Problematyczne operacje na łańcuchach znaków.

Niedługo na Blogu zaczną pojawiać się artykuły dotyczące nauki programowania w Fortranie, a następnie gdy złożą się one na mały kurs, zacznę opisywać rozwiązania konkretnych problemów.

much.

| Komentarze (9)

Rybka fizyka

Jak niektórzy wiedzą, na urodziny została mi podarowana rybka (Goto, Paulina, Baśka – dzięki). Nie wiem co ta rybka im zrobiła – nieważne – dali ją mi. Można by właściwie powiedzieć że dostałem cały zestaw “Mały sadysta”.

Zestaw składa się z:

  • Ośrodka nr.1 – Ośrodek jest sypki, masa około 500g, długość fali jaką odbija najlepiej to około 580nm (mówiąc nie po fizycznemu – żółty żwirek)
  • Ośrodka nr.2 – Zapach, przezroczystość oraz gęstość wskazuje na wodę, ale nie wierzę, że goto niczego nie dosypał…
  • Szklanego tak sądzę) tworu, nadającego więzy na położenie dla pozostałych elementów zestawu – r < R, gdzie R = 15cm.
  • Klocka, który w zadaniach standardowo jest używany do zsuwania się po równi pochyłej, która zsuwa się po równi pochyłej, umieszczonej w wiadrze, które jest zawieszone na układzie 27 bloczków, całość dzieje się w jadącym po wykresie funkcji sinus wagonie wypełnionym miodem.
  • Rybki właściwej

Niestety część zabawy została mi odebrana. Zestaw dostałem rozpakowany i zmontowany. Całość przedstawia się tak:

ryba

Początkowo rybka tymczasowo została nazwana dosyć popularnym w moim pokoju imienim “Maciek”. Doszedłem jednak do wniosku, że nie może tak być, że ktoś mnie woła a odwraca się ryba… Po paru dniach Maciek został przemianowany na Prosiaka. Od tej pory Prosiak grzecznie sobie żyje w moim akwarium i szykuje się do opisu tego co widzi… A widzi wiele! w końcu w jego pokoju mieszka dwóch fizyków i astronom… Ja bym na jej miejscu od razu zwariował. Swoją drogą, czy ta ryba nie została mi dana po to aby mnie kontrolować? Bo mam takie obawy.

Wraz z zestawem dostałem oczywiście karmę dla Prosiaka. Takie małe brązowe kuleczki. Spróbowałem – PFEEE!! No bez jaj, nie będę tym Prosiaczka mego karmił! Niestety nie znalazłem jeszcze odpowiednika. Wiem za to już czego Prosiak nie je. Otóż nie je:

  • Fasolki
  • Kanapek z boczkiem (nawet z majonezem!)
  • Ziemniaków
  • Karkówki w sosie cebulowo śmietanowy (Maćku, powinieneś się obrazić, mniamuśne było, a on nie chciał!)
  • Maślanki

Obawiam się, że będę musiał się z Prosiakiem dzielić McRoyall’ami. Od razu odpowiem na nasuwające się pytanie – nie wrzucałem tego wszystkiego do akwarium (goto mnie przestrzegł: “Masz tam kurwa nic nie wrzucać!”). Grzecznie pytałem: “Te! Prosiak! kcesz kanapke? Z boczkiem, dobra jest. Nie? Posmaruje ci majonezem! Nie to nie, głodna kurwa pływaj!”

Wbrew pozorom zestaw ten uczy nie tylko odpowiedzialności, ale także cierpliwości. Do tej pory:

  • Niczego tam nie dolałem (rozpałka do grilla, olej, Hoop-Cola… możliwości jest masę)
  • Nie podłączałem jej do prądu
  • Nie brałem jej do łap (no dobra raz, ale musiałem bo zmieniałem wodę…)
  • Nie zjadłem jej

Na zakończenie dodam, że bardzo dobrze żyje mi się z Prosiakiem w pokoju. A najlepsze jest to że jest całkiem inteligentny, załapał już liczenie pochodnych a jutro przechodzimy do całkowania…

much.

P.S. Przepraszam że napisałem ten post. Jest trzecia w nocy… O tej porze człowiek nie myśli racjonalnie .

| Komentarze (5)

Halo – co to jest i z czym to się je…

Halo (od greckiego hálos – tarcza słoneczna) – zjawisko optyczne zachodzące w atmosferze ziemskiej na kryształach lodu. Jest to świetlisty, biały lub zawierający kolory tęczy (wewnątrz czerwony, fioletowy na zewnątrz), pierścień widoczny wokół Słońca lub Księżyca. Część nieba wewnątrz kręgu jest wyraźnie ciemniejsza niż na zewnątrz. Zjawisko wywołane jest załamaniem na kryształach lodu i odbiciem wewnątrz kryształów lodu znajdujących się w chmurach pierzastych piętra wysokiego (cirrostratus) lub we mgle lodowej. Tak mówi wikipedia. A tak to wygląda:

 

Halo

Niestety to zdjęcie to ekstremalny przypadek. Uważa się nawet że jest to jedno z najbardziej spektakularnych i złożonych zdjęć halo. Połowy (a nawet większości) zjawisk widocznych na tym zdjęciu w życiu nie widziałem. Niektórych na pewno nie zobaczę, bo są ekstremalnie rzadkie. Najciekawsze jest to, że kilka zjawisk widocznych na zdjęciu (halo 22*, słońca poboczne, krąg parheliczny, górny łuk styczny i krąg okołozenitalny – które kiedy indziej opiszę czym to wszystko jest) jest bezproblemowo dostępna dla zwykłego człowieka. Ale i tak 90% ludzi nigdy tego nie widziało. Dlaczego? Po pierwsze ludzie nie patrzą (nie patrzycie…) w niebo. Popatrzcie czasami…. tych łuków to się można nieraz przestraszyć nawet. A nie są one wcale takie rzadkie. Najpospolitsze halo 22-stopniowe (czyli jasny świetlisty krąg o średnicy 22 stopni wokół słońca) to co kilka dni można zobaczyć. Nie raz utrzymuje się cały dzień.

Post ten jest takim małym wstępem. Niedługo zacznę się bardziej zagłębiać w opis zjawisk halo, mam nadzieję że kogoś do nich przekonam.

much.

 

| Komentarze (3)

Starsze wpisy »