0

Opencartで作業しているサイトの700以上の製品にメタディスクリプションを追加しようとしていますが、手動で追加する必要がないことを望んでいます。各製品にはすでに製品の説明があり、これをある程度達成するスクリプトに出くわしましたが、少し調整する必要があります。PHPの第一人者の近くにいないので、SOの誰かが助けてくれることを望んでいました。

コードは次のとおりです。

// Registry
$registry = new Registry();

// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);

// Config
$config = new Config();
$registry->set('config', $config);

function get_meta_desc($string){
    return substr(strip_tags($string), 0, 255); 
}

// Database 
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);

$query = $db->query("SELECT * FROM `" . DB_PREFIX . "product_description` Order By product_id ASC");

foreach ($query->rows as $row){
    $query2 = $db->query("UPDATE `" . DB_PREFIX . "product_description` SET meta_description = '". mysql_real_escape_string(get_meta_desc($row['description'])) ."' WHERE product_id = '".$row['product_id']."'");
}

echo 'done';
@unlink('runonce.php');

ただし、問題はHTMLタグを削除していないことです。私はPHPをあまりよく知りませんが、それはうまくいくはずだと私には思えます。なぜそうなのか理解できません。

スクリプトに追加したいと思っていたもう1つのことは、メタディスクリプションにコンテンツがすでに含まれているかどうかを確認する方法でした。コンテンツが含まれている場合は、何もせずに次のコンテンツにスキップしてください。

ありがとう、evu。

4

1 に答える 1

1

説明は通常、データベースに配置される前にhtmlエンコードされます。

したがって、関数は次のようになります。

function get_meta_desc($string){
    return substr(strip_tags(html_entity_decode($string)), 0, 255); 
}

メタディスクリプションが存在するかどうかを確認するには、meta_description列をチェックする必要があります。

function get_meta_desc($string, $meta){
    if(!empty($meta))
        return $meta;

    return substr(strip_tags(html_entity_decode($string)), 0, 255); 
}

get_meta_desc($row['description'], $row['meta_description']);
于 2012-10-10T03:51:18.700 に答える