Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

0 Пользователей и 1 Гость просматривают эту тему.
  • 8 Ответов
  • 1393 Просмотров
*

starslan

  • Новичок
  • 8
  • 0 / 0
Валидация AdsManager
« : 09.09.2016, 18:02:26 »
Здравствуйте, подскажите пожалуйста где в AdsManager происходит валидация на стороне сервера. Просмотрел ф-ю save() в conеroller.php и что-то не нашел. Просто если убрать валидацию с фронта, у меня добавляются объявления с пустыми обязательными полями.
*

moonaway

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Re: Валидация AdsManager
« Ответ #1 : 10.11.2016, 02:25:59 »
Сегодня этим  занимался. Менял валидацию на стандартную джумловскую, чтобы лишние скрипты выкинуть. Так вот - на стороне сервера валидации нет.
*

starslan

  • Новичок
  • 8
  • 0 / 0
Re: Валидация AdsManager
« Ответ #2 : 10.11.2016, 09:03:30 »
Да я уже понял, что даже платная версия без валидации. А каким образом переделал на джумловскую?
*

moonaway

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Re: Валидация AdsManager
« Ответ #3 : 11.11.2016, 15:42:25 »
Да я уже понял, что даже платная версия без валидации. А каким образом переделал на джумловскую?

Удалил со страницы шаблона сторонний скрипт валидации, подгрузил стандартный джумловский JHtml::_('behavior.formvalidator'); и изменил поля в функции showFieldForm (components/com_adsmanager/helpers/field.php) чтобы прописывались стандартные классы required. Вышло даже лучше стандартной в AdsManager - все ошибки выводятся не криво-косо под полями, а стандартно в поле вывода ошибок Joomla.

Получилось так
« Последнее редактирование: 11.11.2016, 16:41:49 от moonaway »
*

starslan

  • Новичок
  • 8
  • 0 / 0
Re: Валидация AdsManager
« Ответ #4 : 11.11.2016, 16:07:52 »
Вот спасибо. Чет не нашел где плюсануть тебе?
*

moonaway

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Re: Валидация AdsManager
« Ответ #5 : 11.11.2016, 16:38:09 »
Какая у тебя версия? Если 3.1.6 и Bootstrap 3, то могу сразу кинуть функцию, чтобы сам не парился как я часа 4. Там есть нюансы вроде того, чтобы чекбоксы обернуть одним required, а не каждый в отдельности и прочая мелочевка... знак валюты рядом с полем цены и тд. В базе эта страница вообще невероятно кривая на мой взляд.

PS. Да где-то есть, вроде, где поставить в карму)
« Последнее редактирование: 11.11.2016, 16:43:52 от moonaway »
*

starslan

  • Новичок
  • 8
  • 0 / 0
Re: Валидация AdsManager
« Ответ #6 : 16.11.2016, 10:07:02 »
3.1.5 Btsr 2
*

moonaway

  • Осваиваюсь на форуме
  • 26
  • 0 / 0
Re: Валидация AdsManager
« Ответ #7 : 16.11.2016, 21:05:15 »
3.1.5 Btsr 2
Подойдёт. лови. Поля со стилями BS3 и классами валидации под JHtml::_('behavior.formvalidator')

Код
	function showFieldForm($field,$content,$default) {
$return = "";

$strtitle = TText::_($field->title);
$strtitle = htmlspecialchars($strtitle);

$name = $field->name;
$fieldname = $field->name;
$value = @$content->$fieldname;
if (is_string($value)) {
$value = TText::_($value);
}

if (($value == "")&&(isset($default)))
{
$default = (object) $default;
$value = @$default->$fieldname;
$value = TText::_($value);
}
$disabled="";
$read_only="";

$options = $field->options;

        //We initialize the placeholder if they exist, if not we let it empty
        if(isset($options->placeholder_form) && $options->placeholder_form != ""){
            $placeholder = JText::_(htmlspecialchars($options->placeholder_form));
        } else {
            $placeholder = "";
        }
$values = array();
if ((!isset($options))||
(!isset($options->select_values_storage_type))||
($options->select_values_storage_type == "internal")) {
if (@$this->field_values[$field->fieldid]) {
$values = $this->field_values[$field->fieldid];
}
} else if ($options->select_values_storage_type == "db") {
$dbname = $options->select_db_storage_db_name;
$_name = $options->select_db_storage_column_name;
$_value = $options->select_db_storage_column_value;
//$parent = $options->select_db_storage_column_parent_value;
$sql = "SELECT `$_name` as fieldtitle,`$_value` as fieldvalue FROM $dbname";
$this->_db->setQuery($sql);
$values = $this->_db->loadObjectList();
}

foreach($values as $key => $val) {
$values[$key]->fieldtitle = htmlspecialchars(TText::_($val->fieldtitle));
}

switch($field->type)
{
case 'checkbox':
if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required";
} else {
$mosReq = "";
$mosReqClass = "";
}
if ($value == 1)
$return .= "<input type='checkbox' $mosReq class='$mosReqClass' checked='checked' id='$name' name='$name' value='1' />\n";
else
$return .= "<input type='checkbox' $mosReq class='$mosReqClass' name='$name' id='$name' value='1' />\n";
                break;
case 'multicheckbox':
case 'multicheckboximage':

if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required";
} else {
$mosReq = "";
$mosReqClass = "";
}
$return .= "<fieldset id='f".$field->name."' $mosReq class='checkboxes $mosReqClass'>";
for ($i=0 ; $i < count($values); $i++) {
$fieldvalue = @$values[$i]->fieldvalue;
$fieldtitle = @$values[$i]->fieldtitle;
$fieldvalueid = @$values[$i]->fieldvalueid;
if ($field->type == 'multicheckbox') {
if (isset($fieldtitle))
$fieldtitle=TText::_($fieldtitle);
} else {
$fieldtitle = "<img src=\"{$this->baseurl}images/com_adsmanager/fields/$fieldtitle\" alt=\"$fieldtitle\" />";
}
if (isset($values[$i]->fieldtitle)) {
if (is_array($value)) {
$value = ",".implode(',',$value).",";
}

$return .= "<div class=\"checkbox\">\n";
if ((strpos($value, ",".$fieldvalue.",") === false) &&
(strpos($value, $fieldtitle."|*|") === false) &&
(strpos($value, "|*|".$fieldtitle) === false) &&
($value !=  $fieldtitle)) {
$return .= "<input type='checkbox' id='f".$name.$fieldvalueid."' name='".$name."[]' value=\"".htmlspecialchars($fieldvalue)."\" />\n";
$return .= "<label for='f".$field->name.$fieldvalueid."'>$fieldtitle</label>";
} else {
$return .= "<input type='checkbox' id='f".$name.$fieldvalueid."' checked='checked' name='".$name."[]' value=\"".htmlspecialchars($fieldvalue)."\" />\n";
$return .= "<label for='f".$field->name.$fieldvalueid."'>$fieldtitle</label>";
}
$return .= "</div>";
}
}
$return .= "</fieldset>";
break;

case 'date':
$options = array();
$options['size'] = 25;
$options['maxlength'] = 19;
if ($field->required == 1) {
$options['class'] = 'required';
$options['mosReq'] = '1';
                    $options['required'] = '1';
$options['mosLabel'] = "$strtitle";
} else {
$options['class'] = 'adsmanager';
}
$return .= JHTML::_('behavior.calendar');
               
/*if ($value != "") {
if (function_exists("strptime")) {
$a = strptime($value, TText::_('ADSMANAGER_DATE_FORMAT_LC'));
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
} else {
$timestamp = strtotime($value);
}
if ($timestamp != null)
$value = date("Y-m-d",$timestamp);
else
$value = "";
}*/
$return .=  JHTML::_('calendar', "", "$field->name", "$field->name", TText::_('ADSMANAGER_DATE_FORMAT_LC'), $options);
$return .= "<script type='text/javascript'>jQ(document).ready(function() {jQ('#".$field->name."').val(".json_encode($value).");});</script>";
//$return = "<input $class type='text' name='$field->name' id='$field->name' size='25' maxlength='19' value='$value' readonly=true/>";
//$return .= "<input name='reset' type='reset' class='button' onclick=\"return showCalendar('$field->name', '%y-%m-%d');\" value='...' />";
//$return .= $return;
                break;

case 'editor':
                $editor = JFactory::getEditor();
$return .= $editor->display($field->name, $value, '', '', $field->cols, $field->rows);
                break;

case 'select':
if ($field->editable == 0)
$disabled = "disabled=true";
else
$disabled = "";

if ($field->required == 1)
$return .= "<select id='f$name' name='$name' required class='required form-control' $disabled>\n";
else
$return .= "<select id='f$name' name='$name'  class='form-control' $disabled>\n";

if (($field->required == 0)||($value=="")) {
$return .= "<option value=''>".$placeholder."</option>\n";
}
foreach($values as $v) {
$ftitle = $v->fieldtitle;
if (($value == $v->fieldvalue)||($value == $ftitle))
$return .= "<option value=\"".htmlspecialchars($v->fieldvalue)."\" selected='selected' >".$ftitle."</option>\n";
else
$return .= "<option value=\"".htmlspecialchars($v->fieldvalue)."\" >".$ftitle."</option>\n";
}

$return .= "</select>";
break;

case 'multiselect':
if ($field->editable == 0)
$disabled = "disabled=true";
else
$disabled = "";
               
if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required";
} else {
$mosReq = "";
$mosReqClass = "";
}
$return .= "<select id=\"f".$name."\" name=\"".$name."[]\" $mosReq multiple='multiple' size='$field->size' class='$mosReqClass form-control' $disabled>";

if (($field->required == 0)||($value=="")) {
$return .= "<option value=''>".$placeholder."</option>\n";
}
foreach($values as $v) {
$ftitle = $v->fieldtitle;
if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required";
} else {
$mosReq = "";
$mosReqClass = "";
}

if ((strpos($value, ",".$v->fieldvalue.",") === false) &&
(strpos($value, $ftitle."|*|") === false) &&
(strpos($value, "|*|".$ftitle) === false) &&
($value !=  $ftitle))
$return .= "<option value=\"".htmlspecialchars($v->fieldvalue)."\" >$ftitle</option>\n";
else
$return .= "<option value=\"".htmlspecialchars($v->fieldvalue)."\" selected='selected' >$ftitle</option>\n";
}

$return .= "</select>";
break;

case 'textarea':
if ($field->editable == 0)
$read_only = "readonly=true";
else
$read_only = "";

if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required";
} else {
$mosReq = "";
$mosReqClass = "";
}
$return .= "<textarea class='$mosReqClass form-control' $mosReq id='f$name' name='$name' cols='".$field->cols."' rows='".$field->rows."' wrap='VIRTUAL' placeholder=\"$placeholder\" onkeypress='CaracMax(this, $field->maxlength) ;' onBlur='CaracMax(this, $field->maxlength) ;' $read_only>".htmlspecialchars($value)."</textarea>\n";
                break;

case 'url':
if ($field->editable == 0)
$recontent_only = "readonly=true";
else
$recontent_only = "";

                if(!isset($options->display_prefix) || $options->display_prefix == 1){
                    $return .= "<span class=\"url-prefix\">http://</span>";
                }

if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required";
} else {
$mosReq = "";
$mosReqClass = "";
}
$return .= "<input class='$mosReqClass form-control' $mosReq id='f$field->name' type='text'  name='$field->name' size='$field->size' maxlength='$field->maxlength' $recontent_only value=\"".htmlspecialchars($value)."\" placeholder=\"$placeholder\" />\n";
                break;

case 'number':
                if ($field->editable == 0)
$read_only = "readonly=true";
else
$read_only = "";

if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required validate-numeric";
} else {
$mosReq = "";
$mosReqClass = "";
}
$return .= "<input class='$mosReqClass form-control' $mosReq id='f$name' type='number' test='number'  name='$name' size='$field->size' maxlength='$field->maxlength' $read_only value=\"$value\" placeholder=\"$placeholder\" />\n";
                break;

case 'price':
if ($field->editable == 0)
$read_only = "readonly=true";
else
$read_only = "";
               
                if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required";
} else {
$mosReq = "";
$mosReqClass = "";
}

$input = "<input class='form-control $mosReqClass' $mosReq id='f$name' type='number' test='number' name='$name' size='$field->size' maxlength='$field->maxlength' $read_only value=\"$value\" placeholder=\"$placeholder\" />\n";

if(isset($options->currency_symbol) && $options->currency_symbol != '') {
$currency = "<div class=\"input-group-addon\">".$options->currency_symbol."</div>";

                    if($options->currency_position == 'before') {
                        if(!isset($options->currency_display_in_form) || $options->currency_display_in_form == 1){
$return .= '<div class="input-group">';
$return .= $currency;
$return .= $input;
$return .= '</div>';
                        } else {
                            $return .= $this->formatPrice(false, $options);
                            $return .= $input;
                        }
                    } else {
                        if(!isset($options->currency_display_in_form) || $options->currency_display_in_form == 1){
$return .= '<div class="input-group">';
$return .= $input;
$return .= $currency;
$return .= '</div>';
                        } else {
$return .= $input;
                            $return .= $this->formatPrice(false, $options);
                        }
                    }
                } else {
                    $return .= $input;
                }
                break;
case 'emailaddress':
if ($field->editable == 0)
$read_only = "readonly=true";
else
$read_only = "";

if ($field->required == 1)
$return .= "<input class='required validate-email form-control' required id='f$name' type='email' test='emailaddress'  name=\"$name\" size='$field->size' maxlength='$field->maxlength' $read_only value=\"".htmlspecialchars($value)."\" placeholder=\"$placeholder\" />\n";
else
$return .= "<input class='form-control' id='f$name' type='email' test='emailaddress' name=\"$name\"  size='$field->size' maxlength='$field->maxlength' $read_only value=\"".htmlspecialchars($value)."\" $placeholder />\n";

                break;

case 'text':
if ($field->editable == 0)
$read_only = "readonly=true";
else
$read_only = "";

if ($field->required == 1)
$return .= "<input class='required form-control' required id='f$name' type='text'  name='$name' size='$field->size' maxlength='$field->maxlength' $read_only value=\"".htmlspecialchars($value)."\" placeholder=\"$placeholder\" />\n";
else
$return .= "<input class='form-control' id='f$name' type='text' name='$name'  size='$field->size' maxlength='$field->maxlength' $read_only value=\"".htmlspecialchars($value)."\" placeholder=\"$placeholder\" />\n";
                break;

case 'radio':
case 'radioimage':

if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required";
} else {
$mosReq = "";
$mosReqClass = "";
}
$return .= "<fieldset id='f".$field->name."' $mosReq class='radioboxes $mosReqClass'>";
for ($i=0 ; $i < count($values); $i++) {
$fieldvalue = @$values[$i]->fieldvalue;
$fieldtitle = @$values[$i]->fieldtitle;
$fieldvalueid = @$values[$i]->fieldvalueid;
if ($field->type == 'radio') {
if (isset($fieldtitle))
$fieldtitle=TText::_($fieldtitle);
} else {
$fieldtitle = "<img src=\"{$this->baseurl}images/com_adsmanager/fields/$fieldtitle\" alt=\"$fieldtitle\" />";
}
if (isset($values[$i]->fieldtitle)) {
if (is_array($value)) {
$value = ",".implode(',',$value).",";
}

$return .= "<div class=\"radio\">\n";
if ((strpos($value, ",".$fieldvalue.",") === false) &&
(strpos($value, $fieldtitle."|*|") === false) &&
(strpos($value, "|*|".$fieldtitle) === false) &&
($value !=  $fieldtitle)) {
$return .= "<input type='radio' id='f".$name.$fieldvalueid."' name='".$name."[]' value=\"".htmlspecialchars($fieldvalue)."\" />\n";
$return .= "<label for='f".$field->name.$fieldvalueid."'>$fieldtitle</label>";
} else {
$return .= "<input type='radio' id='f".$name.$fieldvalueid."' checked='checked' name='".$name."[]' value=\"".htmlspecialchars($fieldvalue)."\" />\n";
$return .= "<label for='f".$field->name.$fieldvalueid."'>$fieldtitle</label>";
}
$return .= "</div>";
}
}
$return .= "</fieldset>";
break;

case 'file':
if ($field->required == 1) {
$mosReq = "required";
$mosReqClass = "required";
} else {
$mosReq = "";
$mosReqClass = "";
}
$return .= "<input id='f$name' $mosReq class='$mosReqClass' type='file' name='$name'  placeholder=\"$placeholder\" />";

if (isset($value)&&($value != "")) {
$return .= "<br/><a href='{$this->baseurl}images/com_adsmanager/files/$value' target='_blank'>".TText::_('ADSMANAGER_DOWNLOAD_FILE')."</a>";
$return .= "<br/><input type='hidden' name='delete_$name' value='0'>";
$return .= "<input style='vertical-align:middle' type='checkbox' name='delete_$name' value='1'>&nbsp;".TText::_('ADSMANAGER_DELETE_FILE');
}
break;

default:

if(isset($this->plugins[$field->type])) {
if ($content == null) {
$content = new stdClass();
}
if (!isset($content->id))
$content->id = 0;
$result = $this->plugins[$field->type]->getFormDisplay($content,$field,$default );
if ($result != "")
$return .= $result;
else
return "";
}
}
if (function_exists("checkPaidField")) {
$return .= checkPaidField($field);
}
return $return;
}
*

starslan

  • Новичок
  • 8
  • 0 / 0
Re: Валидация AdsManager
« Ответ #8 : 17.11.2016, 08:46:15 »
Спасибо!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено]Дублирования ссылки "объвления" в breadcrumb, в компоненте AdsManager

Автор nicklas

Ответов: 4
Просмотров: 3997
Последний ответ 25.04.2024, 23:13:18
от Rinat abzyi
AdsManager вывод нужных полей по отдельности

Автор klekovkinandrey

Ответов: 2
Просмотров: 14524
Последний ответ 06.04.2024, 09:54:15
от Rinat abzyi
AdsManager загрузка файлов

Автор FlexNL

Ответов: 1
Просмотров: 3250
Последний ответ 21.10.2021, 17:20:09
от khan-alex
AdsManager 2.9.13 Есть ли возможность добавить функцию снять с публикации по мимо редактировать и уд

Автор murovoz

Ответов: 11
Просмотров: 13635
Последний ответ 27.03.2020, 22:39:23
от Pavel
Два компонента AdsManager в одном движке

Автор kaman62

Ответов: 12
Просмотров: 28868
Последний ответ 27.03.2020, 22:32:04
от Pavel