Felhasználó tartalmainak száma típus szerint

thamas képe

Szeretnék egy blokkot a felhasználó profiljához (user/uid) ilyesféle tartalommal: "Ön eddig 6 receptet, 12 képet és 5 blogbejegyzést küldött be."

Vagyis meg kellene jeleníteni a felhasználónak az általa beküldött tartalmak számát típus szerinti bontásban. (Nem kellene látszani a webhelyen elérhető összes tartalomtípusnak, csak meghatározottaknak.)

Keresgéltem néhány órát, átnéztem a php snippeteket is a dorgon, s így annyi kiderült, hogy ez egy pár soros kóddal megvalósítható lenne (pl. http://drupal.org/node/292868). De pont ilyen kódot nem találtam.

Nézelődtem itt is, így láttam hasonló kódot (http://drupal.hu/forum/oldal-statisztika, http://drupal.hu/tippek/publisboard) találtam utalást viewsos módszerre is (http://drupal.hu/forum/user-activity), de a konkrét megoldást nem.

Ilyenkor érzem milyen jó lenne, ha lett volna már módom némi kódolás tanulásra...

Addig is, míg pótlom a hiányosságaim, megszánna valaki egy működő megoldással?

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

Kb. minden programozó tanfolyamon ezzel kezdünk. :D

pp

// $Id$
 
/**
 * @file
 *   User által beküldött tartalmak számát kiíró blokk.
 */
 
/**
 * hook_block() megvalósítás.
 */
function unc_block($op = 'list', $delta = 0, $edit = array()) {
  switch ($op) {
    case 'list' :
    return array(
                 0 => array(
                            'info' => 'Felhasználó tartalmainak száma',
                            'cache' => BLOCK_CACHE_PER_USER,
                            ),
                 );
 
    case 'view':
      switch ($delta) {
        case 0:
        return array(
          'subject' => 'Beküldött tartalmak',
          'content' => unc_block_get_content(),
      );
    }
  }
}
 
/**
 * A block tartalmának előállítása.
 */
function unc_block_get_content() {
  global $user;
 
  $list = array();
 
  $result = db_query('SELECT count(nid) AS db, type FROM {node}
                     WHERE status = 1 AND uid = %d
                     GROUP BY type', $user->uid);
  while ($row = db_fetch_array($result)) {
    $list[$row['type']] = $row['db'];
  }
  $types = node_get_types('names');
  return theme('unc_block_content', $list, $types);
}
 
/**
 * A theme hook megvalósítása
 */
function unc_theme () {
  return array(
               'unc_block_content' => array(
                                            'arguments' => array(
                                                                'list' => NULL,
                                                                'types' => NULL)
                                            )
               );
}
 
function theme_unc_block_content($list = array(), $types = array()) {
  $szoveg = array();
  foreach($list as $type => $db) {
    $szoveg[] = $db .' db '.$types[$type];
  }
  if (count($szoveg)) {
    return 'Következő tartmakat küldte be: '. join(', ', $szoveg). '.';
  }
  else {
    return 'Még nem küldött be tartalmat';
  }
}
0
0
thamas képe

Nagyon köszönöm pp!! Az általad itt leírt unc modul remekül működik!

Az elve az, hogy azokat a tartalom típusokat számolja, amikből küldött be legalább egyet a felhasználó.

Bonyolult lenne ezt úgy módosítani, hogy én adhassam meg (elég a kódban, nem kell ui), hogy mely tartalomtípusok számát szeretném látni?

Pl. "Józsi" beküldött 1 profil aqdatlapot, 2 receptet, 3 képet és 5 viccet. Én viszont a képeket és a blogbejegyzéseket szeretném kiírtani.

Vagyis ennek kellene látszani „Józsi” blokkjában: „Beküldött tartalmai: 3 Kép, 0 blogbejegyzés.”

Köszönöm mégegyszer!

(Valahogy csak megoldom, hogy legyen módom elsajátítani a php alapokat, aztán elmegyek hozzád egy Drupal programozó tanfolyamra... ;) )

0
0

Üdvözlettel:
Hajas Tamás

pp képe

function theme_unc_block_content($list = array(), $types = array()) {
  $szoveg = array();
  $mikel = array('story', 'page');
  foreach($mikel as $type) {
    $szoveg[] = (int)$list[$type] .' db '.$types[$type];
  }
  if (count($szoveg)) {
    return 'Következő tartmakat küldte be: '. join(', ', $szoveg). '.';
  }
  else {
    return 'Még nem küldött be tartalmat';
  }
}
0
0
nevergone képe

Viszont így kézzel kell hekkelnie a modulban, ha újabb tartalomtípust szeretne felvenni, na meg tudnia kell a tartalomtípusok rendszer-azonosítóját... :S

0
0
pp képe

Ennek nem értem mi értelme volt? Ha annyira nagyon tudod a frankót akkor mérnem tolod ide azt a pár sort amivel az admin felületen ezt is megteheti?

pp

0
0
thamas képe

Idézném az előző hozzászólásom egy részét:

...én adhassam meg (elég a kódban, nem kell ui), hogy mely tartalomtípusok számát szeretném látni

Én nagyon hálás vagyok pp-nek, hogy megoldja nekem azt a problémát, amivel én nem boldogulnék!

0
0

Üdvözlettel:
Hajas Tamás

nevergone képe

Természetesen, pláne ha nem nagyon kell piszkálgatnia az embernek. Nem akartam leszólni pp megoldását, mert amúgy jó (bár többen rebesgetik, hogy "coding standard") és használható. Sajnálom, hogy ez nem jött át, a mosoly pedig lemaradt.

0
0
pp képe

Kik azok a többen? Pontosan a "coding standard" melyik részét sérti a kód? Továbbra is inkorrektnek tartom, hogy idejössz fikázni és mindenfajta konkrét információ nélküli homályos utalgatásokat teszel csak. Ha van valami problémád a kóddal akkor azt írd le, a forrásokra utalj, ha meg jobbat tudsz akkor azt írd ide. Ennyi.

Továbbra sem értem miért zavar, hogy egy sminkfüggvényt a modul írója a modulban módosít a megrendelő kérésére és nem a sminkben írják felül a html kimenetet. Ez utóbbit ugyanis könnyedén meg lehetne tenni, tehát a modul átírása nélkül is könnyedén elérhető lett volna ez a változtatás. Úgy gondolod azt kellett volna írnom Thamasnak, hogy a sminkje template.php-jában hozzon létre egy függvényt ilyen és ilyen néven és oda másolja be ezt és ezt???

Ha meg csak viccelsz, akkor miért marad le mindkétszer a mosolygó? Vagy ezek amolyan NGegyesek, amin már Te se nevetsz?

pp

0
0
nevergone képe

Semmi a célom, én benéztem egy hibát, ezt bevállalom, illetve mások információira hagyatkoztam, már volt ilyen. :)
Jó a kód, a Coder modul szerint megfelelő a formázás.
Nem akartalak felbosszantani, bocs.

0
0