Kaik i jego historie

Strona główna blogu

Blog prowadzony przez: kaik

Kategorie

RSS Subskrybuj RSS

Wszystkie blogi

Odwiedź pozostałe blogi lub załóż swój własny!

...wszystkie blogi

Kaik i jego historie

Moje przemyślenia i paranoje na różne tematy związane z internetem...

Mister Wong iconTechnorati iconDigg icondel.icio.us iconma.gnolia iconFurl iconNewsvine iconReddit iconYahoo MyWeb iconBlinkbits iconGoogle iconSimpy iconBlogmarks icon

Jak i po co napisać plugin

Plugin to fajna sprawa jest i bardzo pomaga w organizacji i w rozbudowie strony o ciekawą funkcjonalność...

Co to jest plugin?

Plugin - hmm po ogólną definicję odsyłam na Wikipedię my zajmiemy się pluginami wykorzystywanymi w Zikuli.

To funkcja, zamknięta w pliku .php każdy pisany przez Ciebie plugin powinien wylądować w /public_html/themes/nazwa_twojego_theme/plugins

Pluginy, które już są napisane i które możemy wykorzystać znajdują się w:
/public_html/system/pnRender/plugins

Po co?

Mamy zmienną uid lub uname, czyli ID użytkownika lub jego nazwę np: w szablonie posta na forum (dizkus_user_singlepost.html). Oczywiście znajduje się ona w jakiejś zmiennej np < !--[ $post.poster_data.uid ]-- > i teraz chcielibyśmy wyświetlić avatar użytkownika.
Dizkus wysyła zmienną avatar wraz z informacjami o użytkowniku wysyłającego posta, więc po co kombinować?

A gdybyś chciał mieć informacje o użytkowniku np: avatar status online ilość znajomych link dodaj jako znajomego napisz wiadomość itp...

SÄ… 2 rozwiÄ…zania:

1.Stworzyć to w html za pomoca pluginu np: pnusergetvar pobrać dane, które chcemy wyświetlić złożyć ładnie w html i zrobione... minus jest taki, że w każdym miejscu, w którym chcesz wywołać ten sam wygląd musisz kopiować kod zmieniać zmienną z uid i w sumie jak coś chcesz zmienić musisz zmieniać wszędzie - zakładając że masz news artykuły komentarze forum blogi to bardzo dużo zmieniania z miejsca mówisz pas i strona stoi i się nie rozwija.

2. Stworzyć plugin

< !--[mojsuperplugin uid=$zmiennaZ_ID_usera class"nazwa klasy css" ]-- >

Taki plugin już jest!

Tak jest modyfikator userprofilelink, ale on nie daje pełni władzy to znaczy to co już jest napisane zawsze będzie Cię ograniczać, a wystarczy trochę pracy i możesz napisać coś co będzie podawać dokładnie takie informacje jakie chcesz np: ranking użytkownika na stronie ilość znajomych ilość postów cokolwiek...

Jak napisać plugin.

 

Code

</p><br /> function smarty_function_pnuserinfo($args, &amp;$smarty) { // check arguments $assign = isset($args['assign']) ? $args['assign'] : null; $default = isset($args['default']) ? $args['default'] : null; $uid = isset($args['userid']) ? (int)$args['userid'] : null; $class = isset($args['class']) ? $args['class'] : null; $maxLength = isset($args['maxLength']) ? $args['maxLength'] : 0; $dom = ZLanguage::getModuleDomain('Profile'); $profileModule = pnConfigGetVar('profilemodule', ''); $messageModule = pnConfigGetVar('messagemodule', ''); // Get database setup $pntable = pnDBGetTables(); // get active time based on security settings $activetime = adodb_strftime('%Y-%m-%d %H:%M:%S', time() - (pnConfigGetVar('secinactivemins') * 60)); // It's good practice to name the table and column definitions you are // getting - $table and $column don't cut it in more complex modules $sessioninfocolumn = $pntable['session_info_column']; $sessioninfotable = $pntable['session_info']; // Get items $sql = &quot;SELECT DISTINCT $sessioninfocolumn[uid] FROM $sessioninfotable WHERE $sessioninfocolumn[uid] = $args[userid] and $sessioninfocolumn[lastused] &gt; '$activetime'&quot;; $result = DBUtil::executeSQL($sql); // Check for an error with the database code, and if so set an appropriate // error message and return if ($result === false) { return LogUtil::registerError(__('Error! Could not load data.', $dom)); } // Obtain the item list($online) = $result-&gt;fields; // All successful database queries produce a result set, and that result // set should be closed when it has been finished with $result-&gt;Close(); // Return if the user is online if ($online &gt; 0) { $onlinestatus = '<a><img src="/images/icons/extrasmall/greenled.gif" title="' . DataUtil::formatForDisplay(__('On-line')) . '" alt="' . DataUtil::formatForDisplay(__('On-line')) . '" /></a>'; } else { $onlinestatus = '<img src="/images/icons/extrasmall/redled.gif" title="' . DataUtil::formatForDisplay(__('Off-line')) . '" alt="' . DataUtil::formatForDisplay(__('Off-line')) . '" />'; } if ($uid) { $avatar = pnUserGetVar(_YOURAVATAR, $uid, $default); $uname = pnUserGetVar(uname, $uid, $default); } else { $avatar = pnUserGetVar(_YOURAVATAR, -1, $default); $uname = pnUserGetVar(_YOURAVATAR, -1, $default); } if ($avatar == &quot;&quot;) { $avatar = 'blank.gif'; } if ($maxLength &gt; 0) { // truncate the user name to $maxLength chars $showLength = strlen($uname); $truncEnd = ($maxLength &gt; $showLength) ? $showLength : $maxLength; $unamet = substr($uname, 0, $truncEnd); }else { $unamet = $uname; } $buddies = pnModAPIFunc('ContactList','user','getall', array( 'bid' =&gt; $uid, 'state' =&gt; 1, 'sort' =&gt; 'uname')); $bcount = count($buddies); if (!empty($class)) { $class = ' class=&quot;' . DataUtil::formatForDisplay($class) . '&quot;'; } $avatarimg = '<img alt="' . DataUtil::formatForDisplay(__('Personal information')) . '" />'; $string ='<div><a title="' . DataUtil::formatForDisplay(__('Personal information')) . ': ' . $uname . '">' . $avatarimg . '</a><em>' . $unamet . '</em><span>' . $onlinestatus . '<a><img src="/images/icons/extrasmall/mail_generic.gif" title="' . DataUtil::formatForDisplay(__('PM')) . '" alt="' . DataUtil::formatForDisplay(__('PM')) . '" /></a><a><img src="/images/icons/extrasmall/agt_family.gif" title="' . DataUtil::formatForDisplay(__('Znajomi')) . '" alt="' . DataUtil::formatForDisplay(__('Znajomi')) . '" />' . $bcount . '</a></span></div>'; if ($assign) { $smarty-&gt;assign($assign, $result); } else { return $string; } } <p>

W trakcie tworzenia :)

Po skończonej pracy kiedy napisałeś już swój plugin i wstawiłeś go wszędzie tam gdzie chcesz możesz myśleć dalej hmm np: drop down menu przy każdym użytkowniku z linkami do profilu do newsów do ogłoszeń do bloga itp...Wystarczy, że dodasz to raz w jednym miejscu i będziesz miał to zrobione wszędzie.







Komentarze

    Możesz komentować ten wpis także bezpośrednio na

Odpowiedz do

Znaki HTML nie są dozowolone (za wyjątkiem zawartch pomiędzy znacznikami [code][/code])

  • Opcje