12.01.2012, 06:29 PM
Мої вітання вам на цьому форумі. Зараз займаюся розробкою компонента для Joomla 1.7 (по факту вчусь їх писати для джумли). Написав схожий компонент до HelloWorld, який наведено в документації до Joomla 1.7. Розібрався що куди вписувати в моделі, в переглядачі і в шаблоні, щоб необхідні дані з БД та операції з ними можна було вивести у фронтальній частині. Але зтикнувся з наступною проблемою, не знаю як (і не зміг знайти) як обробляти дані із форми (фронтальна частина). Знаю як ще одну модель добавити, переглядач із шаблоном (надіюся що знаю), але чи то контролер правильно написати не можу, чи що. Для прикладу взяв завантажити файл на сервер. Простий php-код працює, а от спробував побудувати згідно моделі MVC і файл не завантажує, і помилок не вибиває.
erosion/view.html.php
Код форми в шаблоні (erosion/tmpl/default.php) наступний:
upload/view.html.php
class ErosionViewUpload extends JView
Код форми в шаблоні (upload/tmpl/default.php) наступний:
Код із моделі наступний (models/upload/upload.php):
в папку controllers добавив файл upload.php із кодом:
Підкажіть будь-ласка, що я не так написав, або що не дописав. Бо сильно хочу розібратися як використовувати кілька контролерів, моделей, шаблонів, як і коли їх вибирати, які посилання робити на них у формах (поле action), буду радий любому матеріалу, де це буде описано. Бо треба зробити компонент, який реагує на дії користувача, зокрема файл треба буде завантажувати на сервер, а розібратися на прикладах, які є вже реалізовані в Joomla 1.7 не зміг, а відходити від MVC не хочу.
Дякую!
erosion/view.html.php
Код:
class ErosionViewErosion extends JView
{
function display($tpl = null)
{
$this->head = $this->get('Head');
$this->val = $this->get('Val');
$this->valls = $this->get('ValLS');
$this->valfls = $this->get('ValFLS');
$this->arrls = $this->get('ArrLS');
$this->arrfls = $this->get('ArrFLS');
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
parent::display($tpl);
}
}
Код форми в шаблоні (erosion/tmpl/default.php) наступний:
Код:
<h1><?php echo $this->head; ?></h1>
<div class="data">
<br /><?php echo $this->val; ?>
<br /><?php echo 'LS=((L/'.$this->valls[0].')^m)*('.$this->valls[1].'*sinS*sinS+'.$this->valls[2].'*sinS+'.$this->valls[3].')'; ?>
<br /><?php echo $this->arrls;?>
<br /><?php echo 'F(LS)='.$this->valfls[0].'*('.$this->valfls[1].'/('.$this->valfls[2].'+exp('.$this->valfls[3].'-'.$this->valfls[4].'LS))-'.$this->valfls[5].')'; ?>
<br /><?php echo $this->arrfls;?>
</div>
<div class="loadForm">
<h2><p><b> Форма для завантаження файлу </b></p></h2>
<form action="<?php JRoute::_( 'index.php?option=com_erosion&controller=upload&task=upload')?>" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="submit" value="Завантажити"><br>
</form>
</div>
upload/view.html.php
class ErosionViewUpload extends JView
Код:
{
function display($tpl = null)
{
$this->upload = $this->get('Upload');
// Check for errors.
if (count($errors = $this->get('Errors')))
{
JError::raiseError(500, implode('<br />', $errors));
return false;
}
parent::display($tpl);
}
}
Код форми в шаблоні (upload/tmpl/default.php) наступний:
Код:
<div class="data">
<h1><?php echo $this->upload; ?></h1>
</div>
Код із моделі наступний (models/upload/upload.php):
Код:
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla modelitem library
jimport('joomla.application.component.modelitem');
/**
* Erosion Model
*/
class ErosionModelUpload extends JModelItem
{
protected $upload;
public function getUpload()
{
if (!isset($this->upload))
{
if(copy($_FILES["filename"]["tmp_name"],JURI::base().'tmp/input.txt'))
{
$this->upload = JText::_("Файл завантажено <br>");
} else {
$this->upload = JText::_("Помилка при завантаженні файлу");
}
}
return $this->upload;
}
}
в папку controllers добавив файл upload.php із кодом:
Код:
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
// import Joomla controller library
jimport('joomla.application.component.controller');
class UploadController extends JController
{
function upload()
{
$model = $this->getModel('upload');
if(!$model->action() ) {
$upload = JText::_( 'Error: Could not perform action' );
} else {
$upload = JText::_( 'Action executed' );
}
$this->setRedirect( 'index.php?option=com_erosion&view=erosion', $upload );
}
}
Підкажіть будь-ласка, що я не так написав, або що не дописав. Бо сильно хочу розібратися як використовувати кілька контролерів, моделей, шаблонів, як і коли їх вибирати, які посилання робити на них у формах (поле action), буду радий любому матеріалу, де це буде описано. Бо треба зробити компонент, який реагує на дії користувача, зокрема файл треба буде завантажувати на сервер, а розібратися на прикладах, які є вже реалізовані в Joomla 1.7 не зміг, а відходити від MVC не хочу.
Дякую!
