Vítejte, kolemjdoucí
Uživatelské jméno Heslo: Pamatovat si mne

zápis funkce pro všechny registrované uživatele
(1 prohlížející) (1) host
  • Strana:
  • 1
  • 2

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

zápis funkce pro všechny registrované uživatele 2 let, 1 měsíc #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.
  • NEPŘÍTOMEN
  • Uživatel
  • Příspěvky: 17

Re: zápis funkce pro všechny registrované uživatele 2 let, 1 měsíc #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
  • NEPŘÍTOMEN
  • Joomla Expert
  • Příspěvky: 1083
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ě.
Následujcí uživatel říká 'Děkuji': Fry

Re: zápis funkce pro všechny registrované uživatele 2 let #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.
  • NEPŘÍTOMEN
  • Uživatel
  • Příspěvky: 17
Poslední úprava: 2 let Napsal Mark L..

Re: zápis funkce pro všechny registrované uživatele 2 let #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
  • NEPŘÍTOMEN
  • Joomla Expert
  • Příspěvky: 1083
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: 2 let Napsal karel0.

Re: zápis funkce pro všechny registrované uživatele 2 let #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.
  • NEPŘÍTOMEN
  • Uživatel
  • Příspěvky: 17

Re: zápis funkce pro všechny registrované uživatele 2 let #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...tors.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
  • NEPŘÍTOMEN
  • Joomla Expert
  • Příspěvky: 1083
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: 2 let Napsal karel0.
  • Strana:
  • 1
  • 2
Doba nahrání stránky: 0.45 vteřin

Poslední novinky z fóra

Další témata »

Joomlaportál si prohlíží...

Právě přítomno: 432 hostů a jeden člen

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