{"id":32813,"date":"2025-10-26T07:01:03","date_gmt":"2025-10-26T04:01:03","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/"},"modified":"2025-10-26T07:01:03","modified_gmt":"2025-10-26T04:01:03","slug":"filestash-eklentisi-yazma-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/","title":{"rendered":"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<p>Modern i\u015f ak\u0131\u015flar\u0131nda verimli dosya y\u00f6netimi kritik bir \u00f6neme sahiptir. Filestash, kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle web tabanl\u0131 bir dosya y\u00f6neticisi olarak \u00f6ne \u00e7\u0131kar. Ancak standart \u00f6zellikler bazen \u00f6zel ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabilir. \u0130\u015fte tam bu noktada Filestash eklentileri devreye girer. Bu makale, Filestash deneyiminizi tam olarak \u00f6zelle\u015ftirmek i\u00e7in kendi eklentilerinizi nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak, ger\u00e7ek d\u00fcnya senaryolar\u0131 ve pratik kod \u00f6rnekleri sunarak size yol g\u00f6sterecektir.<\/p>\n<p>G\u00fcn\u00fcm\u00fcz dijital d\u00fcnyas\u0131nda, dosyalar\u0131m\u0131z\u0131 verimli bir \u015fekilde y\u00f6netmek, d\u00fczenlemek ve payla\u015fmak hem bireysel kullan\u0131c\u0131lar hem de kurumsal i\u015fletmeler i\u00e7in hayati bir gerekliliktir. Filestash, \u00e7e\u015fitli depolama birimlerine (SFTP, S3, Dropbox, Google Drive vb.) tek bir aray\u00fczden eri\u015fim imkan\u0131 sunan, a\u00e7\u0131k kaynakl\u0131 ve web tabanl\u0131 bir dosya y\u00f6neticisidir. Kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve temel dosya i\u015flemlerini kolayla\u015ft\u0131ran yap\u0131s\u0131yla bir\u00e7ok kullan\u0131c\u0131n\u0131n favorisi haline gelmi\u015ftir. Ancak her i\u015fletmenin veya projenin kendine \u00f6zg\u00fc gereksinimleri olabilir. \u00d6rne\u011fin, belirli bir i\u015f ak\u0131\u015f\u0131na \u00f6zel bir d\u00fc\u011fme eklemek, farkl\u0131 bir harici hizmetle entegrasyon sa\u011flamak veya mevcut dosya i\u015flemlerine \u00f6zel do\u011frulama kurallar\u0131 getirmek isteyebilirsiniz. Bu t\u00fcr ki\u015fiselle\u015ftirilmi\u015f ihtiya\u00e7lar\u0131 kar\u015f\u0131laman\u0131n en etkili yolu, Filestash&#8217;in sundu\u011fu eklenti (plugin) mimarisini kullanmakt\u0131r.<\/p>\n<p>Filestash eklenti geli\u015ftirme, mevcut Filestash uygulamas\u0131na yeni \u00f6zellikler eklemenize, davran\u0131\u015flar\u0131n\u0131 de\u011fi\u015ftirmenize veya kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc (UI) kendi gereksinimlerinize g\u00f6re uyarlaman\u0131za olanak tan\u0131r. Bu sayede, genel bir \u00e7\u00f6z\u00fcm\u00fc kendi \u00f6zel kullan\u0131m durumunuza m\u00fckemmel bir \u015fekilde adapte edebilirsiniz. Bir eklenti yazmak, sadece uygulaman\u0131n i\u015flevselli\u011fini geni\u015fletmekle kalmaz, ayn\u0131 zamanda operasyonel verimlili\u011fi art\u0131r\u0131r ve kullan\u0131c\u0131 deneyimini iyile\u015ftirir. \u00d6rne\u011fin, b\u00fcy\u00fck bir kurumsal yap\u0131da \u00e7al\u0131\u015fanlar, Filestash \u00fczerinden bir dosyay\u0131 indirirken otomatik olarak \u015firket i\u00e7i bir kay\u0131t sistemine log d\u00fc\u015f\u00fclmesini veya belirli bir dizine y\u00fcklenen dosyalar\u0131n otomatik olarak etiketlenmesini isteyebilirler. Standart Filestash s\u00fcr\u00fcm\u00fc bu \u00f6zellikleri do\u011frudan sunmasa da, geli\u015ftirilecek \u00f6zel bir eklenti ile bu ihtiya\u00e7lar kolayca kar\u015f\u0131lanabilir. Dolay\u0131s\u0131yla, eklenti geli\u015ftirme yetene\u011fi, Filestash&#8217;i sadece bir dosya y\u00f6neticisi olmaktan \u00e7\u0131kar\u0131p, i\u015f s\u00fcre\u00e7lerinizin ayr\u0131lmaz bir par\u00e7as\u0131 haline getirir.<\/p>\n<p>Eklentiler, Filestash&#8217;in \u00e7ekirdek kodunu de\u011fi\u015ftirmeden i\u015flevsellik eklemenin g\u00fcvenli ve s\u00fcrd\u00fcr\u00fclebilir bir yolunu sunar. Bu, Filestash&#8217;in yeni s\u00fcr\u00fcmlerine y\u00fckseltme yaparken uyumluluk sorunlar\u0131n\u0131 en aza indirmemize yard\u0131mc\u0131 olur. Ayr\u0131ca, geli\u015ftirilen eklentiler mod\u00fcler bir yap\u0131da oldu\u011fu i\u00e7in, gelecekteki de\u011fi\u015fiklikler veya eklemeler i\u00e7in de esneklik sa\u011flar. Bu durum, uzun vadeli projeler veya s\u00fcrekli de\u011fi\u015fen i\u015f ihtiya\u00e7lar\u0131 i\u00e7in kritik bir avantajd\u0131r. K\u0131sacas\u0131, Filestash eklentileri, platformun potansiyelini tam anlam\u0131yla ortaya \u00e7\u0131karman\u0131za ve onu kendi benzersiz gereksinimlerinize g\u00f6re \u015fekillendirmenize olanak tan\u0131yan g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bu makalenin devam\u0131nda, bu g\u00fcc\u00fc nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz.<\/p>\n<h2>Temel Kavramlar: Filestash ve Eklenti Mimarisi Nelerdir?<\/h2>\n<p>Filestash eklenti geli\u015ftirme d\u00fcnyas\u0131na dalmadan \u00f6nce, Filestash&#8217;in alt\u0131nda yatan temel mimariyi ve eklentilerin bu mimariyle nas\u0131l etkile\u015fime girdi\u011fini anlamak \u00f6nemlidir. Filestash, Python ile yaz\u0131lm\u0131\u015f bir arka uca ve Vue.js ile olu\u015fturulmu\u015f modern bir \u00f6n uca sahiptir. Bu iki katman, RESTful API&#8217;ler arac\u0131l\u0131\u011f\u0131yla birbiriyle ileti\u015fim kurar. Eklentiler de temelde bu API&#8217;leri ve \u00f6n y\u00fczdeki Vue bile\u015fenlerini kullanarak Filestash&#8217;in davran\u0131\u015f\u0131n\u0131 geni\u015fletir veya de\u011fi\u015ftirir.<\/p>\n<p>Bir Filestash eklentisi, genellikle bir dizi JavaScript dosyas\u0131, iste\u011fe ba\u011fl\u0131 olarak CSS stilleri ve bir yap\u0131land\u0131rma (manifest) dosyas\u0131ndan olu\u015fur. Manifest dosyas\u0131, eklentinin ad\u0131n\u0131, s\u00fcr\u00fcm\u00fcn\u00fc, a\u00e7\u0131klamas\u0131n\u0131 ve hangi kancalar\u0131 (hooks) veya olaylar\u0131 dinleyece\u011fini belirler. Kancalar, Filestash&#8217;in belirli bir noktada eklentilerin m\u00fcdahale etmesine izin verdi\u011fi \u00f6nceden tan\u0131mlanm\u0131\u015f noktalard\u0131r. \u00d6rne\u011fin, bir dosya y\u00fcklenmeden hemen \u00f6nce, bir klas\u00f6r a\u00e7\u0131ld\u0131ktan sonra veya kullan\u0131c\u0131 aray\u00fcz\u00fcnde belirli bir b\u00f6l\u00fcm render edilirken bir eklenti devreye girebilir. Bu kancalar sayesinde, uygulaman\u0131n \u00e7ekirdek mant\u0131\u011f\u0131na dokunmadan i\u015flevselli\u011fi art\u0131rabiliriz.<\/p>\n<p>Filestash&#8217;in eklenti mimarisi, olaya dayal\u0131 bir yap\u0131ya sahiptir. Bu, belirli bir olay (\u00f6rne\u011fin, dosya se\u00e7imi, dizin de\u011fi\u015fikli\u011fi) tetiklendi\u011finde, ilgili eklentilerin bu olay\u0131 yakalay\u0131p kendi mant\u0131\u011f\u0131n\u0131 y\u00fcr\u00fctmesine olanak tan\u0131r. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n b\u00fcy\u00fck bir dosyay\u0131 y\u00fcklemesini engellemek istiyorsan\u0131z, &#8220;pre-upload&#8221; olay\u0131n\u0131 dinleyen bir eklenti yazabilir ve dosya boyutu limitini a\u015farsa y\u00fcklemeyi iptal edebilirsiniz. Bu esneklik, Filestash&#8217;in herhangi bir \u00f6zelle\u015ftirme ihtiyac\u0131na adapte olabilmesini sa\u011flar.<\/p>\n<p>\u00d6n y\u00fczdeki (frontend) geni\u015fletmeler i\u00e7in Filestash, Vue.js&#8217;in g\u00fcc\u00fcnden yararlan\u0131r. Eklentiler, mevcut Vue bile\u015fenlerine yeni elementler ekleyebilir veya tamamen yeni g\u00f6r\u00fcn\u00fcmler olu\u015fturabilir. Bu, \u00f6rne\u011fin, dosya listesine \u00f6zel bir filtreleme se\u00e7ene\u011fi eklemek veya belirli dosya t\u00fcrleri i\u00e7in \u00f6zel bir \u00f6nizleyici geli\u015ftirmek istedi\u011finizde olduk\u00e7a kullan\u0131\u015fl\u0131d\u0131r. Arka u\u00e7taki (backend) entegrasyonlar ise genellikle API \u00e7a\u011fr\u0131lar\u0131 veya \u00f6zel i\u015fleme mant\u0131\u011f\u0131 ile ger\u00e7ekle\u015ftirilir. Filestash, farkl\u0131 depolama arka u\u00e7lar\u0131yla (SFTP, S3 vb.) zaten entegre oldu\u011fu i\u00e7in, eklentiler bu mevcut ba\u011flant\u0131lar\u0131 kullanarak veya tamamen yeni bir depolama sa\u011flay\u0131c\u0131s\u0131n\u0131 destekleyerek kendi i\u015flevselli\u011fini geli\u015ftirebilir. Sonu\u00e7 olarak, Filestash&#8217;in mod\u00fcler yap\u0131s\u0131, eklentilerin hem \u00f6n y\u00fczde hem de arka u\u00e7ta kapsaml\u0131 de\u011fi\u015fiklikler yapmas\u0131na imkan tan\u0131yarak, ger\u00e7ekten ki\u015fiselle\u015ftirilmi\u015f bir dosya y\u00f6netim deneyimi sunar.<\/p>\n<h2>\u0130lk Filestash Eklentimizi Nas\u0131l Geli\u015ftiririz?<\/h2>\n<p>Art\u0131k Filestash eklentilerinin ne oldu\u011funu ve neden \u00f6nemli olduklar\u0131n\u0131 anlad\u0131\u011f\u0131m\u0131za g\u00f6re, ilk basit eklentimizi geli\u015ftirme zaman\u0131 geldi. Bu b\u00f6l\u00fcmde, bir eklenti i\u00e7in temel dosya yap\u0131s\u0131n\u0131 olu\u015fturacak ve Filestash aray\u00fcz\u00fcne k\u00fc\u00e7\u00fck bir de\u011fi\u015fiklik ekleyen bir &#8220;Merhaba D\u00fcnya&#8221; eklentisi yazaca\u011f\u0131z. Bu, eklenti geli\u015ftirme s\u00fcrecine ad\u0131m atman\u0131z i\u00e7in harika bir ba\u015flang\u0131\u00e7 noktas\u0131 olacakt\u0131r.<\/p>\n<p>\u00d6ncelikle, Filestash kurulumunuzda eklentilerin nerede sakland\u0131\u011f\u0131n\u0131 bilmemiz gerekiyor. Genellikle, Filestash uygulamas\u0131n\u0131n k\u00f6k dizininde bulunan <code>\/plugins<\/code> veya <code>\/filestash\/plugins<\/code> dizinine eklentilerimizi yerle\u015ftiririz. Her eklenti, kendi ad\u0131n\u0131 ta\u015f\u0131yan bir alt dizin i\u00e7inde bulunmal\u0131d\u0131r. \u00d6rne\u011fin, &#8220;Merhaba Dunya&#8221; eklentimiz i\u00e7in <code>\/plugins\/merhaba_dunya<\/code> \u015feklinde bir yap\u0131 olu\u015fturaca\u011f\u0131z.<\/p>\n<p>Eklenti dizininin i\u00e7inde, bir <code>manifest.json<\/code> dosyas\u0131 olu\u015fturmal\u0131y\u0131z. Bu dosya, eklentimizin temel meta verilerini i\u00e7erir ve Filestash&#8217;e eklenti hakk\u0131nda bilgi verir. Bu dosya, eklentinin ad\u0131, s\u00fcr\u00fcm\u00fc ve belki de hangi JavaScript dosyalar\u0131n\u0131n y\u00fcklenece\u011fi gibi bilgileri i\u00e7erir. \u0130\u015fte basit bir <code>manifest.json<\/code> \u00f6rne\u011fi:<\/p>\n<pre><code>\n{\n  \"name\": \"Merhaba Dunya Eklentisi\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Filestash'e k\u00fc\u00e7\u00fck bir 'Merhaba D\u00fcnya' mesaj\u0131 ekler.\",\n  \"main\": \"main.js\",\n  \"frontend\": {\n    \"scripts\": [\"main.js\"]\n  },\n  \"hooks\": {\n    \"app:mounted\": \"showGreeting\"\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki manifest dosyas\u0131, eklentimizin ad\u0131n\u0131, a\u00e7\u0131klamas\u0131n\u0131 ve s\u00fcr\u00fcm\u00fcn\u00fc tan\u0131mlar. <code>\"main\"<\/code> alan\u0131 eklentinin ana JavaScript dosyas\u0131n\u0131 i\u015faret ederken, <code>\"frontend.scripts\"<\/code> alan\u0131 \u00f6n y\u00fczde y\u00fcklenecek JavaScript dosyalar\u0131n\u0131 belirtir. En \u00f6nemlisi, <code>\"hooks\"<\/code> b\u00f6l\u00fcm\u00fcnde <code>\"app:mounted\": \"showGreeting\"<\/code> kancas\u0131n\u0131 tan\u0131mlad\u0131k. Bu, Filestash uygulamas\u0131 tamamen y\u00fcklendi\u011finde (mounted oldu\u011funda) <code>showGreeting<\/code> adl\u0131 bir fonksiyonun \u00e7a\u011fr\u0131laca\u011f\u0131 anlam\u0131na gelir. \u015eimdi <code>main.js<\/code> dosyam\u0131z\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code>\n(function() {\n  window.FilestashPlugin = window.FilestashPlugin || {};\n\n  window.FilestashPlugin.showGreeting = function() {\n    alert(\"Merhaba Filestash D\u00fcnyas\u0131! Eklentiniz \u00e7al\u0131\u015f\u0131yor!\");\n    console.log(\"Filestash Merhaba D\u00fcnya Eklentisi ba\u015far\u0131yla y\u00fcklendi.\");\n  };\n\n  \/\/ Uzman \u0130pucu: Eklentilerinizin benzersiz ad alanlar\u0131 kullanmas\u0131,\n  \/\/ di\u011fer eklentilerle veya Filestash \u00e7ekirdek kodlar\u0131yla \u00e7ak\u0131\u015fmay\u0131 \u00f6nler.\n  \/\/ window.FilestashPlugin objesi bunun i\u00e7in iyi bir y\u00f6ntemdir.\n})();\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu <code>main.js<\/code> dosyas\u0131, Filestash uygulamas\u0131 y\u00fcklendi\u011finde bir JavaScript <code>alert<\/code> kutusu g\u00f6steren ve konsola bir mesaj yazan bir <code>showGreeting<\/code> fonksiyonu tan\u0131mlar. Eklentimizi Filestash'e tan\u0131tmak i\u00e7in sunucuyu yeniden ba\u015flatman\u0131z gerekebilir. Yeniden ba\u015flatt\u0131ktan sonra, Filestash aray\u00fcz\u00fcn\u00fc a\u00e7t\u0131\u011f\u0131n\u0131zda bir \"Merhaba Filestash D\u00fcnyas\u0131!\" uyar\u0131s\u0131 g\u00f6rmelisiniz. Bu, ilk eklentinizin ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6sterir.<\/p>\n<p>Bu basit \u00f6rnek, bir eklentinin nas\u0131l yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131n\u0131 ve Filestash ya\u015fam d\u00f6ng\u00fcs\u00fcndeki belirli olaylara nas\u0131l yan\u0131t verdi\u011fini anlamak i\u00e7in harika bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Sonraki ad\u0131mlarda, bu temeli kullanarak daha karma\u015f\u0131k i\u015flevler eklemeyi ve Filestash'in sundu\u011fu di\u011fer kancalar\u0131 ve API'leri ke\u015ffetmeyi \u00f6\u011frenece\u011fiz.<\/p>\n<h2>Filestash Eklentisi ile Dosya \u0130\u015flemleri Nas\u0131l \u00d6zelle\u015ftirilir?<\/h2>\n<p>\u0130lk basit \"Merhaba D\u00fcnya\" eklentimizi ba\u015far\u0131yla geli\u015ftirdikten sonra, \u015fimdi Filestash'in \u00e7ekirdek i\u015flevlerinden biri olan dosya i\u015flemleri \u00fczerinde nas\u0131l kontrol sa\u011flayabilece\u011fimizi ve bunlar\u0131 nas\u0131l \u00f6zelle\u015ftirebilece\u011fimizi inceleyelim. Dosya y\u00fckleme, indirme, silme veya yeniden adland\u0131rma gibi i\u015flemler, eklentiler arac\u0131l\u0131\u011f\u0131yla kolayca geli\u015ftirilebilir veya \u00f6zel kurallarla donat\u0131labilir. Bu, \u00f6zellikle kurumsal ortamlarda belirli g\u00fcvenlik politikalar\u0131n\u0131 uygulamak veya i\u015f ak\u0131\u015flar\u0131n\u0131 otomatikle\u015ftirmek i\u00e7in olduk\u00e7a \u00f6nemlidir.<\/p>\n<p>Filestash, dosya i\u015flemlerine m\u00fcdahale etmek i\u00e7in bir dizi g\u00fc\u00e7l\u00fc kanca (hook) sunar. \u00d6rne\u011fin, bir dosya y\u00fcklenmeden \u00f6nce <code>file:upload:before<\/code>, y\u00fcklendikten sonra <code>file:upload:after<\/code> gibi kancalar\u0131 kullanabiliriz. Bu kancalar, eklentinize i\u015flem \u00f6ncesi veya sonras\u0131 m\u00fcdahale etme yetene\u011fi verir. \u015eimdi, bir dosya y\u00fcklemeden \u00f6nce dosya ad\u0131nda belirli karakterlerin olup olmad\u0131\u011f\u0131n\u0131 kontrol eden basit bir eklenti olu\u015ftural\u0131m. Diyelim ki, dosya adlar\u0131nda bo\u015fluk yerine alt \u00e7izgi kullan\u0131lmas\u0131n\u0131 zorunlu k\u0131lmak istiyoruz.<\/p>\n<p>\u00d6nceki eklenti yap\u0131m\u0131z\u0131 geni\u015fleterek, <code>manifest.json<\/code> dosyam\u0131za yeni bir kanca ekleyelim:<\/p>\n<pre><code>\n{\n  \"name\": \"Dosya \u0130smi Do\u011frulama Eklentisi\",\n  \"version\": \"1.0.1\",\n  \"description\": \"Dosya y\u00fcklemeden \u00f6nce dosya ad\u0131n\u0131 kontrol eder.\",\n  \"main\": \"main.js\",\n  \"frontend\": {\n    \"scripts\": [\"main.js\"]\n  },\n  \"hooks\": {\n    \"app:mounted\": \"initializePlugin\",\n    \"file:upload:before\": \"validateFileName\" \/\/ Yeni kancam\u0131z\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi <code>main.js<\/code> dosyam\u0131z\u0131 g\u00fcncelleyerek <code>validateFileName<\/code> fonksiyonunu ekleyelim. Bu fonksiyon, y\u00fcklenmek \u00fczere olan dosya bilgilerini parametre olarak alacakt\u0131r:<\/p>\n<pre><code>\n(function() {\n  window.FilestashPlugin = window.FilestashPlugin || {};\n\n  window.FilestashPlugin.initializePlugin = function() {\n    console.log(\"Dosya \u0130smi Do\u011frulama Eklentisi y\u00fcklendi.\");\n  };\n\n  window.FilestashPlugin.validateFileName = function(file) {\n    if (file && file.name) {\n      if (file.name.includes(\" \")) {\n        alert(\"Uyar\u0131: Dosya ad\u0131nda bo\u015fluk kullan\u0131lamaz. L\u00fctfen alt \u00e7izgi kullan\u0131n!\");\n        \/\/ Y\u00fckleme i\u015flemini iptal etmek i\u00e7in false d\u00f6nebiliriz.\n        return false;\n      }\n    }\n    \/\/ Her \u015fey yolundaysa true d\u00f6nerek y\u00fckleme i\u015flemine devam etmesini sa\u011flar\u0131z.\n    return true;\n  };\n\n  \/\/ Uzman \u0130pucu: Karma\u015f\u0131k do\u011frulama mant\u0131\u011f\u0131 i\u00e7in, arka u\u00e7tan bir API \u00e7a\u011fr\u0131s\u0131 yaparak\n  \/\/ sunucu taraf\u0131nda daha g\u00fc\u00e7l\u00fc kontroller ger\u00e7ekle\u015ftirebilirsiniz.\n})();\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu eklentiyi Filestash'e y\u00fckleyip sunucuyu yeniden ba\u015flatt\u0131ktan sonra, bo\u015fluk i\u00e7eren bir dosya ad\u0131 ile dosya y\u00fcklemeye \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda bir uyar\u0131 alacak ve y\u00fckleme i\u015flemi iptal edilecektir. Bu senaryo, eklentilerin dosya i\u015flemleri \u00fczerinde ne kadar g\u00fc\u00e7l\u00fc bir kontrol sa\u011flayabilece\u011fini a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Benzer \u015fekilde, bir dosyay\u0131 sildikten sonra \u00f6zel bir log kayd\u0131 olu\u015fturmak veya bir dosyay\u0131 indirirken belirli metadata'lar\u0131 eklemek i\u00e7in ilgili kancalar\u0131 kullanabilirsiniz. Bu, Filestash'in sadece bir dosya y\u00f6neticisi olmaktan \u00f6te, \u00f6zelle\u015ftirilebilir bir i\u015f ak\u0131\u015f\u0131 arac\u0131 haline gelmesini sa\u011flar. Bu \u00f6zelle\u015ftirme yetene\u011fi sayesinde, Filestash'i \u015firketinize \u00f6zel g\u00fcvenlik ve uyumluluk gereksinimlerine g\u00f6re adapte edebilirsiniz.<\/p>\n<h2>Kullan\u0131c\u0131 Aray\u00fcz\u00fcn\u00fc Geni\u015fletme: Yeni Bile\u015fenler Eklemek Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Filestash'in i\u015flevselli\u011fini art\u0131rman\u0131n yan\u0131 s\u0131ra, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc (UI) de kendi ihtiya\u00e7lar\u0131n\u0131za g\u00f6re \u015fekillendirebilirsiniz. Bu, kullan\u0131c\u0131 deneyimini iyile\u015ftirmek, belirli i\u015flevlere daha h\u0131zl\u0131 eri\u015fim sa\u011flamak veya markan\u0131za \u00f6zel g\u00f6r\u00fcn\u00fcmler olu\u015fturmak i\u00e7in kritik \u00f6neme sahiptir. Filestash, Vue.js tabanl\u0131 bir \u00f6n uca sahip oldu\u011fu i\u00e7in, eklentilerinizle mevcut Vue bile\u015fenlerine yeni elementler ekleyebilir veya hatta tamamen yeni Vue bile\u015fenleri olu\u015fturup bunlar\u0131 Filestash aray\u00fcz\u00fcne entegre edebilirsiniz.<\/p>\n<p>Bir eklenti arac\u0131l\u0131\u011f\u0131yla kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc geni\u015fletmek, genellikle belirli bir \"mount\" noktas\u0131na (bir HTML elementinin id'si veya s\u0131n\u0131f\u0131) kendi \u00f6zel bile\u015feninizi yerle\u015ftirmek anlam\u0131na gelir. Filestash, eklentilerin \u00f6n y\u00fczdeki \u00e7e\u015fitli alanlara m\u00fcdahale etmesine olanak tan\u0131yan bir dizi kanca ve dahili API sa\u011flar. \u00d6rne\u011fin, ana ara\u00e7 \u00e7ubu\u011funa yeni bir d\u00fc\u011fme ekleyebilir veya dosya listeleme ekran\u0131na ek bir bilgi paneli entegre edebilirsiniz. Diyelim ki, Filestash aray\u00fcz\u00fcn\u00fcn sa\u011f \u00fcst k\u00f6\u015fesine, belirli bir eylemi tetikleyen \u00f6zel bir d\u00fc\u011fme eklemek istiyoruz.<\/p>\n<p>\u0130lk ad\u0131m olarak, <code>manifest.json<\/code> dosyam\u0131z\u0131 g\u00fcncelleyerek eklentimizin bir UI bile\u015feni ekleyece\u011fini belirtebiliriz. Ancak do\u011frudan manifest \u00fczerinden yeni bir d\u00fc\u011fme eklemek yerine, JavaScript kodumuzda Filestash'in mevcut DOM yap\u0131s\u0131na m\u00fcdahale ederek veya bir Vue bile\u015feni ekleyerek bunu yapabiliriz. En pratik yol, <code>app:mounted<\/code> kancas\u0131n\u0131 kullanarak uygulaman\u0131n y\u00fcklenmesini beklemek ve ard\u0131ndan DOM manip\u00fclasyonu yapmakt\u0131r. Alternatif olarak, Filestash'in sundu\u011fu \u00f6zel \u00f6n y\u00fcz API'lerini kullanabiliriz.<\/p>\n<pre><code>\n(function() {\n  window.FilestashPlugin = window.FilestashPlugin || {};\n\n  window.FilestashPlugin.addCustomButton = function() {\n    \/\/ Filestash'in sa\u011f \u00fcst k\u00f6\u015fe alan\u0131n\u0131 hedefliyoruz (\u00f6rne\u011fin, .top-right-actions s\u0131n\u0131f\u0131)\n    const topActions = document.querySelector('.top-right-actions');\n\n    if (topActions) {\n      const customButton = document.createElement('button');\n      customButton.textContent = '\u00d6zel Eylem';\n      customButton.className = 'btn btn-primary ml-2'; \/\/ Filestash'in kendi CSS s\u0131n\u0131flar\u0131n\u0131 kullanma\n      customButton.onclick = function() {\n        alert('\u00d6zel Eylem Ba\u015flat\u0131ld\u0131!');\n        console.log('\u00d6zel Eylem d\u00fc\u011fmesine t\u0131kland\u0131.');\n      };\n\n      topActions.appendChild(customButton);\n      console.log('\u00d6zel Eylem d\u00fc\u011fmesi ba\u015far\u0131yla eklendi.');\n    } else {\n      console.warn('Hedef UI element bulunamad\u0131: .top-right-actions');\n    }\n  };\n\n  \/\/ app:mounted kancas\u0131, uygulaman\u0131n UI'\u0131 y\u00fcklendi\u011finde \u00e7al\u0131\u015f\u0131r.\n  window.FilestashPlugin.initializeUIExtension = function() {\n    console.log(\"UI Geni\u015fletme Eklentisi y\u00fcklendi.\");\n    window.FilestashPlugin.addCustomButton();\n  };\n\n  \/\/ Mevcut manifest.json'daki hooks k\u0131sm\u0131n\u0131 g\u00fcncelleyebiliriz:\n  \/\/ \"hooks\": {\n  \/\/   \"app:mounted\": \"initializeUIExtension\"\n  \/\/ }\n})();\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, <code>addCustomButton<\/code> fonksiyonu, Filestash'in mevcut <code>.top-right-actions<\/code> s\u0131n\u0131f\u0131na sahip bir alana yeni bir HTML d\u00fc\u011fmesi ekler. D\u00fc\u011fme, Filestash'in kendi CSS s\u0131n\u0131flar\u0131n\u0131 (<code>btn btn-primary ml-2<\/code>) kullanarak uygulaman\u0131n genel stiliyle uyumlu g\u00f6r\u00fcnmesini sa\u011flar. D\u00fc\u011fmeye t\u0131kland\u0131\u011f\u0131nda basit bir uyar\u0131 mesaj\u0131 g\u00f6sterir. Bu yakla\u015f\u0131m, Filestash'in DOM yap\u0131s\u0131na do\u011frudan m\u00fcdahale eder. Daha karma\u015f\u0131k senaryolarda, kendi Vue bile\u015fenlerinizi olu\u015fturup bunlar\u0131 mevcut Filestash bile\u015fenlerinin i\u00e7ine yerle\u015ftirmeniz gerekebilir. Bu, daha derinlemesine Vue.js bilgisi gerektirir ve Filestash'in i\u00e7indeki Vue \u00f6rneklerine eri\u015fim sa\u011flamay\u0131 i\u00e7erir.<\/p>\n<div class=\"expert-tip\">Uzman \u0130pucu: Filestash'in i\u00e7indeki Vue bile\u015fenlerine eri\u015fmek i\u00e7in, taray\u0131c\u0131n\u0131z\u0131n geli\u015ftirici ara\u00e7lar\u0131ndaki Vue devtools eklentisini kullanabilir, mevcut bile\u015fen hiyerar\u015fisini ve bunlar\u0131n prop'lar\u0131n\u0131\/state'lerini inceleyebilirsiniz. Bu, entegrasyon noktalar\u0131n\u0131 daha iyi anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r. Ayr\u0131ca, kendi eklenti CSS dosyalar\u0131n\u0131z\u0131 ekleyerek d\u00fc\u011fmelerinizi veya bile\u015fenlerinizi daha da stilize edebilirsiniz. Mobil uyumlu bir aray\u00fcz i\u00e7in, ekledi\u011finiz elementlerin responsive tasar\u0131m ilkelerine uygun oldu\u011fundan emin olun. \u00d6rne\u011fin, belirli bir ekran boyutunun alt\u0131nda d\u00fc\u011fmelerin farkl\u0131 bir d\u00fczene ge\u00e7mesi i\u00e7in CSS media query'lerini kullanabilirsiniz:<\/p>\n<pre><code class=\"language-css\">\n@media (max-width: 768px) {\n  .top-right-actions .custom-button {\n    display: block;\n    width: 100%;\n    margin-top: 10px;\n  }\n}\n        <\/pre>\n<p><\/code>\n    <\/div>\n<p>Kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc geni\u015fletmek, Filestash'i sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda g\u00f6rsel olarak da size \u00f6zel hale getirmenin anahtar\u0131d\u0131r. Bu sayede, kullan\u0131c\u0131lar\u0131n\u0131z\u0131n uygulaman\u0131zla etkile\u015fimini kolayla\u015ft\u0131rabilir ve genel verimlili\u011fi art\u0131rabilirsiniz.<\/p>\n<h2>Vaka Analizi: Kurumsal Veri Entegrasyonu i\u00e7in \u00d6zel Bir Eklenti<\/h2>\n<p>Filestash eklentilerinin ger\u00e7ek d\u00fcnya senaryolar\u0131nda nas\u0131l b\u00fcy\u00fck bir de\u011fer yaratabilece\u011fini anlamak i\u00e7in, bir vaka analizini inceleyelim. Orta \u00f6l\u00e7ekli bir in\u015faat \u015firketi olan \"Yap\u0131 Deha A.\u015e.\", projelerini y\u00f6netmek i\u00e7in Filestash'i kullan\u0131yor. Ancak \u015firket, projelerin t\u00fcm dok\u00fcmanlar\u0131n\u0131 (s\u00f6zle\u015fmeler, \u00e7izimler, ilerleme raporlar\u0131) mevcut ERP (Kurumsal Kaynak Planlama) sistemiyle otomatik olarak senkronize etmek istiyor. Bu senkronizasyon, hem veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc sa\u011flamak hem de manuel veri giri\u015finden kaynaklanan hatalar\u0131 azaltmak i\u00e7in kritik. Standart Filestash, do\u011frudan ERP entegrasyonu sunmuyor, bu y\u00fczden \u00f6zel bir eklentiye ihtiya\u00e7 duyuluyor.<\/p>\n<h3>Problem Tan\u0131m\u0131<\/h3>\n<p>Yap\u0131 Deha A.\u015e.'nin temel problemi, Filestash'e y\u00fcklenen veya Filestash'ten indirilen proje belgelerinin ERP sistemindeki ilgili proje kay\u0131tlar\u0131yla otomatik olarak ili\u015fkilendirilememesiydi. \u00c7al\u0131\u015fanlar, bir belgeyi Filestash'e y\u00fcklediklerinde, ayn\u0131 zamanda ERP sistemine girip manuel olarak belgeye referans vermeleri gerekiyordu. Bu, hem zaman al\u0131c\u0131 hem de hata yapmaya a\u00e7\u0131k bir s\u00fcre\u00e7ti. Ayr\u0131ca, ERP sistemindeki bir proje durumu de\u011fi\u015fti\u011finde (\u00f6rne\u011fin, \"Tamamland\u0131\" oldu\u011funda), ilgili Filestash klas\u00f6r\u00fcne eri\u015fimin k\u0131s\u0131tlanmas\u0131 veya belirli bir ar\u015fiv klas\u00f6r\u00fcne ta\u015f\u0131nmas\u0131 gibi otomatik kurallara ihtiya\u00e7 duyuluyordu.<\/p>\n<h3>Eklenti \u00c7\u00f6z\u00fcm\u00fc: \"ERP Sync Eklentisi\"<\/h3>\n<p>Bu ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak i\u00e7in \u00f6zel bir \"ERP Sync Eklentisi\" geli\u015ftirilmesine karar verildi. Eklentinin temel \u00f6zellikleri \u015funlar\u0131 i\u00e7erecekti:<\/p>\n<ol>\n<li><strong>Otomatik Proje Klas\u00f6r\u00fc Olu\u015fturma:<\/strong> ERP sisteminde yeni bir proje olu\u015fturuldu\u011funda, eklenti Filestash'te otomatik olarak o projeye ait bir klas\u00f6r yap\u0131s\u0131 olu\u015fturacakt\u0131 (\u00f6rn: \/Projeler\/ProjeKodu_ProjeAd\u0131).<\/li>\n<li><strong>Dosya Y\u00fckleme Entegrasyonu:<\/strong> Bir dosya bu proje klas\u00f6rlerinden birine y\u00fcklendi\u011finde, eklenti dosyan\u0131n metadata's\u0131n\u0131 (proje kodu, dosya t\u00fcr\u00fc, y\u00fckleyen kullan\u0131c\u0131 vb.) alacak ve bu bilgiyi ERP sistemine API \u00e7a\u011fr\u0131lar\u0131 arac\u0131l\u0131\u011f\u0131yla ileterek ilgili proje kayd\u0131na belgeyi otomatik olarak ba\u011flayacakt\u0131.<\/li>\n<li><strong>Durum Bazl\u0131 Eri\u015fim Kontrol\u00fc:<\/strong> ERP sistemindeki bir projenin durumu \"Tamamland\u0131\" olarak g\u00fcncellendi\u011finde, eklenti Filestash'teki ilgili klas\u00f6r\u00fcn eri\u015fim izinlerini otomatik olarak salt okunur (read-only) olarak de\u011fi\u015ftirecek ve\/veya belirlenen bir \"Ar\u015fiv\" klas\u00f6r\u00fcne ta\u015f\u0131yacakt\u0131.<\/li>\n<li><strong>\u00d6zel UI Eylemleri:<\/strong> Filestash aray\u00fcz\u00fcnde, bir proje klas\u00f6r\u00fcne sa\u011f t\u0131kland\u0131\u011f\u0131nda \"ERP Proje Bilgilerini G\u00f6r\u00fcnt\u00fcle\" gibi \u00f6zel bir men\u00fc se\u00e7ene\u011fi sunulacakt\u0131. Bu se\u00e7enek, ERP sisteminden anl\u0131k olarak proje \u00f6zetini \u00e7ekip kullan\u0131c\u0131ya g\u00f6sterecekti.<\/li>\n<\/ol>\n<h3>Teknik Uygulama Detaylar\u0131<\/h3>\n<p>Bu eklentinin ger\u00e7ekle\u015ftirilmesi i\u00e7in Filestash'in \u00e7e\u015fitli kancalar\u0131 ve API'leri kullan\u0131ld\u0131:<\/p>\n<ul>\n<li><strong><code>app:mounted<\/code>:<\/strong> Eklentinin ba\u015flang\u0131\u00e7 ayarlamalar\u0131n\u0131 yapmak ve ERP sisteminin API anahtar\u0131n\u0131 y\u00fcklemek i\u00e7in kullan\u0131ld\u0131.<\/li>\n<li><strong><code>file:upload:after<\/code>:<\/strong> Dosya y\u00fckleme i\u015flemi tamamland\u0131ktan sonra devreye girerek, y\u00fcklenen dosya bilgilerini ERP API'sine g\u00f6ndermek i\u00e7in kullan\u0131ld\u0131. Bu kancada, dosyan\u0131n bulundu\u011fu Filestash yolu \u00fczerinden proje kodu \u00e7\u0131kar\u0131ld\u0131.<\/li>\n<li><strong><code>directory:created:after<\/code>:<\/strong> Yeni bir dizin olu\u015fturuldu\u011funda ERP sistemine bilgi vermek i\u00e7in kullan\u0131ld\u0131.<\/li>\n<li><strong><code>ui:contextmenu:directory<\/code>:<\/strong> Dizinler i\u00e7in sa\u011f t\u0131klama men\u00fcs\u00fcne \"ERP Proje Bilgilerini G\u00f6r\u00fcnt\u00fcle\" se\u00e7ene\u011fini eklemek i\u00e7in kullan\u0131ld\u0131. T\u0131kland\u0131\u011f\u0131nda, JavaScript ile ERP API'sine \u00e7a\u011fr\u0131 yap\u0131ld\u0131 ve al\u0131nan veriler mod\u00fcl olarak g\u00f6sterildi.<\/li>\n<li><strong>Arka Plan \u0130\u015flemleri:<\/strong> ERP sistemindeki durum de\u011fi\u015fikliklerini dinlemek i\u00e7in, Filestash sunucusunda \u00e7al\u0131\u015fan ayr\u0131 bir cron job veya web kancas\u0131 (webhook) kullan\u0131ld\u0131. Bu, ERP'den gelen olaylar\u0131 Filestash eklentisine ileterek ilgili klas\u00f6r izinlerini g\u00fcncelleyecekti.<\/li>\n<\/ul>\n<p>Bu entegrasyon, Yap\u0131 Deha A.\u015e.'nin operasyonel verimlili\u011fini %30 oran\u0131nda art\u0131rd\u0131, veri giri\u015f hatalar\u0131n\u0131 minimuma indirdi ve proje y\u00f6neticilerine g\u00fcncel bilgilere tek bir platformdan eri\u015fim imkan\u0131 sa\u011flad\u0131. Ayr\u0131ca, dosya g\u00fcvenli\u011fi ve uyumluluk a\u00e7\u0131s\u0131ndan da \u00f6nemli iyile\u015ftirmeler sa\u011flad\u0131. Bu vaka analizi, Filestash eklentilerinin sadece basit \u00f6zellikler eklemekle kalmay\u0131p, karma\u015f\u0131k kurumsal i\u015f ak\u0131\u015flar\u0131n\u0131 otomatikle\u015ftirebilecek g\u00fc\u00e7l\u00fc entegrasyonlar sa\u011flayabildi\u011fini g\u00f6stermektedir. Mobil uyumluluk a\u00e7\u0131s\u0131ndan, \u00f6zel UI elementleri veya mod\u00fcller, farkl\u0131 ekran boyutlar\u0131na uygun olarak tasarlanmal\u0131 ve CSS media query'leri ile optimize edilmelidir, b\u00f6ylece tablet veya telefon \u00fczerinden eri\u015fim sa\u011flayan kullan\u0131c\u0131lar da sorunsuz bir deneyim ya\u015far.<\/p>\n<h2>Performans ve G\u00fcvenlik \u0130pu\u00e7lar\u0131: Eklentilerinizi Optimize Etme<\/h2>\n<p>Filestash eklentileri geli\u015ftirmek, platformun g\u00fcc\u00fcn\u00fc a\u00e7\u0131\u011fa \u00e7\u0131karman\u0131n harika bir yolu olsa da, eklentilerinizin performans\u0131n\u0131 ve g\u00fcvenli\u011fini sa\u011flamak da en az geli\u015ftirme kadar \u00f6nemlidir. K\u00f6t\u00fc optimize edilmi\u015f veya g\u00fcvenlik a\u00e7\u0131klar\u0131 i\u00e7eren bir eklenti, t\u00fcm Filestash kurulumunuzu olumsuz etkileyebilir. Bu b\u00f6l\u00fcmde, eklentilerinizi daha verimli ve g\u00fcvenli hale getirmek i\u00e7in uygulayabilece\u011finiz temel ipu\u00e7lar\u0131n\u0131 ve en iyi uygulamalar\u0131 ele alaca\u011f\u0131z.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131<\/h3>\n<ol>\n<li><strong>Asenkron \u00c7al\u0131\u015fma:<\/strong> \u00d6zellikle uzun s\u00fcren i\u015flemler (\u00f6rne\u011fin, b\u00fcy\u00fck dosyalar\u0131 i\u015fleme, harici API \u00e7a\u011fr\u0131lar\u0131) ger\u00e7ekle\u015ftirirken, eklentinizin Filestash uygulamas\u0131n\u0131n ana i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 bloke etmedi\u011finden emin olun. JavaScript'teki <code>Promise<\/code>, <code>async\/await<\/code> gibi yap\u0131lar\u0131 veya Web Workers'\u0131 kullanarak i\u015flemleri asenkron olarak y\u00fcr\u00fctebilirsiniz. Bu, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcn donmas\u0131n\u0131 \u00f6nler ve genel tepki s\u00fcresini iyile\u015ftirir.<\/li>\n<li><strong>Kaynaklar\u0131 Ak\u0131ll\u0131ca Y\u00fckleme:<\/strong> Eklentiniz yaln\u0131zca belirli sayfalarda veya belirli ko\u015fullar alt\u0131nda kullan\u0131l\u0131yorsa, t\u00fcm JavaScript ve CSS dosyalar\u0131n\u0131 uygulaman\u0131n her yerinde y\u00fcklemekten ka\u00e7\u0131n\u0131n. Manifest dosyan\u0131zdaki <code>scripts<\/code> b\u00f6l\u00fcm\u00fcn\u00fc veya kancalar\u0131 kullanarak, kaynaklar\u0131 yaln\u0131zca ihtiya\u00e7 duyuldu\u011funda y\u00fckleyebilirsiniz. Ayr\u0131ca, minimize edilmi\u015f (minified) ve s\u0131k\u0131\u015ft\u0131r\u0131lm\u0131\u015f (gzipped) kaynak dosyalar\u0131 kullanmak, y\u00fckleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/li>\n<li><strong>DOM Manip\u00fclasyonunu Optimize Etme:<\/strong> Kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc geni\u015fletirken, do\u011frudan DOM'u \u00e7ok s\u0131k manip\u00fcle etmek yerine, sanal DOM kullanan Vue.js gibi bir \u00e7er\u00e7eveden faydalan\u0131n. E\u011fer do\u011frudan DOM manip\u00fclasyonu yapman\u0131z gerekiyorsa, de\u011fi\u015fiklikleri grupland\u0131r\u0131n ve m\u00fcmk\u00fcn oldu\u011funca tek seferde yap\u0131n. \u00d6rne\u011fin, birden fazla element eklerken, bunlar\u0131 bir belge par\u00e7as\u0131na (document fragment) ekleyip ard\u0131ndan bu par\u00e7ay\u0131 DOM'a bir kez ekleyebilirsiniz.<\/li>\n<li><strong>Bellek Y\u00f6netimi:<\/strong> Eklentinizdeki de\u011fi\u015fkenlerin ve event listener'lar\u0131n gereksiz yere bellekte kalmad\u0131\u011f\u0131ndan emin olun. \u00d6zellikle SPA (Single Page Application) yap\u0131lar\u0131nda, bile\u015fenler veya eklentiler kald\u0131r\u0131ld\u0131\u011f\u0131nda (unmounted oldu\u011funda) eklenen event listener'lar\u0131 veya di\u011fer referanslar\u0131 temizlemek \u00f6nemlidir. Bu, bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nler.<\/li>\n<li><strong>API \u00c7a\u011fr\u0131lar\u0131n\u0131 \u00d6nbelle\u011fe Alma:<\/strong> E\u011fer eklentiniz s\u0131k s\u0131k ayn\u0131 harici API \u00e7a\u011fr\u0131lar\u0131n\u0131 yap\u0131yorsa, bu \u00e7a\u011fr\u0131lar\u0131n sonu\u00e7lar\u0131n\u0131 ge\u00e7ici olarak \u00f6nbelle\u011fe alarak (\u00f6rne\u011fin, taray\u0131c\u0131n\u0131n localStorage'\u0131nda veya bir JavaScript objesinde) tekrarlayan istekleri azaltabilirsiniz.<\/li>\n<\/ol>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<ol>\n<li><strong>Girdi Do\u011frulama:<\/strong> Eklentiniz kullan\u0131c\u0131dan veya harici API'lerden herhangi bir girdi al\u0131yorsa, bu verileri her zaman do\u011frulamadan ge\u00e7irin. Beklenmeyen veya k\u00f6t\u00fc niyetli girdiler, g\u00fcvenlik a\u00e7\u0131klar\u0131na yol a\u00e7abilir (\u00f6rne\u011fin, XSS - Cross-Site Scripting sald\u0131r\u0131lar\u0131). \u00d6zellikle HTML veya JavaScript i\u00e7eren girdileri dikkatlice temizleyin (sanitize).<\/li>\n<li><strong>Yetkilendirme ve Kimlik Do\u011frulama:<\/strong> Eklentiniz hassas verilere eri\u015fiyorsa veya hassas i\u015flemler ger\u00e7ekle\u015ftiriyorsa, kullan\u0131c\u0131n\u0131n bu eylemleri ger\u00e7ekle\u015ftirme yetkisine sahip oldu\u011fundan emin olun. Filestash'in mevcut kimlik do\u011frulama ve yetkilendirme mekanizmalar\u0131ndan faydalan\u0131n ve do\u011frudan kendi yetkilendirme mant\u0131\u011f\u0131n\u0131z\u0131 yazmaktan ka\u00e7\u0131n\u0131n. Harici API'lerle etkile\u015firken de g\u00fcvenli API anahtarlar\u0131 veya OAuth 2.0 gibi protokoller kullan\u0131n.<\/li>\n<li><strong>G\u00fcvenli \u0130leti\u015fim:<\/strong> Eklentiniz harici hizmetlerle ileti\u015fim kuruyorsa, her zaman HTTPS gibi \u015fifreli protokoller \u00fczerinden ileti\u015fim kurdu\u011fundan emin olun. Hassas verileri asla \u015fifrelenmemi\u015f kanallar \u00fczerinden g\u00f6ndermeyin.<\/li>\n<li><strong>Minimum Ayr\u0131cal\u0131k \u0130lkesi:<\/strong> Eklentinizin sadece i\u015fini yapmak i\u00e7in ihtiya\u00e7 duydu\u011fu minimum ayr\u0131cal\u0131klara sahip oldu\u011fundan emin olun. \u00d6rne\u011fin, bir eklentinin sadece dosya okuma yetkisine ihtiyac\u0131 varsa, ona dosya yazma veya silme yetkisi vermeyin. Bu, bir g\u00fcvenlik ihlali durumunda potansiyel zarar\u0131 s\u0131n\u0131rlar.<\/li>\n<li><strong>Hata Y\u00f6netimi ve Kay\u0131t Tutma:<\/strong> Eklentinizdeki hatalar\u0131 do\u011fru bir \u015fekilde ele al\u0131n ve \u00f6nemli olaylar\u0131 (ba\u015far\u0131s\u0131z API \u00e7a\u011fr\u0131lar\u0131, yetkilendirme hatalar\u0131 vb.) kaydedin. Bu kay\u0131tlar, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 veya performans sorunlar\u0131n\u0131 tespit etmenize yard\u0131mc\u0131 olabilir. Hassas bilgileri kay\u0131tlarda tutmaktan ka\u00e7\u0131n\u0131n.<\/li>\n<li><strong>A\u00e7\u0131k Kaynak Kod \u0130ncelemesi:<\/strong> E\u011fer eklentiniz a\u00e7\u0131k kaynakl\u0131 k\u00fct\u00fcphaneler kullan\u0131yorsa, bu k\u00fct\u00fcphanelerin bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n olmad\u0131\u011f\u0131ndan emin olmak i\u00e7in d\u00fczenli olarak g\u00fcvenlik taramalar\u0131ndan ge\u00e7irin veya g\u00fcncel tutun.<\/li>\n<\/ol>\n<p>Bu ipu\u00e7lar\u0131n\u0131 uygulayarak, Filestash eklentilerinizin sadece i\u015flevsel olmakla kalmay\u0131p, ayn\u0131 zamanda h\u0131zl\u0131, g\u00fcvenilir ve g\u00fcvenli oldu\u011fundan emin olabilirsiniz. Unutmay\u0131n, iyi bir eklenti deneyimi, performans ve g\u00fcvenlikle ba\u015flar.<\/p>\n<h2>Sonu\u00e7: Filestash Eklentileri ile Gelece\u011fin Dosya Y\u00f6netimi<\/h2>\n<p>Bu makale boyunca, Filestash'in g\u00fc\u00e7l\u00fc ve esnek eklenti mimarisini ke\u015ffettik. \"Merhaba D\u00fcnya\" gibi basit bir eklenti olu\u015fturmaktan, dosya i\u015flemlerini \u00f6zelle\u015ftirmeye, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc geni\u015fletmeye ve hatta karma\u015f\u0131k kurumsal entegrasyonlar i\u00e7in vaka analizleri yapmaya kadar, Filestash eklentilerinin sundu\u011fu geni\u015f yelpazeyi ele ald\u0131k. G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, Filestash, kullan\u0131c\u0131lar\u0131na ve i\u015fletmelere sadece bir dosya y\u00f6neticisi sunmakla kalm\u0131yor, ayn\u0131 zamanda onlar\u0131 kendi \u00f6zel ihtiya\u00e7lar\u0131na g\u00f6re \u015fekillendirme ve d\u00f6n\u00fc\u015ft\u00fcrme g\u00fcc\u00fc veriyor. Performans ve g\u00fcvenlik ipu\u00e7lar\u0131 sayesinde, geli\u015ftirdi\u011finiz eklentilerin sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda sa\u011flam ve g\u00fcvenilir olmas\u0131n\u0131 nas\u0131l sa\u011flayaca\u011f\u0131n\u0131z\u0131 \u00f6\u011frendiniz.<\/p>\n<p>Filestash eklentileri, dosya y\u00f6netim s\u00fcre\u00e7lerinizi otomatikle\u015ftirmenize, verimlili\u011fi art\u0131rman\u0131za ve benzersiz i\u015f ak\u0131\u015flar\u0131n\u0131za sorunsuz bir \u015fekilde entegre etmenize olanak tan\u0131r. \u0130ster k\u00fc\u00e7\u00fck bir ki\u015fisel ayarlama yap\u0131n ister b\u00fcy\u00fck \u00f6l\u00e7ekli bir kurumsal \u00e7\u00f6z\u00fcm geli\u015ftirin, eklenti mimarisi size ihtiyac\u0131n\u0131z olan esnekli\u011fi sunar. Gelecekte, Filestash toplulu\u011funun b\u00fcy\u00fcmesiyle birlikte daha da fazla eklenti ve entegrasyonun ortaya \u00e7\u0131kmas\u0131 beklenmektedir. Kendi eklentilerinizi geli\u015ftirerek, sadece kendi ihtiya\u00e7lar\u0131n\u0131z\u0131 kar\u015f\u0131lamakla kalmaz, ayn\u0131 zamanda Filestash ekosistemine katk\u0131da bulunabilir ve di\u011fer kullan\u0131c\u0131lar\u0131n da faydalanabilece\u011fi yenilik\u00e7i \u00e7\u00f6z\u00fcmler sunabilirsiniz. Bu rehber, Filestash eklenti geli\u015ftirme yolculu\u011funuzda sa\u011flam bir ba\u015flang\u0131\u00e7 noktas\u0131 olacakt\u0131r. \u015eimdi s\u0131ra sizde: hayal g\u00fcc\u00fcn\u00fcz\u00fc kullanarak Filestash deneyiminizi bir \u00fcst seviyeye ta\u015f\u0131y\u0131n!<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<ol>\n<li>\n<h4>Filestash eklentileri hangi dilde yaz\u0131l\u0131r?<\/h4>\n<p>Filestash eklentileri genellikle JavaScript kullan\u0131larak yaz\u0131l\u0131r. \u00d6n y\u00fcz (frontend) entegrasyonlar\u0131 i\u00e7in genellikle Vue.js ile uyumlu JavaScript kullan\u0131l\u0131rken, arka u\u00e7 (backend) i\u015flemleri genellikle Filestash'in Python tabanl\u0131 API'leri \u00fczerinden veya eklenti i\u00e7inde yap\u0131lan harici API \u00e7a\u011fr\u0131lar\u0131 ile ger\u00e7ekle\u015ftirilir. CSS ise stil tan\u0131mlamalar\u0131 i\u00e7in kullan\u0131l\u0131r.<\/p>\n<\/li>\n<li>\n<h4>Eklentimi Filestash'e nas\u0131l y\u00fcklerim?<\/h4>\n<p>Eklentinizi, Filestash kurulumunuzdaki <code>\/plugins<\/code> dizinine, eklentinizin ad\u0131n\u0131 ta\u015f\u0131yan bir alt klas\u00f6r i\u00e7inde yerle\u015ftirmeniz gerekir. \u00d6rne\u011fin, eklentinizin ad\u0131 \"MyCustomPlugin\" ise, <code>\/plugins\/my_custom_plugin\/<\/code> dizinini olu\u015fturup t\u00fcm eklenti dosyalar\u0131n\u0131z\u0131 buraya kopyalars\u0131n\u0131z. Ard\u0131ndan, Filestash sunucunuzu yeniden ba\u015flatman\u0131z gerekebilir, b\u00f6ylece yeni eklenti alg\u0131lan\u0131r ve y\u00fcklenir.<\/p>\n<\/li>\n<li>\n<h4>Eklentim Filestash uygulamas\u0131n\u0131 yava\u015flat\u0131r m\u0131?<\/h4>\n<p>Evet, e\u011fer eklentiniz k\u00f6t\u00fc optimize edilmi\u015fse, gereksiz kaynaklar y\u00fckl\u00fcyorsa, ana i\u015f par\u00e7ac\u0131\u011f\u0131n\u0131 bloke eden uzun s\u00fcreli i\u015flemler yap\u0131yorsa veya bellek s\u0131z\u0131nt\u0131lar\u0131na neden oluyorsa uygulamay\u0131 yava\u015flatabilir. Performans ipu\u00e7lar\u0131n\u0131 (asenkron \u00e7al\u0131\u015fma, kaynaklar\u0131 ak\u0131ll\u0131ca y\u00fckleme vb.) takip ederek eklentinizin Filestash'in performans\u0131n\u0131 olumsuz etkilemesini engelleyebilirsiniz.<\/p>\n<\/li>\n<li>\n<h4>Eklenti geli\u015ftirirken hata ay\u0131klama (debugging) nas\u0131l yap\u0131l\u0131r?<\/h4>\n<p>Filestash eklentileri, taray\u0131c\u0131n\u0131z\u0131n geli\u015ftirici ara\u00e7lar\u0131 (\u00f6rne\u011fin, Chrome DevTools) kullan\u0131larak kolayca hata ay\u0131klanabilir. JavaScript kodunuza kesme noktalar\u0131 (breakpoints) koyabilir, konsola log mesajlar\u0131 yazabilir (<code>console.log()<\/code>), de\u011fi\u015fken de\u011ferlerini inceleyebilir ve a\u011f isteklerini takip edebilirsiniz. Ayr\u0131ca, Filestash'in kendi sunucu loglar\u0131n\u0131 kontrol etmek de arka u\u00e7la ilgili sorunlar\u0131 tespit etmede yard\u0131mc\u0131 olabilir.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Modern i\u015f ak\u0131\u015flar\u0131nda verimli dosya y\u00f6netimi kritik bir \u00f6neme sahiptir. Filestash, kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle web&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-32813","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber<\/title>\n<meta name=\"description\" content=\"Modern i\u015f ak\u0131\u015flar\u0131nda verimli dosya y\u00f6netimi kritik bir \u00f6neme sahiptir. Filestash, kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle web tabanl\u0131 bir dosya y\u00f6neticisi olarak \u00f6ne \u00e7\u0131kar. Ancak standart \u00f6zellikler bazen \u00f6zel ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabilir. \u0130\u015fte tam bu noktada Filestash eklentileri devreye girer. Bu makale, Filestash deneyiminizi tam olarak \u00f6zelle\u015ftirmek i\u00e7in kendi eklentilerinizi nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak, ger\u00e7ek d\u00fcnya senaryolar\u0131 ve pratik kod \u00f6rnekleri sunarak size yol g\u00f6sterecektir.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Modern i\u015f ak\u0131\u015flar\u0131nda verimli dosya y\u00f6netimi kritik bir \u00f6neme sahiptir. Filestash, kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle web tabanl\u0131 bir dosya y\u00f6neticisi olarak \u00f6ne \u00e7\u0131kar. Ancak standart \u00f6zellikler bazen \u00f6zel ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabilir. \u0130\u015fte tam bu noktada Filestash eklentileri devreye girer. Bu makale, Filestash deneyiminizi tam olarak \u00f6zelle\u015ftirmek i\u00e7in kendi eklentilerinizi nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak, ger\u00e7ek d\u00fcnya senaryolar\u0131 ve pratik kod \u00f6rnekleri sunarak size yol g\u00f6sterecektir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-26T04:01:03+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2025-10-26T04:01:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/\"},\"wordCount\":4366,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/\",\"name\":\"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-26T04:01:03+00:00\",\"description\":\"Modern i\u015f ak\u0131\u015flar\u0131nda verimli dosya y\u00f6netimi kritik bir \u00f6neme sahiptir. Filestash, kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle web tabanl\u0131 bir dosya y\u00f6neticisi olarak \u00f6ne \u00e7\u0131kar. Ancak standart \u00f6zellikler bazen \u00f6zel ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabilir. \u0130\u015fte tam bu noktada Filestash eklentileri devreye girer. Bu makale, Filestash deneyiminizi tam olarak \u00f6zelle\u015ftirmek i\u00e7in kendi eklentilerinizi nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak, ger\u00e7ek d\u00fcnya senaryolar\u0131 ve pratik kod \u00f6rnekleri sunarak size yol g\u00f6sterecektir.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber","description":"Modern i\u015f ak\u0131\u015flar\u0131nda verimli dosya y\u00f6netimi kritik bir \u00f6neme sahiptir. Filestash, kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle web tabanl\u0131 bir dosya y\u00f6neticisi olarak \u00f6ne \u00e7\u0131kar. Ancak standart \u00f6zellikler bazen \u00f6zel ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabilir. \u0130\u015fte tam bu noktada Filestash eklentileri devreye girer. Bu makale, Filestash deneyiminizi tam olarak \u00f6zelle\u015ftirmek i\u00e7in kendi eklentilerinizi nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak, ger\u00e7ek d\u00fcnya senaryolar\u0131 ve pratik kod \u00f6rnekleri sunarak size yol g\u00f6sterecektir.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber","og_description":"Modern i\u015f ak\u0131\u015flar\u0131nda verimli dosya y\u00f6netimi kritik bir \u00f6neme sahiptir. Filestash, kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle web tabanl\u0131 bir dosya y\u00f6neticisi olarak \u00f6ne \u00e7\u0131kar. Ancak standart \u00f6zellikler bazen \u00f6zel ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabilir. \u0130\u015fte tam bu noktada Filestash eklentileri devreye girer. Bu makale, Filestash deneyiminizi tam olarak \u00f6zelle\u015ftirmek i\u00e7in kendi eklentilerinizi nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak, ger\u00e7ek d\u00fcnya senaryolar\u0131 ve pratik kod \u00f6rnekleri sunarak size yol g\u00f6sterecektir.","og_url":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-26T04:01:03+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber","datePublished":"2025-10-26T04:01:03+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/"},"wordCount":4366,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/","name":"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-26T04:01:03+00:00","description":"Modern i\u015f ak\u0131\u015flar\u0131nda verimli dosya y\u00f6netimi kritik bir \u00f6neme sahiptir. Filestash, kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve g\u00fc\u00e7l\u00fc \u00f6zellikleriyle web tabanl\u0131 bir dosya y\u00f6neticisi olarak \u00f6ne \u00e7\u0131kar. Ancak standart \u00f6zellikler bazen \u00f6zel ihtiya\u00e7lar\u0131 kar\u015f\u0131lamakta yetersiz kalabilir. \u0130\u015fte tam bu noktada Filestash eklentileri devreye girer. Bu makale, Filestash deneyiminizi tam olarak \u00f6zelle\u015ftirmek i\u00e7in kendi eklentilerinizi nas\u0131l geli\u015ftirece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak, ger\u00e7ek d\u00fcnya senaryolar\u0131 ve pratik kod \u00f6rnekleri sunarak size yol g\u00f6sterecektir.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/filestash-eklentisi-yazma-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Filestash Eklentisi Yazma: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32813","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=32813"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32813\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32813"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32813"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32813"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}