user_profile.tpl.php

ordi képe

Sziasztok!

Szeretném a felhasználók adatlapján megjelenítettni, hogy online vagy offline-e a user,..
Megvan a kód hozzá. Mondom először mit csináltam aztán hogy mi nem jó.:)

létrehoztam a sminken belül egy user_profile.tpl.php-t a következő tartalommal:

print "<div class=\"fields\">";
$time_period = variable_get('user_block_seconds_online', 2700);
$uid = arg(1); // get the current userid that is being viewed.
$users = db_query("SELECT uid, name, access FROM {users} WHERE access >= %d AND uid = $uid", time() - $time_period);
          $total_users = db_result($users);
 
          if ($total_users == 1) {
            $output = t('A felhasznalo jelenleg online');
          }
          else {
            $output = t('A felhasznalo jelenleg offline');    
          }
 
              print $output;
                      print "</div>";

illetve egy template.php-t (eddig nem volt)

ezzel a tartalommal:

/**
* Catch the theme_user_profile function, and redirect through the template api
*/
function phptemplate_user_profile($account, $fields = array()) {
  // Pass to phptemplate, including translating the parameters to an associative array. The element names are the names that the variables
  // will be assigned within your template.
  /* potential need for other code to extract field info */
  return _phptemplate_callback('user_profile', array('account' => $account, 'fields' => $fields));
  }

Ez így működik de ez így szimplán csak felülírja az eredeti profillapok megelenését így csak azt jeleníti meg hogy "Jelenleg a felhasználó..."

Szeretnáém ha a többi mezőm is megjelenne, tehát kibővülne a profillap és nem felülíródna...

Köszi a segítséget!

Ördi

Drupal verzió: 
Fórum: 
pp képe

Ezt a kódot ne használd éles rendszeren és olyanon se ami elérhető az interneten keresztül! Éles rendszerről azonnal szedd le!

Javítva:

$uid = arg(1); // get the current userid that is being viewed.
$users = db_query("SELECT uid, name, access FROM {users} WHERE access >= %d AND uid = %d", time() - $time_period, $uid);

pp

0
0
nevergone képe

Mondjuk én ilyen stílusban írom a lekérdezéseket, mert így láttam, és így szoktam meg, de azért érdekelne (és nyilván az utókornak se jönne rosszul), hogy pontosan mi a gond a másikkal?

0
0
aboros képe

User-supplied arguments to the query should be passed in as separate parameters so that they can be properly escaped to avoid SQL injection attacks.

tehát a válasz: tu avojd sql indzseksön etteksz

_soha_ nem rakunk változót a lekérdezésbe direktbe bele.

0
0

-
clear: both;

pp képe

Akkor szokd meg máshogy vazzeg! Hol láttad ezt? Ugye nem a PHP 24 óra alatt c. könyvben, mely már akkor elavult volt amikor megjelent magyar nyelven.

Mondd, hogy csak vicc volt! Lécci, lécci, lécci!

pp

0
0
nevergone képe

Félreértetted, olyan stílusban szoktam meg és használom, ahogy te írtad. Ezért nem is vágtam hirtelen a hiba okát, de közben utánaolvastam alaposabban. :)

Amúgy az kezdőknek nem rossz könyv, bár tény, hogy komolyabb munkához nem is elég. :)

0
0
pp képe

tényleg...

Elnézést!
Kérek engedélyt meghunyászkodni!

pp

0
0
nevergone képe

Nem történt semmi, és nagyra értékelem, hogy legalább figyelsz az ilyenekre! :)

0
0
aboros képe

csak nem tudja miért kell így és miért tilos úgy.

0
0

-
clear: both;

nevergone képe

Így van, ismertem néhány "SQL injection" sebezhetőséget, de ezt pont nem, talán keveset olvasom mások kódjait, és csak a jókból tanulok. :)

0
0
nevergone képe

ordi képe

sajnos nem jön össze ez nekem. Ezzel a kóddal mit is kell csinálnom?

Ja amugy localhoston csináltam, csak akkor teszem fel az oldalra ha már minden oké... ezek szerint még jó hogy nem jött össze:)

Ördi

0
0
zserno képe

Onnantól, hogy felülírtad a theme_user_profile() függvényt, az eredeti megjelenést is teljesen felülbíráltad. Tehát mindent a user_profile.tpl.php fájlodban kell kinyomtatni. Ezért neked kell kézzel beleírnod a hiányzó részeket. Ez viszont egyszerű, mondjuk hozzámásolod még az eredeti theme_user_profile() eljárásból ezt:

  $output = '<div class="profile">';
  $output .= theme('user_picture', $account);
  foreach ($fields as $category => $items) {
    if (strlen($category) > 0) {
      $output .= '<h2 class="title">'. check_plain($category) .'</h2>';
    }
    $output .= '<dl>';
    foreach ($items as $item) {
      if (isset($item['title'])) {
        $output .= '<dt class="'. $item['class'] .'">'. $item['title'] .'</dt>';
      }
      $output .= '<dd class="'. $item['class'] .'">'. $item['value'] .'</dd>';
    }
    $output .= '</dl>';
  }
  $output .= '</div>';

És persze a végén echo $output;
(pp kódjával pedig helyettesítsd az általad beküldött kód megfelelő sorát.)

0
0
ordi képe

sehogy se jön nekem össze, hagyom is az egészet. ehez még béna vagyok:(

köszönöm szépen a segtséget azért!

Ördi

0
0
aboros képe

emitt:
http://drupal.hu/forum/felhasználói-név-színezése-csoport-tagság-szerint

0
0

-
clear: both;

ordi képe

valaki leírja nekem egyben a komplett kódot hogy lássam mit szúrtam el?:(( idegesít hogy nem műkszik...
mindkét fájl tartalma kellene:)

köszi előre is
Ördi

0
0
aboros képe

azon leírta valaki a komplett kódot. nézzed már meg azt a szemeiddel!

0
0

-
clear: both;

ordi képe

ez más téma...

te a színezést írtad engem ebben a fórumban más érdekel...

az meg eleve nem nekem szól, mert én cck+bioval dolgoztam mint írtam és nem csoportot hanem cck mező alapján kellene színeznem...

Ördi

0
0
aboros képe

megkeveredtem a sok user-related cucc között. elnézést.

0
0

-
clear: both;

ordi képe

semmi probléma, örülök neki hogy próbáltok segíteni:)

majd meghálálom egyszer ha lesz rá lehetőségem:)

ha beregel a társkeribe valami jó csaj, küldök elérhetőséget nektek :)))

ördi

0
0
zserno képe

Ím:

$output = "<div class=\"fields\">";
$time_period = variable_get('user_block_seconds_online', 2700);
 
// Itt a pp altal is javasolt biztonsagos megoldas.
$uid = arg(1); // get the current userid that is being viewed.
$users = db_query("SELECT uid, name, access FROM {users} WHERE access >= %d AND uid = %d", time() - $time_period, $uid);
 
$total_users = db_result($users);
 
if ($total_users == 1) {
  $output .= t('A felhasznalo jelenleg online');
}
else {
  $output .= t('A felhasznalo jelenleg offline');    
}
 
$output .= "</div>";
 
// Innentol ez mar az eredeti theme_user_profile() tartalma.
$output .= '<div class="profile">';
$output .= theme('user_picture', $account);
foreach ($fields as $category => $items) {
  if (strlen($category) > 0) {
    $output .= '<h2 class="title">'. check_plain($category) .'</h2>';
  }
  $output .= '<dl>';
  foreach ($items as $item) {
    if (isset($item['title'])) {
      $output .= '<dt class="'. $item['class'] .'">'. $item['title'] .'</dt>';
    }
    $output .= '<dd class="'. $item['class'] .'">'. $item['value'] .'</dd>';
  }
  $output .= '</dl>';
}
$output .= '</div>';
 
echo $output;  

Ezután még a bio hozzácsapja a saját tartalmát és kész.
Megjegyzés: A t() függvényt csak angol szöveggel szabad használni. Majd ezt lehet később magyarítani. Így is működik, de nem ajánlott.

0
0
ordi képe

köszönöm szépen. működik ugyan, de nem jó...
az adatlapokon megjelenik de csak nekem írja ki hogy online, mindenki másnak offline van (aki jelen van az oldalon annak is)
másrész a privatemessage modulom se működik tőle rendesen (gondolom a template.php kavar be neki):(

0
0