Добавление нового поля в материал Joomla 1.5

Появилась необходимость в материалы Joomla 1.5 добавить новое поле, точне добавление поля в стандртный компонент Joomla com_content.

Ну приступим 🙂

1. Добавление в шаблон интерфейса back-end

Открываем файл administrator/components/com_content/admin.content.html.php — здесь содержится шаблон страницы добавляемого/редактируемого материала. Идем на строку номер 833* где видим закрывающий тег. Непосредственно после него добавляем свою таблицу:

<table class=»adminform»>
<tbody>
<tr>
<td>Новое поле:</td>
<td><input id=»new_field» class=»inputbox» maxlength=»255″ name=»new_field» size=»40″ type=»text» value=»<php echo $row->new_field; ?>» /></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

2.  Добавление в шаблон интерфейса front-end

Для возможности работы с новым полем непосредственно со страниц сайта, дабовляем в файл components/com_content/views/article/tmpl/form.php:

<table class=»adminform»>
<tbody>
<tr>
<td>Новое поле:</td>
<td><input id=»new_field» class=»inputbox» maxlength=»255″ name=»new_field» size=»40″ type=»text» value=»<php echo  $row->new_field; ?>» /></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

3. Работа с базой данных

Нам надо в таблице #_content добавить новое поле. Я сделал это через phpMyAdmin. Зашел в таблицу #_content и сделал запрос:

ALTER TABLE jos_content ADD new_field VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL

Только примите во внимание что я добавляю поле с названием new_field, если выбудете добавлять с иным название, то вам надо поменять во всем коде его название!

4. Вытаскивание данных

Открываем файл libraries/joomla/database/table/content.php , находим строку class JTableContent extends JTable и добавляем свойство var $new_field = null;

class JTableContent extends JTable {
/** @var string This is our new field */
var $new_field = null;
/** @var int Primary key */
var $id = null;
/** @var string */
var $title = null;

5. Изменение модели компонента

В папке components/com_content/models расположены несколько файлов, функциональное назначение которых отражено в их названии. Например, category.php содержит код отвечающего за вывод данных в формате списка/блога. В случае использования данных из нового поля вне пределов страницы материала/статьи, за которую отвечает файл article.php который не требует модификаций, необходимо будет внести изменения в запрос для выборки из таблицы . Проще всего это сделать найдя в нужном файле текст a.title_alias и добавив в список столбцов a.new_field .

Для категорий в файла category.php найти текст:

$query = ‘SELECT cc.title AS category, a.id, a.title, a.alias, a.title_alias, a.introtext, …

И вставить a.new_field:

$query = ‘SELECT cc.title AS category, a.id, a.title, a.alias, a.title_alias, a.new_field, a.introtext, …

6. Вывод нового поля

Для вывода нового поля в самом материале необходимо открыть файл components/com_content/views/article/tmpl/default.php и, добавив в него код, в том месте где хотите его видеть:

<?php echo $this->article->new_field; ?>

Для вывода в списке материалов категории, надо в файле components/com_content/views/category/default_items.php добавить новый столбик в таблице, в верхней стоке будет название, а в строке вывода добавить код:

<?php echo $this->item->new_field; ?>

Ну все, теперь должно все заработать и не забудьте отчистить кэшь 😉

Если у кого что то не получиться, задавайте вопросы, помогу по мере свободного времени.

Добавление нового поля в материал Joomla 1.5

Комментарии
  1. Здравствуйте!
    Сделал все ок, только вот как сделать если цена прописано тогда выводилось, а если нет то пусто!
    чтобы контейнер div выводился при условии?
    заранее спасибо за совет!
    вот мой div
    Цена: article->new_field; ?>

  2. Спасибо, огромное. Все доходчиво и понятно!
    В back-end поле появилось, сохраняется и обрабатывается. Но вот на сайте не выводится! Шаблон Artisteer. Можете прокоментировать? Буду признателен.

      1. Наберусь наглости, и спрошу: «Если есть возможность, могу ли просить Вас глянуть папку шаблона com_content. Может смогли бы точно указать куда вставить вывод. Очень надо разобраться, а с шаблоном Arteester как-то не складывается.»
        Заранее большое , нет, огромное СПАСИБО!

      2. Скажите, а как можно организовать вывод значения не через шаблон, а непосредственно в теле самого материала? Цель вывести значение в середине текста.
        Подскажите идею или код. Спасибо.

  3. Благодарю, а то я сломал голову как это сделать. Поле вывел а данные в базу добавить не смог

  4. Добрый день!
    Не посдкажите, как можно произвести сортировку по вновь добавленному полю?

  5.  да, все так, joomla 1.5 я делала для комонента k2, меняя аналогично, естественно, все получилось хорошо, только вт после редактирования значение исчезает.

      1.  Да, работает, в базе есть, так как если не редактировать материал, то все нормально выводит в статье каждый раз.

      2. значит просто не выводит из базы, смотри ошибки.Проверяй пункт 4, правильно название поля.

      3.  Буду смотреть. Хоть вроде все так. Еще, если можно, вопрос, чтобы эти поля не выводились во всех категориях, как мне прописать условие? Откуда я узнаю id категории (мне нужно только 1 категория)?

      4. как не выводить во всех категориях, не разбирался,а вот узнать ID категории, зайди в админке в менеджер категорий, последний столбец справа его ID

  6. Согласная с Skoro3662, заполняю поле в форме, сохраняю статью, птом если мне надо ее открдактировать — вхожу — поля пустые. Почему-то значения не сохраняются. Подскажите, как исправить?

  7. Все разобрался я просто пункт 4 не сохранил! Спасибо огромное великолепная статья! Очень помогла решить одну проблему =)

  8. Добрый день! Очень интересная статья. Только вот у меня при внесении данных во вновь созданное  поле и после сохранении нового нового материала. В таблицу content в новое поле не чего не записывает. Подскажите пожалуйста как записать данные и нового поля в таблицу content БД.

  9. Здравствуйте!
    В редакторе материала всегда присутствует надпись:php echo $row->new_field; ?>
    как ее убрать? Или как сделать так, чтобы там отображалось именно то, что было введено туда заранее? (если ввести туда например *ааа*, то на сайте будет отображаться всё ок, но зайдя на страницу редактирования заново, опять будет *php echo $row->new_field; ?>*

  10. А как вывести из админки (при добавлении материала) поле псевдоним (url)?
    При добавлении материала не из админки нет такого поля, а хочется!

      1. Спасибо!
        Нашел данное поле в шаблоне админки и добавил код в front-end!

  11. Спустя пару часов ковыряния нашол решение, оно правда не особо эстетичное и может убить очистку кода гдето и в других местах сайта, вобщем юзаем на свой страх и риск.

    /libraries/joomla/filter/filterinput.php строка 197.

    $source[$key] = $filter->_remove($filter->_decode($value));
    заменяем на:
    $result = $source;

    Версия Joomla! 1.5.22 Stable

  12. Добавил в настройки материала поле textarea, которое у меня предназначается для вставки кода карты гугла или ядекса, но обнаружил что при сохранении материала html код который находится в етом поле вырезается(в базу попадает уже обрезанный). Как отключить очистку кода в етом поле, или вобще для всех полей.

  13. Здравствуйте, я добавил новое поле, теперь хочу вывести данные по добавленному полю. Например select * from jos_content where new_field = ‘asus’. Как сделать, где запрос писать?

    1. $file = JRequest::getVar( 'filename', '', 'files', 'array' );
      if($file['size'] > 3*1024*1024 )
      $msg = JText::_( 'File more than 3Mb' );
      else
      {
      $filepath="tmp//import.txt";
      if (!JFile::upload($file['tmp_name'], $filepath))
      $msg='Can\'t save file '.$filepath;
      }

      Сначала заполняется ассоциативный массив данными о файле через JRequest::getVar, где filename — имя поля формы, отвечающего за передачу файла. Затем проверяем что файл допустимого размера (меньше 3 мб). И затем через JFile::upload сохраняем файл с именем, заданным в переменной $filepath.

      1. Добрый день 1)Куда вставить данный кусок кода? 2)Изображение сохранится в конкретную папку?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *