Własny moduł w Joomla!

Dużo klikam w tym frameworku ENG i PL ostatnimi czasu, więc postanowiłem się podzielić swą nikłą wiedzą. Na początek info jak stworzyć własny moduł. Jak piszą w różnych artykułach i książkach moduł ogranicza się najczęściej do wyświetlenia prostych informacji. W standardowej instalacji joomli nie znajdzie się link z możliwością wylogowania użytkownika. Potrzebowałem takiej funkcjonalności więc napisałem kilka linii kodu, które dodają taką możliwość. Jedyne czego nie ma tutaj to jakieś sensowne wyświetlenie tego na stronie. Ale każdy (poza mną) kto zna się na CSS na pewno sobie z tym poradzi.
Mój moduł korzysta z komponentu user, który jest w każdej instalacji joomla. Jeżeli ktoś będzie używać Community Builder, wystarczy podmienić komponent i taski. Niektóre się pokrywają. Ja zrezygnowałem z tego rozszerzenia, ponieważ nie pozwala on na taką konfiguracje, której potrzebowałem. Poza tym nie chciałem płacić za pozbycie się odnośnika do ich strony.
Przejdźmy do rzeczy, z braku lepszego pomysłu nazwę moduł login2. Wszystkie modułu w joomla mają prefix mod, wiec właściwa nazwa będzie mod_login2. Mamy nazwę, teraz trzeba stworzyć plik z kodem php.

mod_login2.php

<?php
defined( '_JEXEC' ) or die( __FILE__.' - restricted access' );

if( JFactory::getUser()->guest )
{
    $link1 = "<a href=index.php?option=com_user&view=login>Logowanie</a>";
    $link2 = "<a href=index.php?option=com_user&task=register>Rejestracja</a>";
}
else
{
    $link1 = '<a href=index.php?option=com_user&view=user&layout=form>Profil</a>';
    $link2 = '<a href=index.php?option=com_user&task=logout>Wylogowanie</a>';
}
$display = $params->get( 'DisplayUserName', 0 );
if( $display )
{
    $username = JFactory::getUser()->name;
    if(!isset($username))
    {
        $username = "Gość";
    }
}
?>
<div class="Login">
    <?php
    if( $display )
    {
        echo '<span class="username">';
        echo $username;
        echo '</span>';
    }
    ?>
    <span class="action1">
        <?php echo $link1;?>
    </span>
    <span class="action2">
        <?php echo $link2;?>
    </span>
</div>

I teraz kilka słów uwagi:
@2 – Pisząc w joomla nie zezwala się na bezpośrednio dostęp do kodu, zawsze musi to zostać wywołane przez framework. Jeżeli ktoś chce być bardziej chytry niż my czeka go nie miła niespodzianka. Dodatek w postaci __FILE__ jest tylko dla nas, na wypadek gdybyśmy sami się przechytrzyli i nie wiedzieli gdzie.
@4 – Sprawdzamy czy aktualny użytkownik się zalogował czy jest anonimowym surferem.
@6,7 i 11,12 – w zależności czy stanu zalogowaniu ustawiamy właściwe linki logowanie, rejestracja lub (po zalogowaniu) profil i wyloguj.
@14 – z ustawień modułu pobieramy ustawienia, a tym za chwile. Decydujemy czy chcemy wyświetlić dodatkową linie z nazwą użytkownika lub @20 – gość.
@24 i dalej – tutaj już prawie czysty kod html z prostą wstawką php. Teraz jest to wrzucone w div, natomiast jeżeli jest przygotowane miejsce w template (jak to się odmienia?) to w ustawieniach użytkownika można wybrać pozycje, gdzie linki powinny się znajdować. Na razie skorzystam z div i span.

Dodatkowy plik z konfiguracja modułu, przydatny podczas instalacji i konfiguracji (@14)

mod_login2.xml

<?xml version="1.0" encoding="UTF-8"?>
<install type="module" version="1.5">
    <name>Login2</name>
    <author>js</author>
    <creationDate>2010</creationDate>
    <copyright>Some</copyright>
    <licence>GPL</licence>
    <authorEmail>jaroslawKROPKAstadnickiMAŁPKAgmailKROPKAcom</authorEmail>
    <authorUrl>jsthedeveloper.blogspot.com</authorUrl>
    <version>1.0</version>
    <description>Moduł wyświetlający dodatkowe opcje logowania</description>
    <files>
        <filename module="mod_fplogin">mod_login2.php</filename>
    </files>

    <params>
        <param name="DisplayUserName" type="radio" default="0" label="Wyswietlić nazwę użytkownika" description="Wyświetla dodatkową linię z nazwa zalogowanego użytkownika, lub gość jeżeli osobnik nie podjął się trudu logowania">
            <option value="0">No</option>
            <option value="1">Yes</option>
        </param>
    </params>
</install>

I lecimy z opisem:
@2 – info że to moduł
@wszystko aż do 12 – bla bla bla opisy, kto, kiedy i gdzie go można znaleźć wszystko widoczne po instalacji modułu.
@12:14 – lista plików wchodzących w skład modułu. Można dodawać podkatalogi jeżeli ktoś lubi porządek i ma więcej niż jeden plik.
@16 – tutaj zaczyna się lista parametrów
@17 – name Poprzez ten identyfikator będziemy się odnosić do tego parametru, patrz php linia 14
type – tutaj korzystam z prostego wyboru 1/0, test zamknięty nie można się pomylić. Radio button może zawierać więcej niż dwa pola.
label Nazwa którą zobaczy użytkownik w panelu admina.
description popup który się pojawi jak mysz zatrzyma się na dłużej nad polem.

Jak instalować?

Są trzy sposoby, ale tylko dwa normalne.
1) Spakować do zipa i wskazać zipa jako źródło instalacji
2) Trzymać w jakimś katalogu i wskazać katalog jako źródło instalacji
3) Skopiować do joomli do katalogu modulesmod_login2 i potem zhakować bazę danych. Jako że to jest głupi pomysł nie będę tej myśli rozwijać bardziej.

Na bank gdzieś coś pomyliłem. Pytania?

Tęczowy kod blogaska

Jak obiecałem tak zrobiłem. Zebrałem swoje leniwe dupsko i zrobiłem (skopiowałem) piękne kolorowanie kodu w postach. Kilka kroków jak dokonać tego samego.

1. Korzystam z takiego chytrego rozwiązania: http://code.google.com/p/syntaxhighlighter Należy zaciągnąć paczkę i rozpakować.
2. Znaleźć stronę która umożliwi upload plików i podlinkowanie się do nich. Jak skorzystałem z podpowiedzi i zapodałem sobie pustą stronę na https://sites.google.com/site/sites/
Tam wrzuciłem na root wszystkie pliki z paczki. Pominąłem te z katalogu uncompressed.
3. W blogerze trzeba wyedytować plik z templatem. BLOG -> PROJEKT -> EDIT HTML i teraz zaczyna się prawdziwy ultra mega hard core połączony z grindem i blekiem.

Bierzemy ten kod i wklejamy w template zaraz za head.

  


A ten kawałek trzeba zapodać zaraz przed zakończeniem się body:

  
  dp.SyntaxHighlighter.ClipboardSwf = 'http://twojadomena/twojdostep/clipboard.swf';   
  dp.SyntaxHighlighter.BloggerMode();  
  dp.SyntaxHighlighter.HighlightAll('code');   

Daliście radę? Najs – mega szacun.
Po taki zabiegu napisanie <pre name=”code” class=”cpp”> i wrzucenie kodu do takie części powinno spowodować ładny i kolorowy kodziczek na stroniczce. Z tego co zauważyłem shCore.js musi być jako pierwsze na liście. Nie znam nie wnikam czemu i czy zawsze. Jeżeli będziecie potrzebować inny styl wystarczy je dołączyć do listy.

W tym przykładzie jest tylko cpp.

#include
/* ten komentarz jest dobry :) jezeli usunę całkowicie komentarze, to include powoduje pojawienie się dodatkowej lini za '}', jeżeli zostawię jak jest to wszystko jest w porządeczku z kodem */
/* w dodatku jezeli koment jest w lini z inludem to się robi szary, widać nie wszystko działa idealnie, ale i tak lepiej niż czarno-biały tekst */
void main( void )
{
std::cout

Inspiracja vel motywacja

“Jak mi się nie chce” – powiedziałem do bliżej nie określonej osoby, siedząc samotnie w mieszkaniu. I tak strzelił prawie miesiąc. W końcu zmuszając się do zrobienia czegokolwiek pomyślałem “zaciągnąłeś demoscenę to oglądaj” tak też zrobiłem i podziałało cuda. Wierzcie lub nie, ale jestem strasznym zazdrośnikiem. Strasznie zazdroszczę ludziom tego, że coś robią, że mogą się pochwalić, a inni mogą to podziwiać. Tak więc wiedziony zazdrością i żądzą chwały i milionów (fanów, dolarów, wywiadów, etc) ponownie zabrałem się do pracy. Jak się okazało praca też mnie motywuje, może nie sama praca, a raczej postęp w pracy i jej efekty. Na razie i tak nie wiele widać, ale mi to wystarczy. Może dodam jeszcze, że mała żółta karteczka pomaga mi skupić się na tym co mam robić:

  • pracować
  • uczyć się
  • ćwiczyć
  • czytać
  • pisać
  • tutaj nazwa super tajnego projektu, mającego przynieść mi wyżej wymienioną chwałę i bogactwo

Spisane tak po prostu, nie sortowane. Pisałem na żywo, tak jak każdy wpis na blogasku. Niby takie proste, a nie mogłem się zając żadną z tych czynności przez prawie miesiąc.
Cytując małego r, “nie poddaje się” i walczę dalej.

Co was inspiruje do dalszego działania moi nieistniejący czytelnicy?

z gorącymi przeprosinami za wpis
js

Jakość czy też jak woli empik “Jakaść”

Siedzę na tej zsyłce, patrze i napatrzyć się nie mogę – jak można pewne proste rzeczy tak spierdolić. Proste sprawy jak odczytanie ramki z sieci, prosty switch w środku i jak to może nie zadziałać? Ano może się okazuje – jak się chce to koledzy z B. centrum chujozy potrafią. Jak? A to proste! Nikt tutaj nie robi review kodu, a jeżeli zrobi się i to tak mają to głębiej my. Może dlatego że używają operatora “?” – z tym, nic strasznego, każdy na studiach musiał poznać zasadę działa tego dziada. Ale tutejsi przechodzą samych siebie, przykład: “a?b:c?d:e?f:g?h:i;” są tutaj takie kwiatki. Kod poprawny, a potem jak chcesz to zrozumieć to gorzej. Rozumiem goto, nawet polubiłem bo czasem ratuje dupsko, ale czy taki kod jest w porządku:

success:
  return S_OK;
fail:
  assert( FALSE );
  return E_FAIL:

Do tego dochodzi magiczny sposób formatowani kodu, który czytelny staje się nie wiem kiedy. Jeszcze nigdy nie widziałem tak złego formatowania. Bardzo często zdarza mi się uznać wywołanie funkcji za definicje jakiejś struktury (sic!).

Być może jest jeszcze jeden problem, a nawet dwa. Obiecuję dzisiaj więcej nie kaleczyć języka polskiego.
Raz – podczas pracy siedzią na facebook czy na czatach i zamiast być skupionym na robocie, wchodzić w zone, zen, nirwane, czy co tam klikają to, nie lubię tamtego i umawiają się na randki.
Dwa – brak odpowiedzialności. Jak się coś zjebie, to wszyscy bekną. Jak muszkieterzy 😉 Nie ważne czy robisz czy klikasz, masz pensję, a robotę jak nie ty, to ktoś inny odwali. Jak się zjebie, to trudno, przecież to nie ja pisałem.

Panowie wystarczy chcieć pisać dobrze, a z czasem się wszystko ułoży.
Tym oto mądrym zdaniem kończę kolejny żałosny wpis.

porady jak lepiej, najlepiej, wunder

dzone – nie wiem czy znacie (pewnie tak), to taki agregator hiciorów z neta. Mam rssy od nich ze stronki i często można tam (zresztą nie tylko u nich), znaleźć wpis o tym co zrobić by być lepszym programistą, menagierem, testerem. Jak lepiej robić to i tamto lepiej czy w ogóle super. Praktycznie zawsze jest przy tym jakaś cyferka 8 sposobów, 3 drogi, 13 uproszczeń, bla bla bla. Już prawie się uodporniłem na takie wpisy, choć czasem się skuszę i kliknę i jak zwykle jestem zawiedziony – czemu? Bo zawsze jest to samo! Rób review, debuguj, skup się, testuj, … Którego nie klikniesz to na pewno takie punkty tam będą. Moje proste pytanie po co się z tym ciągle powtarzać?

Tak chciałem się tym podzielić z moim słitaśnym blogaskiem. Następny razem takiego linka nie kliknę 😉 (mam nadzieje).

Chcesz się pożalić, albo mnie wyśmiać – napisz
js