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, &$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 = "SELECT DISTINCT $sessioninfocolumn[uid]
FROM $sessioninfotable
WHERE $sessioninfocolumn[uid] = $args[userid] and $sessioninfocolumn[lastused] > '$activetime'";
$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->fields;
// All successful database queries produce a result set, and that result
// set should be closed when it has been finished with
$result->Close();
// Return if the user is online
if ($online > 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 == "") {
$avatar = 'blank.gif';
}
if ($maxLength > 0) {
// truncate the user name to $maxLength chars
$showLength = strlen($uname);
$truncEnd = ($maxLength > $showLength) ? $showLength : $maxLength;
$unamet = substr($uname, 0, $truncEnd);
}else {
$unamet = $uname;
}
$buddies = pnModAPIFunc('ContactList','user','getall',
array( 'bid' => $uid,
'state' => 1,
'sort' => 'uname'));
$bcount = count($buddies);
if (!empty($class)) {
$class = ' class="' . DataUtil::formatForDisplay($class) . '"';
}
$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->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.
Możesz komentować ten wpis także bezpośrednio na