2014-08-28 4 views
1

Я искал решение о том, как сохранить данные из интерфейса joomla. Я натолкнулся на следующий код для контроллера и модели, который отлично работает. Но я искал стандартную практику, как это делал в задней части, используя jform, jtable и т. Д. В следующем коде (внутри модели) техника сохранения не выглядит такой привлекательной. И я абсолютно не знаю, как реализована проверка на стороне сервера.сохранение данных из joomla frontend

Возможно, это сбивает с толку, поэтому я хотел бы повторить, что в бэкэнд нам даже не нужно писать функцию добавления или сохранения или обновления, она автоматически обрабатывается основными классами с проверкой на стороне клиента и на стороне сервера , Поэтому я искал что-то подобное.

Контроллер

<?php 

// No direct access. 
defined('_JEXEC') or die; 

// Include dependancy of the main controllerform class 
jimport('joomla.application.component.controllerform'); 

class JobsControllerRegistration extends JControllerForm 
{ 
    public function getModel($name = 'Registration', $prefix = 'JobsModel', $config = array('ignore_request' => true)) 
    { 
     return parent::getModel($name, $prefix, array('ignore_request' => false)); 
    } 

    public function submit() 
    { 
     // Check for request forgeries. 
     JRequest::checkToken() or jexit(JText::_('JINVALID_TOKEN')); 

     // Initialise variables. 
     $app = JFactory::getApplication(); 
     $model = $this->getModel('Registration'); 

     // Get the data from the form POST 
     $data = JRequest::getVar('jform', array(), 'post', 'array'); 

     $form = $model->getForm(); 
     if (!$form) { 
      JError::raiseError(500, $model->getError()); 
      return false; 
     } 

     // Now update the loaded data to the database via a function in the model 
     $upditem = $model->updItem($data); 

     // check if ok and display appropriate message. This can also have a redirect if desired. 
     if ($upditem) { 
      echo "<h2>Joining with us is successfully saved.</h2>"; 
     } else { 
      echo "<h2>Joining with us faild.</h2>"; 
     } 

    return true; 
    } 
} 

Модель

<?php 

// No direct access to this file 
defined('_JEXEC') or die('Restricted access'); 

// Include dependancy of the main model form 
jimport('joomla.application.component.modelform'); 
// import Joomla modelitem library 
jimport('joomla.application.component.modelitem'); 
// Include dependancy of the dispatcher 
jimport('joomla.event.dispatcher'); 
/** 
* HelloWorld Model 
*/ 
class JobsModelRegistration extends JModelForm 
{ 
    /** 
    * @var object item 
    */ 
    protected $item; 

    /** 
    * Get the data for a new qualification 
    */ 
    public function getForm($data = array(), $loadData = true) 
    { 

     $app = JFactory::getApplication('site'); 

     // Get the form. 
     $form = $this->loadForm('com_jobs.registration', 'registration', array('control' => 'jform', 'load_data' => true),true); 

     if (empty($form)) { 
      return false; 
     } 
     return $form; 
    } 

    //Nwely added method for saving data 
    public function updItem($data) 
    { 
     // set the variables from the passed data 
     $fname = $data['fname']; 
     $lname = $data['lname']; 
     $age = $data['age']; 
     $city = $data['city']; 
     $telephone = $data['telephone']; 
     $email = $data['email']; 
     $comments = $data['comments']; 

     // set the data into a query to update the record 
     $db = $this->getDbo(); 
     $query = $db->getQuery(true); 
     $query->clear(); 

     $db =& JFactory::getDBO(); 
     $query = "INSERT INTO #__joinwithus (`id`, `firstname`, `lastname`, `age`, `city`, `telephone`, `email`, `comment`) 
    VALUES (NULL,'" . $fname . "','" . $lname . "','" . $age . "','" . $city . "','" . $email . "','" . $telephone . "','" . $comments . "')"; 

     $db->setQuery((string)$query); 

     if (!$db->query()) { 
      JError::raiseError(500, $db->getErrorMsg()); 
      return false; 
     } else { 
      return true; 
     } 
    } 
} 

Может кто-нибудь любезно указать мне хороший учебник или поделиться мне компонент, который имеет дело с формой в веб-интерфейсе с Joomla 2.5.

ответ

0

Вы должны иметь возможность напрямую использовать методы jcontrollerform, вместо того, чтобы писать свой собственный метод submit() - метод (и updItem()), как вы. Я описываю что-то подобное here. Это означает, что вы показываете вашу форму обычным способом, используя jform и использовать действие = "вариант index.php? = Com_jobs & задачу = сохранить & вид = регистрация & ID = whateverid"

Таким образом jcontrollerform-> Сохранить() является который, в свою очередь, вызывает сохранение вашей модели(). (Хм, это, вероятно, означает, что ваша модель должна расширять JModelAdmin вместо JModelForm, чтобы включить соответствующие методы.) Это проведет все необходимые проверки проверки и т. Д.

Возможно, вам потребуется зарегистрировать пути для модели, таблицы и формы, которые вы хотите использовать, как я делаю в ссылке.

Вам необходимо указать идентификатор в параметрах URL, если вы редактируете существующие данные, поскольку параметр jform [id] - будет проигнорирован.

Извините, у меня нет хорошего учебника или что-то еще для вас, надеюсь, что это поможет.

+0

ОК после того, как форма подавшее контроллер-> Сохранить() вызывается и в свою очередь, модельно> Save() также вызывается. Но как модель узнает, с какой таблицей базы данных она должна взаимодействовать? Здесь отсутствует JTable – raaman

+0

Если у вас есть jtable in/administrator, вы можете указать путь к этому. Если нет, я думаю, вам нужно написать класс jtable ... – jonasfh

+0

, если бы вы могли поделиться мной, как выглядит ваш контроллер и модель, тогда это было бы оценено @jonasfh cos i до сих пор не могу понять вещи – raaman

3

использовать следующий код в вашей модели

$data = $app->input->getArray($_POST); 
$query = $db->getQuery(true); 
Смежные вопросы