
Merhaba arkadaşlar,
Bende yapay zeka ile bu modu kendim oluşturdum! (GEMİNİ) şimdi size adım adım nasıl yapıldığını yazacağım.
- Arka Plan (PHP): Sitenin sunucusunda çalışacak, senin içeriğini alıp yapay zekaya (OpenAI) gönderecek ve cevabı alacak küçük bir dosya oluşturacağız.
- Ön Yüz (JS): Konu açma sayfasına bir buton ekleyeceğiz.
- Bağlantı: Butona basınca JS, PHP dosyanı tetikleyecek; başlık otomatik dolacak.
Bu işin "beyni" için bir API lazım. Genelde en yaygın ve ucuz olanı OpenAI (ChatGPT) API'sidir.
-
adresinden bir API Key alıp kenara not et. (Eğer başka bir ücretsiz servis kullanmak istersen onu da entegre edebiliriz).Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
XenForo ana dizininde (index.php'nin olduğu yer) seo_baslik.php adında bir dosya oluştur ve içine şu kodu yapıştır (API anahtarını ilgili yere yaz):
Kod:
<?php
// Hataları ekrana basması için (Sadece test için açıyoruz)
error_reporting(E_ALL);
ini_set('display_errors', 1);
$apiKey = 'BURAYA_OPENAI_API_KEY_YAZ'; // Kendi anahtarını buraya koyduğuna emin ol
// Gelen metni al
$content = $_POST['content'] ?? '';
if (empty($content) || strlen($content) < 10) {
echo "Hata: İçerik çok kısa!";
exit;
}
$data = [
'model' => 'gpt-3.5-turbo',
'messages' => [
['role' => 'system', 'content' => 'Sen bir SEO uzmanısın. Sadece Türkçe başlık üret.'],
['role' => 'user', 'content' => 'Bu metne SEO uyumlu, merak uyandıran bir başlık yaz: ' . $content]
],
'max_tokens' => 100
];
$ch = curl_init('https://api.openai.com/v1/chat/completions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'Authorization: Bearer ' . $apiKey
]);
$response = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Curl Hatası: ' . curl_error($ch);
exit;
}
$result = json_decode($response, true);
curl_close($ch);
if (isset($result['choices'][0]['message']['content'])) {
echo trim($result['choices'][0]['message']['content'], '" ');
} else {
// Eğer hata gelirse hatanın ne olduğunu görelim
echo "API Hatası: " . ($result['error']['message'] ?? 'Bilinmeyen hata');
}
forum_post_thread şablonunu bulunu
Aşağıdaki kodu bulun,
Kod:
Kod:<xf:prefixinputrow
label="{{ phrase('title') }}"
...
finalhtml="{$titleFinalHtml}" />
altına bu kodu ekle
Kod:
Kod:<xf:formrow rowtype="fullWidth noLabel mergePrev">
<div style="margin: 10px 0;">
<xf:button type="button" class="button--icon button--icon--refresh" id="js-ai-title-btn">
AI ile SEO Başlığı Üret
</xf:button>
</div>
</xf:formrow>
Az önce verdiğim JavaScript kodunu da bu şablonun (forum_post_thread) en altına (tüm kodların bittiği yere) yapıştırmayı unutma ki buton tıklandığında ne yapacağını bilsin.
Kod:
Kod<script>
document.addEventListener('DOMContentLoaded', function() {
const aiBtn = document.querySelector('#js-ai-title-btn');
if (aiBtn) {
aiBtn.addEventListener('click', function() {
// XenForo 2.3 için hem Froala hem de düz textarea kontrolü
let content = '';
const froalaEditor = document.querySelector('.fr-view');
if (froalaEditor) {
content = froalaEditor.innerText;
} else {
content = document.querySelector('textarea[name="message"]').value;
}
const titleInput = document.querySelector('.input--title');
if (content.trim().length < 30) {
alert('Kanka biraz daha uzun yaz (en az 30 karakter), AI konuyu anlayabilsin.');
return;
}
const originalText = aiBtn.innerHTML;
aiBtn.innerText = 'Düşünüyorum...';
aiBtn.disabled = true;
// İsteği gönderiyoruz
const formData = new URLSearchParams();
formData.append('content', content);
fetch('seo_baslik.php', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: formData.toString()
})
.then(response => response.text())
.then(data => {
// Gelen veriyi temizleyip başlığa yazıyoruz
if(data.trim() !== "") {
titleInput.value = data.trim();
}
aiBtn.innerHTML = originalText;
aiBtn.disabled = false;
})
.catch(error => {
alert('Bir bağlantı hatası oldu kanka!');
aiBtn.innerHTML = originalText;
aiBtn.disabled = false;
});
});
}
});
</script>
XenForo'da seo_baslik.php şeklinde bir istek attığında, sistem bunu forumun içinde bir konuymuş gibi aramaya çalışır. Bunu engellemek için isteği tam adres (root) üzerinden göndermeliyiz.
forum_post_thread şablonundaki JavaScript kodunda şu satırı bul:fetch('seo_baslik.php', {
Ve şu şekilde değiştir (Başına bir / ekle):fetch('/seo_baslik.php', {
XenForo'nun ana dizinindeki .htaccess dosyası, güvenlik nedeniyle dışarıdan direkt .php dosyalarına erişimi engelleyebilir.
- FTP veya cPanel üzerinden forumun ana dizinine gir.
- .htaccess dosyasını aç.
- İçinde RewriteEngine On satırını bul ve hemen altına şu satırı ekle:RewriteRule ^seo_baslik\.php$ - [L]
Bunları yaptıktan sonra tarayıcının adres çubuğuna şunu yaz:
Bu bağlantı ziyaretçiler için gizlenmiştir. Görmek için lütfen giriş yapın veya üye olun.
- Eğer "Hata: İçerik çok kısa!" yazısını görürsen: Tebrikler kanka, kapı açıldı! Artık butonun çalışacak.
- Eğer hala sitenin hata sayfasını (senin yukarıda attığın kodları) görüyorsan: Dosya isminde bir harf hatası olabilir veya dosya doğru klasörde (public_html'in en üstünde) değildir.
Son düzenleme: