Back to top

Autore Topic: non-object e store()  (Letto 1004 volte)

Offline skypatrik

  • Nuovo arrivato
  • *
  • Post: 12
  • Sesso: Maschio
    • Mostra profilo
non-object e store()
« il: 03 Gen 2011, 11:08:58 »
Dopo un po' ho iniziato a capire le prime cose di come si crea un componente... così sto facendo un componente che è un ibrido tra il tutorial "hello world" e "my_form". In pratica sto cercando di creare un form che mi inserisca dei dati in una tabella e ovviamente mi fermi nel caso abbia già inserito lo stesso dato.

L'errore che mi viene fuori nel momento che invio il "form" è:

Codice: [Seleziona]
Fatal error: Call to a member function store() on a non-object in /****/joomla/components/com_hello/controller.php on line 34
Questo è il controller.php

Codice: [Seleziona]
<?php
/**
 * Hello World default controller
 * 
 * @package    Joomla.Tutorials
 * @subpackage Components
 * @link http://dev.joomla.org/component/option,com_jd-wiki/Itemid,31/id,tutorials:components/
 * @license GNU/GPL
 */

jimport('joomla.application.component.controller');

/**
 * Hello World Component Controller
 *
 * @package HelloWorld
 */
class HelloController extends JController
{
/**
 * Method to display the view
 *
 * @access public
 */
function display()
{
parent::display();
}

function submit() {
$data JRequest::getVar('myform', array(), 'post''array');
$model =& $this->getModel('myform');

if ($model->store($data)) {
$this->setRedirect(JRoute::_('index.php?option=com_hello'false), JText::_'Modulo Inviato con Successo' ));
} else {
$view =& $this->getView('myform''html');
$view->setModel($model);
$view->assignRef('data'$data);
$view->display();
}
}

}
?>

Questo è la classe di implementazione JTable

Codice: [Seleziona]
class TableHello extends JTable

{

/**

* Primary Key

*

* @var int

*/

var $id = null;



/**

* @var string

*/

var $greeting = null;



/**

* Constructor

*

* @param object Database connector object

*/


/*function TableHello(& $db) {

parent::__construct('#__hello', 'id', $db);

}

*/



var $cln = null;

var $msg = null;

var $data = null;



function __construct(& $db) {

parent::__construct('#__trn1', 'id', $db);

}



function check() {

if (trim($this->cln) == '') {

$this->setError (JText::_('Inserire il Clan.'));

return false;

}

if (trim($this->msg) == '') {

$this->setError(JText::_('Inserire un messaggio.'));

return false;

}



return true;

}

}

E questa è la classe dove c'è la funzione store()

Codice: [Seleziona]
class HelloModelHello extends JModel
{
/**
* Gets the greeting
* @return string The greeting to be displayed to the user
*/
function getGreeting()
{
$db =& JFactory::getDBO();

$query = 'SELECT * FROM #__users';
$db->setQuery( $query );
$greeting = $db->loadAssocList();

return $greeting;
}

var $form = array(

'name' => 'myform',

'id' => 'myform',

'fields' => array (

array('label'=>'Clan', 'name'=>'myform[cln]','id'=>'cln'),

array('label'=>'Note', 'name'=>'myform[msg]', 'id'=>'msg', 'rows'=>10, 'cols'=>40, 'type'=>'textarea'),

array('name'=>'Invia', 'type'=>'submit'),

array('name'=>'myform[id]', 'id'=>'id', 'value'=>'', 'type'=>'hidden'),

array('name'=>'option', 'value'=>'com_hello', 'type'=>'hidden'),

array('name'=>'task', 'value'=>'submit', 'type'=>'hidden')

)

);

function getForm() {

global $Itemid;



$this->form['fields'][] = array('name'=>'Itemid', 'value'=>$Itemid, 'type'=>'hidden');

return $this->form;

}



function store($data) {

$row =& $this->getTable();



if (!$row->bind($data)) {

JError::raiseWarning(500, $row->getError());

return false;

}



if (!$row->check()) {

JError::raiseWarning(500, $row->getError());

return false;

}



$row->data = date('Y-m-d H:i:s');



if (!$row->store()) {

JError::raiseWarning(500, $row->getError());

return false;

}



return true;

}
}

Fatemi capire perchè non prende sto benedetto oggetto (che mi pare aver capito che sia l'array con i dati da inserire)

Offline mattialori

  • Appassionato
  • ***
  • Post: 412
    • Mostra profilo
Re:non-object e store()
« Risposta #1 il: 11 Gen 2011, 20:30:48 »
il model si chiama HelloModelHello non getForm come lo richiami nel controller, quindi dovrai usare getModel('Hello'); sempre se la tua applicazione si chiama Hello, altrimenti non so se te lo prende. Il nome della classe di un model è composto da nome_estensioneModelnome_model
« Ultima modifica: 11 Gen 2011, 20:32:54 da mattialori »

 



Web Design Bolzano Kreatif