Selamlar...
Kullandığım paketler... Çoklu dil için;
Astrotomic/laravel-translatable
Slug için;
cviebrock/eloquent-sluggable
Normalde Yazi, YaziTrans modelleri oluşturup YaziTrans içinde yazının başlığından slug kaydı yapıyordum.
/**
* @return array
*/
public function sluggable()
{
return [
'adres' => [
'source' => 'baslik',
],
];
}
Daha sonra çoklu slug lazım oldu ve YaziTransAdres diye bir yapı daha kurdum. Lakin yazının başlığını bir türlü kaydedemiyorum. Controller ve Modellerde nasıl bir düzenleme yapmalıyım? Yardımcı olabilir misiniz? Şimdiden teşekkür ederim.
class Yazi extends Model
{
use Translatable;
const CREATED_AT = 'olusturma_tarihi';
const UPDATED_AT = 'guncelleme_tarihi';
const DELETED_AT = 'silinme_tarihi';
public $translatedAttributes = ['baslik', 'baslik_2', 'giris', 'icerik', 'title', 'description', 'keywords'];
public $translationModel = 'App\Models\YaziTrans';
protected $table = 'yazi';
protected $guarded = [];
/**
* @return HasMany
*/
public function ceviriler()
{
return $this->hasMany('App\Models\YaziTrans', 'yazi_id', 'id');
}
}
class YaziTrans extends Model
{
public $timestamps = false;
protected $guarded = [];
protected $fillable = ['baslik', 'baslik_2', 'giris', 'icerik', 'title', 'description', 'keywords'];
protected $table = 'yazi_trans';
/**
* @return BelongsTo
*/
public function yazi()
{
return $this->belongsTo('App\Models\Yazi', 'yazi_id', 'id');
}
/**
* @return HasMany
*/
public function adresler()
{
return $this->hasMany('App\Models\YaziTransAdres', 'trans_id', 'id');
}
}
class YaziTransAdres extends Model
{
use Sluggable;
const CREATED_AT = 'olusturma_tarihi';
const UPDATED_AT = null;
const DELETED_AT = null;
protected $guarded = [];
protected $table = 'yazi_trans_adres';
/**
* @param Slugify $engine
* @param $attribute
* @return Slugify
*/
public function customizeSlugEngine(Slugify $engine, $attribute)
{
$engine->activateRuleset('turkish');
return $engine;
}
/**
* @return string[][][]
*/
public function sluggable()
{
return [
'adres' => [
// 'source' => ['ceviri.baslik'],
'source' => ['baslik'],
],
];
}
/**
* @param $value
*/
public function setAdresAttribute($value)
{
$this->attributes['adres'] = $value;
}
/**
* @return BelongsTo
*/
public function ceviri()
{
return $this->belongsTo('App\Models\YaziTrans', 'trans_id', 'id');
}
}
YaziController
/**
* @param $request
* @param null $id
* @return RedirectResponse
*/
private function save($request, $id = null)
{
// Eğer yeni kayıt ekleniyorsa...
if (is_null($id)) {
// Eğer kayıt düzenleme yapılıyorsa...
$data = [
'kullanici_id' => Auth::user()->id,
'okunma' => 0,
];
} else {
// Düzenlenen yazının bilgilerini bulalım
$girdi = Yazi::findOrFail($id);
$data['kullanici_id'] = $request->kullanici_id;
}
foreach (config('translatable.locales') as $dil) {
$data[$dil] = [
'baslik' => $request->baslik[$dil],
'baslik_2' => $request->baslik_2[$dil],
'giris' => $request->giris[$dil],
'icerik' => $request->icerik[$dil],
'title' => empty($request->title[$dil]) ? trim($request->baslik[$dil] . $request->baslik_2[$dil]) : $request->title[$dil],
'description' => empty($request->description[$dil]) ? $request->giris[$dil] : $request->description[$dil],
'keywords' => $request->keywords[$dil],
];
}
$data['yayin_tarihi'] = $request->yayin_tarihi;
if ($id) {
$girdi->update($data);
} else {
$girdi = Yazi::create($data);
}
if ($girdi->id) {
return redirect()->route('yazi.edit', $girdi->id)
->with('msg_baslik', __('panel.uyari_islem_tamam'))
->with('msg_metin', ($id ? __('panel.uyari_guncelleme_islemi_basarili') : __('panel.uyari_kayit_islemi_basarili')))
->with('msg_tur', 'success');
} else {
return back()->withInput()
->with('msg_baslik', __('panel.uyari_islem_iptal'))
->with('msg_metin', __('panel.uyari_silme_sorunla_karsilasti'))
->with('msg_tur', 'danger');
}
}
/**
* @param $request
* @param $dil
* @param null $id
* @return mixed|null
*/
public function baslikAdresDegisimKontrolu($request, $dil, $id = null)
{
if ($request->baslik[$dil] != $request->eski_baslik[$dil]) {
return $request->baslik[$dil];
} else {
return null;
}
}