web-dev-qa-db-fra.com

Comment mettre à jour des articles en vrac à l'aide d'un script php sans modification du contenu

Je souhaite modifier/mettre à jour un article sur Joomla à l'aide d'un script externe. La table des actifs a été cassée et pour cela j'ai utilisé ACL Manager pour le réparer. Mais il y a des ressources manquantes pour lesquelles je dois ouvrir et re-save the articles sans rien modifier. No content modification Je peux le faire manuellement, mais lorsque les données sont lourdes, ouvrir et réenregistrer chaque article serait mouvementé.

Par conséquent, je veux créer un script php en utilisant lequel je peux mettre à jour les articles ou tout simplement les sauvegarder tels quels.

Toute aide serait appréciée.

1
Liz.

J'ai résolu le problème de la mise à jour manuelle à l'aide du script suivant. Dans ce cas, je voulais uniquement mettre à jour les articles sur les actifs manquants mentionnés dans ACL manager. Il y avait environ 1000 articles de ce type.

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);
}

$app = JFactory::getApplication('site');
$db = JFactory::getDbo();


$basePath = JPATH_ADMINISTRATOR.'/components/com_content';
require_once $basePath.'/models/article.php';
$article_model =  JModelLegacy::getInstance('Article','ContentModel');

require_once JPATH_ADMINISTRATOR.'/components/com_aclmanager/models/diagnostic.php';
$acl_model =  JModelLegacy::getInstance('Diagnostic','AclmanagerModel');
$missingAssets = $acl_model->getMissingAssets();

/*
 * @missingAssets : returns array of issues present in asset table
 *
*/
foreach ($missingAssets as $key => $value) {
    //to check and update only articles. The array might contain type of category and module as well
    if($value->type == 'article'){
        $query = $db->getQuery(true);
        $query->select('*')->from('#__content')->where('id='.$value->id.'');
        $update_data = $db->setQuery($query)->loadAssoc();
        $article_model->save($update_data);
        echo '<p>article updated - '.$value->id.'</p>';
    }
}

J'ai ajouté plus de description dans github . Donc, on peut se référer à cela aussi si plus de conseils sont nécessaires.

2
Liz.