Недавно начал изучать программирование под Joomla. В PHP разбираюсь нормально. Решил не много изменить тестовый компонент. Так что б он на фронт енде позволял, пользователям писать данные в 2 текстовых поля, а потом сохранял их в базу данных, но сохраний не происходит, ошибку не пишет, но ничего не сохраняет, вот код всех файлов. Файл Hello.php в корне Код (PHP): <?php defined('_JEXEC') or die('Restricted access'); // Create the controller $classname = 'HelloController'.$controller; $controller = new $classname(); // Perform the Request task $controller->execute( JRequest::getVar('task')); // Redirect if set by the controller $controller->redirect(); ?> Файл controller.php в корне Код (PHP): <?php jimport('joomla.application.component.controller'); class HelloController extends JController { function save() { $model = $this->getModel('hello'); if ($model->store($post)) { $msg = JText::_( 'Greeting Saved!' ); } else { $msg = JText::_( 'Error Saving Greeting' ); } // Check the table in so it can be edited.... we are done with it anyway $link = 'index.php?option=com_hello'; $this->setRedirect($link, $msg); } } ?> Файл models/hello.php Код (PHP): <?php // Check to ensure this file is included in Joomla! defined ('_JEXEC') or die(); jimport( 'joomla.application.component.model' ); class HelloModelHello extends JModel { function store() { $row =& $this->getTable(); $data = JRequest::get( 'post' ); // Bind the form fields to the hello table if (!$row->bind($data)) { $this->setError($this->_db->getErrorMsg()); return false; } // Make sure the hello record is valid if (!$row->check()) { $this->setError($this->_db->getErrorMsg()); return false; } // Store the web link table to the database if (!$row->store()) { $this->setError( $row->getErrorMsg() ); return false; } return true; } } Файл tables/hellos.php Код (PHP): <?php // No direct access defined( '_JEXEC' ) or die( 'Restricted access' ); class TableHello extends JTable { var $id = null; var $lagin = null; var $pass = null; function TableHello(& $db) { parent::__construct('#__hello', 'id', $db); } } Файл views\hello\view.html.php Код (PHP): <?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.application.component.view'); class HelloViewHello extends JView { function display($tpl = null) { $model = $this->getModel(); $greeting = $model->getauth(); $this->assignRef( 'greeting', $greeting ); parent::display($tpl); } } ?> Файл \views\hello\tmpl\default.php Код (PHP): <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php // no direct access defined('_JEXEC') or die('Restricted access'); ?> <h1><?php echo print_r($this->greeting); ?></h1> <h1><?php echo $this->greeting[0]['lagin']; ?></h1> <h1><?php echo $this->greeting[0]['pass']; ?></h1> <h1><?php echo $this->greeting[1]['lagin']; ?></h1> <h1><?php echo $this->greeting[1]['pass']; ?></h1> <form action="<?php echo $link = JRoute::_( 'index.php?option=com_hello&controller=hello&task=save'); ?>" method="post" enctype="application/x-www-form-urlencoded"> <input name="lagin" type="text" size="20" maxlength="16"> <input name="pass" type="text" size="20" maxlength="16"> <input type="hidden" name="option" value="com_hello" /> <input type="hidden" name="task" value="" /> <input type="hidden" name="controller" value="hello" /> <input name="Submit" type="submit" value="Отправить"> </form> SQL запрос для создания таблицы Код (PHP): CREATE TABLE #__hello ( id int(11) NOT NULL auto_increment, lagin varchar(25) NOT NULL, pass varchar(25) NOT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO #__hello (lagin,pass) VALUES ('vipTelnet','12465448'), ('Slavik','alknerlj23'), ('Ciao_Mondo!','234werw344');
Код (PHP): function TableHello(& $db) { parent::__construct('#__hello', 'id', $db); } Может тут стоит указать необходимые поля для записи ?
В документации по API написано. Код (html): Object constructor to set table and key field Can be overloaded/supplemented by the child class access: protected JTable __construct (string $table, string $key, &$db, object $db) string $table: name of the table in the db schema relating to child class string $key: name of the primary key field in the table object $db: JDatabase object &$db Мне не понятно куда там писать поля для записи?
Запаковал компонент обратно в архив, Архив во вложении. Нужно что б на стороне сайта пользователь мог вводить данный в тестовые поля, а из админки их было видно. Есть есть время глянь пожалуйста.