私は解決策を探していますが、どのように始めればよいかわかりません。
私のすべての静的joomla HTMLサイトはCloudflareによってキャッシュされます。 joomlaの記事を更新した後、APIリクエストでCloudflareキャッシュマニュアルを更新します。
だから私はjoomlaの保存ボタンを押した後、APIリクエストを自動的に送信するソリューションを探しています。
「実際の」URLは、記事によってカスタムフィールドですでに使用可能です。
ここに私の最初のプラグインがあります:
<?php
/**
* Plugin class for update the Cloudflare Cache after save a article
*/
class plgContentBk_onsave extends JPlugin
{
public function onContentAfterSave ($context, $article, $isNew)
{
// I have saved the URL in a custom field by the article to protect against duplicate content.
// I use this field for <link rel="canonical" href="..."> too.
// so I get the URl from the article:
$context = 'com_content.article';
$article = JModelLegacy::getInstance('Article', 'ContentModel')->getItem();
JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); // Helper to get the field by the article
$fields = FieldsHelper::getFields($context, $article);
$fields = json_decode(json_encode($fields), true); // convert to a array
$url = $fields[0]["value"]; // Get the URL from the Field $fields[0]["value"] the custom field in the article
// if you want to see all your custom fields : var_dump($fields)
// Okay now the part that delete the Cloudflare cache:
$authKey = "XXX";
$authEmail = "XXX";
$zoneId = "XXX";
$endpoint = "purge_cache";
$data = '{"files":[
"'.$url.'"
]}';
$url = "https://api.cloudflare.com/client/v4/zones/{$zoneId}/{$endpoint}";
$opts = ['http' => [
'method' => 'DELETE',
'header' => [
"Content-Type: application/json",
"X-Auth-Key: {$authKey}",
"X-Auth-Email: {$authEmail}",
],
'content' => $data,
]];
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
// to sse the Cloudflare result use: var_dump($result);
// add exit; to see all otputs like var_dumps
return true;
}
}
?>
テストされ、正常に動作します。記事を保存した後、one URLのCloudflare CDNが削除されます。
どんな改善も歓迎します。
私の問題を解決するためのご支援に感謝いたします。
保存後に成功を見るために追加しました:
ob_start();
var_dump($result);
$ext = ob_get_clean();
// to see the Cloudflare result use: var_dump($result);
// add exit; to see all otputs like var_dumps
$application = JFactory::getApplication();
$message="Cloudflare Update von: ".$fields[0]["value"]."<br>".$ext; $type="notice";
$application->enqueueMessage(JText::_($message), 'notice');
私が最近これをテストしていないので、私が覚えている限り、CloudFlareで記事の更新を表示するためにCloudFlareのキャッシュをクリアする必要はありません。 CloudFlareはcss、jsなどの静的アセットのみをキャッシュします。いずれにせよ、その仕事をする既製のプラグインがあります。私がお勧めできるのは、RegularLabs Cache Cleanerです: https://www.regularlabs.com/extensions/cachecleaner/features
プラグインのProバージョンは、Joomlaバックエンドにコンテンツを保存する間、CloudFlareキャッシュのパージを自動的にサポートします。