Здравствуйте! Сейчас я пишу парсер для переноса новостей со старого сайта (PHP-Fusion) на Joomla 3.8.
Вот что у меня пока выходит!
Основную часть кода взял с интернета:
Подключаем приложениеif (!defined('_JEXEC')) {
define( '_JEXEC', 1 );
define('JPATH_BASE', realpath(dirname(__FILE__)));
require_once ( JPATH_BASE .'/includes/defines.php' );
require_once ( JPATH_BASE .'/includes/framework.php' );
defined('DS') or define('DS', DIRECTORY_SEPARATOR);
}
$application = JFactory::getApplication('site');
Функция создания материала function createArticle($data){
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_content/models');
$article_model = JModelLegacy::getInstance('Article','ContentModel', array('ignore_request' => true));
if(!$article_model->save($data)){
$err_msg = $article_model->getError();
echo JText::_($err_msg)."\n";
return false;
}else{
$id = $article_model->getItem()->id;
return $id;
}
}
Две функции для создания правильного alias //Знайти унікальний псевдонім, якщо поточний не існує.
function getUniqueAlias($alias, $catId){
$alias_ini = $alias;
for ($i = 1; isAliasExist($alias, $catId); $i++) {
$alias = $alias_ini . '-' . $i;
}
return $alias;
}
//Перевірте "псевдонім" у базі даних.
function isAliasExist($alias, $catId){
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query
->select('COUNT(*)')
->from($db->quoteName('#__content'))
->where($db->quoteName('alias'). ' = ' . $db->quote($alias))
->where($db->quoteName('catid'). ' = ' . $db->quote($catId));
$db->setQuery($query);
return ($db->loadResult()? true : false);
}
Формируем сам массив данных$articles_arry['catid'] = 2;
$articles_arry['created_by'] = 0;
$articles_arry['title'] = 'Вухо слона велике шо капец (Навіщо слона великі вуха?)';
//формуємо аліас нашими функциями
$oldAlias = JFilterOutput::stringURLSafe(JString::trim(JLanguage::getInstance('uk-UA')->transliterate($articles_arry['title'])));
$alias = getUniqueAlias($oldAlias, $articles_arry['catid']);
$articles_arry['alias'] = $alias;
$articles_arry['introtext'] = 'Вступний текст про вухо... Ви хочаб рпаз замислювались навіщо слону такі великі вуха, продовження читайте в цій статті';
$articles_arry['fulltext'] = 'Повний текст, так так, про вухо слона. Одне вухо африканського слона може важити близько 50 кілограм, а форма їх нагадує обрис континенту, на якому вони проживають. <br>(а далі піде текст в html) <br>';
$articles_arry['images'] = '';
$articles_arry['state'] = 1;
$articles_arry['urls'] = '{"urla":false,"urlatext":"","targeta":""}';
$articles_arry['attribs'] = '{"show_title":"","link_titles":"","show_tags":"","show_intro":""}';
//можно ли как то типа так передать значения дополнительных полей???
$articles_arry['com_fields'] = '{"pidpys":"2","tekstovyi-pidpys":"6666","halereia":"headers"}';
/*---------------*/
$articles_arry['metadata'] = '{"robots":"","author":"","rights":"","xreference":""}';
$articles_arry['language'] = '*';
$articles_arry['created'] = JHTML::Date(time(), 'Y-m-d H:i:s');
$articles_arry['metakey'] = '';
Ну и собственно создаем наш материал$article_id = createArticle($articles_arry);
//Проверяем успех создания статьи
if(!$article_id){
echo "Створення статті не вдалося!";
}else{
/* здесь у нас уже есть id материала
* id поля которое мне нужно я уже знаю я уже знаю
* и далее я создаю запись значений полей в БД
*/
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');
JModelLegacy::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_fields/models', 'FieldsModel');
$fieldModel = JModelLegacy::getInstance('Field', 'FieldsModel', array('ignore_request' => true));
//создаем две записи
$fieldModel->setFieldValue(8, $article_id, 'sampledata/parks');
$fieldModel->setFieldValue(11, $article_id, 'Тут типу подпись');
echo "Статтю успішно створено id: ". $article_id;
}
После выполнения кода у меня ошибка: Notice: Use of undefined constant JPATH_COMPONENT - assumed 'JPATH_COMPONENT' in /home/udpu/new/administrator/components/com_fields/models/field.php on line 393
Она появляется столько раз сколько я вызываю "$fieldModel->setFieldValue"
Но значения в БД добавляются.
Отсюда несколько вопросов:
Первый и самый главный - как еще можно добавить значения полей во время программного создания материала?
Можно ли как то по другому передать эти параметры? В идеале через главный массив значений там где заголовок, описание и т.д.?
и второй, можно ли как то обойтись без тех дополнительных функций которые проверяют на уникальность alias и добавляют число, так как если создавать материал через админку Joomla сама добавляет уникальный номер в конце алиаса.