@drekun @Septdir showon не умеет подстраивать валидацию полей? типа если по showon скрыто, то атрибут удалять, а если активно, то показывать
Можно обойтись без замены стандартной валидации.
1. В макете перед отправкой устанавливать/снимать атрибут.
Joomla.submitbutton = function (task) {
// Change required attribute here
// Submit form
if (task === "view_name.cancel" || document.formvalidator.isValid(document.getElementById("item-form"))) {
Joomla.submitform(task, document.getElementById("item-form"));
}
};
2. В model в методе getForm устанавливать/снимать атрибут, если !$loadData (Этот параметр показывает что форма получается для валидации).
/**
* Method to check set required or not based on showon.
*
* @param string $showOn Show on conditions.
* @param array $data Data for the form.
* @param string $group The dot-separated form group path.
*
* @return bool True on success, false on failure.
*
* @since __DEPLOY_VERSION__
*/
protected function checkShowOnRequired($showOn = null, $data = array(), $group = null)
{
if (empty($showOn)) return true;
$skip = false;
$result = false;
foreach (preg_split('#(\[AND\]|\[OR\])#', $showOn, -1, PREG_SPLIT_DELIM_CAPTURE) as $part)
{
// Check AND condition
if ($part === '[AND]')
{
if ($result)
{
continue;
}
else
{
break;
}
}
// Check OR condition
if ($part === '[OR]')
{
$skip = ($result);
continue;
}
// Find data
if (!$skip)
{
$fieldValue = $data;
list($path, $needValue) = explode(':', $part, 2);
$paths = explode('.', $path);
if (!empty($group) && count($paths) === 1)
{
$path = $group . '.' . $path;
$paths = explode('.', $path);
}
foreach ($paths as $index)
{
if (!isset($fieldValue[$index]))
{
$fieldValue = '';
break;
}
$fieldValue = $fieldValue[$index];
}
$result = ($fieldValue == $needValue);
}
}
return $result;
}