<?php
// Запрет прямого доступа.
defined('_JEXEC') or die;
// Подключаем библиотеку modeladmin Joomla.
jimport('joomla.application.component.modeladmin');
/**
* Модель HelloWorld.
*/
class ApartmentModelApartment extends JModelAdmin
{
/**
* Возвращает ссылку на объект таблицы, всегда его создавая.
*
* @param string $type Тип таблицы для подключения.
* @param string $prefix Префикс класса таблицы. Необязателен.
* @param array $config Конфигурационный массив. Необязателен.
*
* @return JTable Объект JTable.
*/
public function getTable($type = 'Apartment', $prefix = 'ApartmentTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
/**
* Метод для получения формы.
*
* @param array $data Данные для формы.
* @param boolean $loadData True, если форма загружает свои данные (по умолчанию), false если нет.
*
* @return mixed Объект JForm в случае успеха, в противном случае false.
*/
public function getForm($data = array(), $loadData = true)
{
JForm::addFormPath(JPATH_COMPONENT_ADMINISTRATOR . '/models/forms');
// Получаем форму.
$form = $this->loadForm(
'com_apartment.apartment', 'apartment', array('control' => 'jform', 'load_data' => $loadData)
); // название модели а не записи message все правильно написано
if (empty($form))
{
return false;
}
$jinput = JFactory::getApplication()->input;
// The front end calls this model and uses a_id to avoid id clashes so we need to check for that first.
if ($jinput->get('id'))
{
$id = $jinput->get('id', 0);
}
// The back end uses id so we use that the rest of the time and set it to 0 by default.
else
{
$id = $jinput->get('id', 0);
}
//$id = JFactory::getApplication()->input->get('id', 0);
$user = JFactory::getUser();
// Изменяем форму исходя из доступов пользователя.
if ($id != 0 && (!$user->authorise('core.edit.state', 'com_apartment.message.' . (int) $id))
|| ($id == 0 && !$user->authorise('core.edit.state', 'com_apartment')))
{
// Модифицируем поля.
$form->setFieldAttribute('state', 'disabled', 'true');
}
return $form;
}
/**
* Метод для получения данных, которые должны быть загружены в форму.
*
* @return mixed Данные для формы.
*/
protected function loadFormData()
{
// Проверка сессии на наличие ранее введеных в форму данных.
$data = JFactory::getApplication()->getUserState('com_apartment.edit.apartment.data', array());
if (empty($data))
{
$data = $this->getItem();
}
if($data->opcii)
{
$data->opcii =explode(',',$data->opcii);
}
if($data->infstrukt)
{
$data->infstrukt = explode(',',$data->infstrukt);
}
if($data->vid_uslug)
{
$data->vid_uslug =explode(',',$data->vid_uslug);
}
return $data;
}
public function validate($form, $data, $group = null)
{
if (isset($_POST['arenda']))
{
$data['arenda_ed']=implode(',',$_POST['arenda']);
}
$db = JFactory::getDbo();
// Конструируем SQL запрос.
$query = $db->getQuery(true);
$query->select('*')
->from('#__categories')
->where('id='.$data['catid']);
$db->setQuery($query);
$category = $db->loadRow();
// меняем required поля
if ($category[8]=='Квартиры' || $category[8]=='Дома')
{
$form->setFieldAttribute('vid_uslug', 'required', 'false');
}
elseif ($category[8]=='Отели')
{
$form->setFieldAttribute('tip_adv', 'required', 'false');
$form->setFieldAttribute('S', 'required', 'false');
$form->setFieldAttribute('etag', 'required', 'false');
$form->setFieldAttribute('hometag', 'required', 'false');
$form->setFieldAttribute('god', 'required', 'false');
$form->setFieldAttribute('komnat', 'required', 'false');
$form->setFieldAttribute('vid_uslug', 'required', 'false');
}
elseif($category[8]=='Торговая площадь')
{
$form->setFieldAttribute('god', 'required', 'false');
$form->setFieldAttribute('komnat', 'required', 'false');
$form->setFieldAttribute('vid_uslug', 'required', 'false');
}
elseif($category[8]=='Земля, склады')
{
$form->setFieldAttribute('etag', 'required', 'false');
$form->setFieldAttribute('hometag', 'required', 'false');
$form->setFieldAttribute('god', 'required', 'false');
$form->setFieldAttribute('komnat', 'required', 'false');
$form->setFieldAttribute('vid_uslug', 'required', 'false');
}
elseif($category[8]=='Услуги' || $category[8]=='Магазины')
{
$form->setFieldAttribute('tip_adv', 'required', 'false');
$form->setFieldAttribute('S', 'required', 'false');
$form->setFieldAttribute('etag', 'required', 'false');
$form->setFieldAttribute('hometag', 'required', 'false');
$form->setFieldAttribute('god', 'required', 'false');
$form->setFieldAttribute('komnat', 'required', 'false');
$form->setFieldAttribute('cena', 'required', 'false');
}
$return = parent::validate($form, $data, $group);
if ($return === false) {
return false;
}
return $return;
}
public function save($data)
{
if (isset($data['opcii']) && !empty($data['opcii']) )
{
if (is_array($data['opcii']))
{
$data['opcii']=implode(',',$data['opcii']);
}
}
else
{
$data['opcii']='';
}
if (isset($data['infstrukt']) && !empty($data['infstrukt']) )
{
if (is_array($data['infstrukt']))
{
$data['infstrukt'] = implode(',',$data['infstrukt']);
}
}
else
{
$data['infstrukt']='';
}
if (isset($data['vid_uslug']) && !empty($data['vid_uslug']))
{
if (is_array($data['vid_uslug']))
{
$data['vid_uslug'] =implode(',',$data['vid_uslug']);
}
}
else
{
$data['vid_uslug']='';
}
if (parent::save($data))
{
return true;
}
return false;
}
/**
* Метод для проверки, может ли пользователь удалять существующую запись.
*
* @param object $record Объект записи.
*
* @return boolean True, если разрешено удалять запись.
*/
protected function canDelete($record)
{
if (!empty($record->id))
{
return JFactory::getUser()->authorise('core.delete', $this->option . '.message.' . (int) $record->id);
}
else
{
return parent::canDelete($record);
}
}
/**
* Метод для проверки, может ли пользователь изменять состояние записи. т.е. опубликовано не опубликовано
*
* @param object $record Объект записи.
*
* @return boolean True, если разрешено изменять состояние записи.
*/
protected function canEditState($record)
{
$user = JFactory::getUser();
if (!empty($record->id))
{
return $user->authorise('core.edit.state', $this->option . '.message.' . (int) $record->id);
}
elseif (!empty($record->catid))
{
return $user->authorise('core.edit.state', $this->option . '.category.' . (int) $record->catid);
}
else
{
return parent::canEditState($record);
}
}
}
<?php
/**
* @package Joomla.Site
* @subpackage com_content
*
* @copyright Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
/**
* Content Component Article Model
*
* @package Joomla.Site
* @subpackage com_content
* @since 1.5
*/
// Base this model on the backend version.
require_once JPATH_ADMINISTRATOR.'/components/com_apartment/models/apartment.php';
/**
* UpdHelloWorld Model
*/
class ApartmentModelItem extends ApartmentModelApartment
{
/**
* Method to auto-populate the model state.
*
* Note. Calling getState in this method will result in recursion.
*
* @return void
*
* @since 1.6
*/
protected function populateState()
{
$app = JFactory::getApplication();
// получаем id из url
$pk = $app->input->getInt('id');
$this->setState('message.id', $pk);
$this->setState('message.catid', $app->input->getInt('catid'));
$return = $app->input->get('return', null, 'base64');
$this->setState('return_page', base64_decode($return));
// Добавляем параметры в состояние модели.
$params = $app->getParams();
$this->setState('params', $params);
$this->setState('layout', $app->input->getString('layout'));
}
/**
* Method to get article data.
*
* @param integer $itemId The id of the article.
*
* @return mixed Content item data object on success, false on failure.
*/
public function getItem($itemId = null)
{
$itemId = (int) (!empty($itemId))? $itemId : $this->getState('message.id');
// Получаем экземпляр строки.
$table = $this->getTable();
// Попытка загрузить строку
$return = $table->load($itemId);
// Проверьте наличие ошибок таблице объекта.
if ($return === false && $table->getError())
{
$this->setError($table->getError());
return false;
}
$properties = $table->getProperties(1);
$value = JArrayHelper::toObject($properties, 'JObject');
// Создаем JSON строку параметров.
$value->params = new JRegistry;
// Получение разрешений.
$user = JFactory::getUser();
$userId = $user->get('id');
$asset = 'com_apartment.message.' . $value->id;
// Check general edit permission first.
if ($user->authorise('core.edit', $asset))
{
$value->params->set('access-edit', true);
}
// Now check if edit.own is available.
elseif (!empty($userId) && $user->authorise('core.edit.own', $asset))
{
// Check for a valid user and that they are the owner.
if ($userId == $value->created_by)
{
$value->params->set('access-edit', true);
}
}
// Check edit state permission.
if ($itemId)
{
// Existing item
$value->params->set('access-change', $user->authorise('core.edit.state', $asset));
}
else
{
// New item.
$catId = (int) $this->getState('message.catid');
if ($catId)
{
$value->params->set('access-change', $user->authorise('core.edit.state', 'com_apartment.category.' . $catId));
$value->catid = $catId;
}
else
{
$value->params->set('access-change', $user->authorise('core.edit.state', 'com_apartment'));
}
}
if (JRequest::getVar('catid')!='')
{
$catalias= JRequest::getVar('catid');
$db = JFactory::getDbo();
// Конструируем SQL запрос.
$query = $db->getQuery(true);
$query->select('*')
->from('#__categories')
->where('alias='.$db->quote($catalias));
$db->setQuery($query);
$item = $db->loadObject();
}
$value->catid=$item->id;
return $value;
}
}
В контроллере прописываю сохранение так, но валидация не происходит, оставляю обязательное поле пустым и все равно сохраняет, в админке все проходит норм, валидация нужна на стороне сервера, без javascript, подскажите в чем проблема, в инете только про валидацию на javascript в frontend, а на стороне сервера нет вот и делаю по аналогии с админкой