Vítejte, Host
Uživatelské jméno Heslo: Pamatovat si mne
  • Strana:
  • 1
  • 2

Téma: zápis funkce pro všechny registrované uživatele

zápis funkce pro všechny registrované uživatele 23. čen 2012 02:22 #94978

Prosím o radu jak napsat funkci s cyklem, která by mi provedla "něco" pro všechny registrované. Nebo alespoň pro registrované s ID např. od 1 do 10. Konkrétně mi jde o úpravu pluginu JoomAutoCat 2.0. (Tento vytváří pro nově se registrující a/nebo pro přihlášeného uživatele novou kategorii v Joomgallery. Potřebuji to upravit tak, aby funkce vytvořila nové kategorie pro všechny uživatele (mám jich 850, což ručně prostě nedám). Zatím jsem skončil už na tom, že mi to nefunguje ani pro uživatele konkrétně zadaného ID. Díky za každou radu.
public function onUserLogin($user, $options)
{
  $user =& JFactory::getUser(43);
    {
      $db           = JFactory::getDBO();
      $user_object  = JUser::getInstance($user['username']);

      $user['id']   = $user_object->get('id');
      $user['name'] = $user['fullname'];

      $query = $db->getQuery(true)
            ->select('COUNT(cid)')
            ->from('#__joomgallery_catg')
            ->where('owner = '.(int) $user['id']);
      $db->setQuery($query);
      if(!$db->loadResult())
      {
        $this->_createCategory($user);
      }
    }
    return true;
 }
  • Mark L.
  • Avatar uživatele Mark L.
  • OFFLINE
  • Uživatel
  • Příspěvky: 17
  • Obdržená poděkování 10
Administrátor zakázal veřejné příspěvky.

Re: zápis funkce pro všechny registrované uživatele 24. čen 2012 22:36 #95057

pokud jsem pochopil správně - potřebujete jednorázově vytvořit pro 850 uživatelů kategorie.
Není jednodušší to tedy vytvořit na straně DB než vymýšlet funkci na jedno použití?

Pokud ne, s čim konkrétně potřebujete poradit? (Napsaná celá funkce není jen rada)

Ještě jinak - pokud
$this->_createCategory($user);
vytváří potřebné kategorie pro $user tak by Vám mělo stačit jedním SQL dotazem se zeptat na všechny potřebné uživatelé (vyber všechny, kteří nejsou v #__joomgallery_catg); cyklem projít všechny záznamy a vytvořit kategorie.

mělo by stačit nastudovat:
docs.joomla.org/Accessing_the_database_u...ssocList.28.24key.29
php.net/manual/en/control-structures.foreach.php
  • karel0
  • Avatar uživatele karel0
  • OFFLINE
  • Joomla Expert
  • Příspěvky: 1083
  • Obdržená poděkování 290
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
Administrátor zakázal veřejné příspěvky.
Následující uživatel poděkoval: Fry

Re: zápis funkce pro všechny registrované uživatele 26. čen 2012 01:35 #95103

Díky za reakci.
Ano, pochopils to správně. Potřebuju jednorázově vyrobit 850 kategorií. Taky jsem si myslel, že je jednodušší to udělat na straně DB, ale po několika dnech příprav jsem vše provedl a když jsem začal do jednotlivých kategorií nahrávat obrázky zjistil jsem, že to není správná cesta, protože při klasickém vyrobení kategorie se přečíslovává spousta různých id a to není v lidských silách ohlídat v případě ručního zásahu do DB.
Nicméně jsem zkusil na základě tvých poskytnutých linků něco stvořit, bohužel něpremáva: Warning: Invalid argument supplied for foreach() in
{
$query = "SELECT DISTINCT a.username, a.userid, a.name"
."\n FROM #__users AS a"
."\n WHERE (a.userid = a.id)";
$_CB_database->setQuery($query);
$rows = $_CB_database->loadObjectList();
   
print_r($rows);

foreach($rows as $row) {
   $db = JFactory::getDBO();
   $row_object  = JUser::getInstance($row['username']);
   $row['id']   = $row_object->get('id');
   $row['name'] = $row['fullname'];
   $this->_createCategory($row);
}
  • Mark L.
  • Avatar uživatele Mark L.
  • OFFLINE
  • Uživatel
  • Příspěvky: 17
  • Obdržená poděkování 10
Poslední úprava: 26. čen 2012 01:37 od Mark L..
Administrátor zakázal veřejné příspěvky.

Re: zápis funkce pro všechny registrované uživatele 26. čen 2012 08:34 #95105

Při "debugování" je vhodné někdy zobrazit výsledný dotaz (query) a pokusit se jej provést v db:
- MySQL admin napoví víc v čem je chyba
- je vidět struktura výsledků (hlavně složitějších) dotazů

imho, pokud není $_CB_database dříve definováno (a pokud je, nemusíte přeci použít zrovna tuto proměnnou) chybí deklarace před setQuery:
$_CB_database = JFactory::getDBO();
a poslední řádka v cyklu by měla být:
$this->_createCategory($row['id']);
  • karel0
  • Avatar uživatele karel0
  • OFFLINE
  • Joomla Expert
  • Příspěvky: 1083
  • Obdržená poděkování 290
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
Poslední úprava: 26. čen 2012 08:36 od karel0.
Administrátor zakázal veřejné příspěvky.

Re: zápis funkce pro všechny registrované uživatele 27. čen 2012 00:52 #95114

Dík za rady. Jsem úplná programátorská lama a přiznám se, že řeším něco čemu zrovna moc nerozumím. Podle tvých rad jsem si odladil dotazy v MySQL Adminu. To by mělo být OK. Ale pořád mi to jako celek nechodí. Pokusil jsem se to tentokrát poupravit a zapracovat do fungujícího pluginu, který to stejné (tj. vyrobení kategorie) udělá pro uživatele, který se právě přihlásil. Moje úprava spočívající v tom, aby po přihlášení libovolného uživatele se kategorie vytvořily všem bohužel nefunguje právě správně. Vím, že je to blbost, ale pro moje ladění jsem to takto udělal a pokud vyrobím jednou to množství 850 kategorií, tak plugin v této upravené podobě už nebude třeba.
Ta moje úprava způsobí, že se sice vytvoří kategorie, bohužel jen jedna a jmenuje se 4. Místo podle nějakého username se jmenuje číslem. Vůbec netuším, kde se mi to bere. Přitom id všech uživatelů (teď mám pro testy pouze 3 uživatele) jsou v rozmezí 42-44.
Pomalu ztrácím víru. Už jsem na tom strávil tolik hodin času a pořád to nechodí.

Můj upravený plugin, resp. jeho funkce:
public function onUserLogin($user, $options)
  {
	$db =& JFactory::getDBO();
	$query = 'SELECT `username`'
	. ' FROM `j25_users`'
	. ' WHERE username=username';
	$db->setQuery( $query );
	$clens = $db->loadObject();
	if($clens){
		$clen_object = JUser::getInstance($clens->username);
		foreach($clens as $clen){
	  		$clen['id']   = $clen_object->get('id');
      		        $clen['name'] = $clen['fullname'];
	  		$query = $db->getQuery(true)
            	            ->select('COUNT(cid)')
            	            ->from('#__joomgallery_catg')
            	            ->where('owner = '.(int) $clen['id']);
	  		$db2 =& JFactory::getDBO();            
      		        $db2->setQuery($query);      
	            if(!$db2->loadResult())
      		    {
       		    $this->_createCategory($clen['id']);
      		    }
		}
	} 
    return true;
}
funkce createCategory:
protected function _createCategory($clen)
  {
    // Get the interface
    require_once JPATH_ROOT.DS.'components'.DS.'com_joomgallery'.DS.'interface.php';
    $jinterface = new JoomInterface();

    // Create the category
    switch($this->params->get('categoryname'))
    {
      case 0:
        if($jinterface->getJConfig('jg_realname'))
        {
          $category->name = $clen['name'];
        }
        else
        {
          $category->name = $clen['username'];
        }
        break;
      case 1:
        $category->name   = $clen['name'];
        break;
      default:
        $category->name   = $clen['username'];
        break;
    }
    $category->owner  = $clen['id'];
    if($parent = $this->params->get('parent'))
    {
      $category->parent_id = intval($parent);
    }
    if($access = $this->params->get('access'))
    {
      $category->access = $access;
    }
    $category->published = $this->params->get('published');

    $jinterface->createCategory($category);
  }
  • Mark L.
  • Avatar uživatele Mark L.
  • OFFLINE
  • Uživatel
  • Příspěvky: 17
  • Obdržená poděkování 10
Administrátor zakázal veřejné příspěvky.

Re: zápis funkce pro všechny registrované uživatele 27. čen 2012 01:12 #95115

$query = 'SELECT `username` FROM `j25_users` WHERE username=username';
username=username je podezřelé ( má ten dotaz nějaký smysl? )

$clen['name'] = $clen['fullname'];
provede přiřazení hodnoty vpravo k proměnné vlevo - viz třeba students.kiv.zcu.cz/doc/php5/manual/cs/l...ators.assignment.php.
mělo by být obráceně:
$clen['fullname'] = $clen['name'];

jinak na "programátorskou lamu" výborný level :)
...kontakt - viz PM (soukromé zprávy)
  • karel0
  • Avatar uživatele karel0
  • OFFLINE
  • Joomla Expert
  • Příspěvky: 1083
  • Obdržená poděkování 290
Znáte-li řešení, sdělte ho - pomůžete ostatním při řešení stejného problému, i případný "rádce" bude vědět, poradil-li správně nebo špatně.
Poslední úprava: 27. čen 2012 01:18 od karel0.
Administrátor zakázal veřejné příspěvky.
  • Strana:
  • 1
  • 2
Vygenerováno za 0.208 sekund
Powered by Kunena fórum

Nové možnosti

Fórum umožňuje využít službu Tapatalk z vašeho mobilního zařízení.

Poslední novinky z fóra

Joomlaportál si prohlíží...

Právě přítomno: 352 hostů a 4 členové

Joomla!® je registrovaná ochranná známka společnosti Open Source Matters. © 2004-2012 JoomlaPortal.cz - provozováno Testudo corp. s.r.o. Powered by Twitter Bootstrap Framework. Design by Linelab.org

Jakékoliv užití obsahu včetně převzetí, šíření či dalšího zpřístupňování článků, diskuzních příspěvků a dalších textů je povolenou jen se souhlasem provozovatele.

Domů | Licence | O komunitě Joomla | Kontakty | Hledat na webu