Поля Joomla 3.x с именами title, alias и упорядочением выдают ошибки в пользовательском компоненте - PullRequest
0 голосов
/ 03 мая 2018

Я перевожу веб-сайт Joomla 1.5 на Joomla 3.8 для одного из наших клиентов. У него есть внешний компонент, который больше не поддерживается, и я пытаюсь заставить его работать на Joomla 3.8. Большинство из них работает сейчас, за исключением представления редактирования в администраторе.

На данный момент есть 3 поля, которые не работают правильно.

Сначала есть поля с названием title и псевдонимы, которые работают, но больше не заполняют уже имеющимися значениями. Они отформатированы так в файле конфигурации xml:

<fieldset addfieldpath="/administrator/components/com_faqftw/models/fields" 
name="essential" >
  <fields name="filter">
    <field name="id" type="hidden" label="JGLOBAL_FIELD_ID_LABEL"
    description="JGLOBAL_FIELD_ID_DESC" size="10" default="0" readonly="true" class="readonly" />
    <field name="title" type="text" label="COM_FAQFTW_FIELD_FAQ_NAME_LABEL" 
    description="COM_FAQFTW_FIELD_FAQ_NAME_DESC" class="inputbox" size="30" required="true" />
    <field name="alias" type="text" label="JFIELD_ALIAS_LABEL"
    description="JFIELD_ALIAS_DESC" size="30" required="false" />

Во-вторых, есть поле с именем "ordering", которое, если включено в xml, выдает ошибку sql. Это поле отформатировано как настраиваемое поле и имеет собственный класс, расширяющий JFormField, но отключение которого не имеет значения. Этот форматируется так:

<field name="ordering" type="Ordering" class="inputbox" label="JFIELD_ORDERING_LABEL"
description="JFIELD_ORDERING_DESC" />

Сгенерирована ошибка SQL:

  1064 You have an error in your SQL syntax; check the manual that corresponds to your 
  MySQL server version for the right syntax to use near 'WHERE `catid` = 0 ORDER BY ordering'
  at line 3 httpdocs/libraries/joomla/database/driver/mysqli.php:650 

Итак, у меня есть догадка, что введено некоторое соглашение об именах, и эти имена полей больше не разрешены. Если это так, кто-нибудь может дать мне несколько советов о том, как наиболее перспективно переименовать эти файлы, или указать мне некоторую документацию по этим полям, которая более полезна, чем то, что находится на сайте docs.joomla.org.

Если вы думаете, что я не прав, я тоже с удовольствием услышу это с указателем в правильном направлении:)

Пользовательское поле php файла: определено ('JPATH_BASE') или умереть;

/**
 * Supports an HTML select list of categories
 *
 * @package     Joomla.Administrator
 * @subpackage  com_weblinks
 * @since       1.6
 */
class JFormFieldOrdering extends JFormField
{
    /**
     * The form field type.
     *
     * @var     string
     * @since   1.6
     */
    protected $type = 'Ordering';

    /**
     * Method to get the field input markup.
     *
     * @return  string  The field input markup.
     * @since   1.6
     */
    protected function getInput()
    {
        // Initialize variables.
        $html = array();
        $attr = '';

        // Initialize some field attributes.
        $attr .= $this->element['class'] ? ' class="'.(string) $this->element['class'].'"' : '';
        $attr .= ((string) $this->element['disabled'] == 'true') ? ' disabled="disabled"' : '';
        $attr .= $this->element['size'] ? ' size="'.(int) $this->element['size'].'"' : '';

        // Initialize JavaScript field attributes.
        $attr .= $this->element['onchange'] ? ' onchange="'.(string) $this->element['onchange'].'"' : '';

        // Get some field values from the form.
        $faqId  = (int) $this->form->getValue('id');

        // Build the query for the ordering list.
        $query = 'SELECT ordering AS value, title AS text' .
                ' FROM #__faqftw_faq' .
                ' ORDER BY ordering';

        // Create a read-only list (no name) with a hidden input to store the value.
        if ((string) $this->element['readonly'] == 'true') {
            $html[] = JHtml::_('list.ordering', '', $query, trim($attr), $this->value, $faqId ? 0 : 1);
            $html[] = '<input type="hidden" name="'.$this->name.'" value="'.$this->value.'"/>';
        }
        // Create a regular list.
        else {
            $html[] = JHtml::_('list.ordering', $this->name, $query, trim($attr), $this->value, $faqId ? 0 : 1);
        }

        return implode($html);
    }
}
...