ne slaytı, ne tekerleği? sen şu yazdığından bir anlam çıkarabildin mi gerçekten, ben çıkartamadım çünkü
css'de parent'ı ya da öncesini seçme durumu olmadığı için yapamazsın :) jquery ile şöyle bir şey yapabilirsin
<div class="purpose">başka bir div</div>
<div class="container">
<div>1. div</div>
<div>2. div</div>
<div>3. div</div>
</div>
<style>
.purpose.active {
background-color: lime;
}
</style>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$('.container div').on('mouseover', function() {
$('.purpose').addClass('active');
}).on('mouseleave', function() {
$('.purpose').removeClass('active');
});
</script>
güncel olması için bir sebep yok zaten, oturum yönetimi ne zamandan beri farklılaştı ki :)
ben https://packagist.org/ adresinden arıyordum paketleri belki sen de şansını deneyebilirsin
bir sürü markdown parser var aslında, örneğin
https://github.com/michelf/php-markdown
composer
olmadan ifadesi çok anlamsız, çünkü kolayca kurmak varken neden uğraşmak isteyesin? çok istiyorsan kaynak kodlarını indirip uğraşarak projene dahil edebilirsin ama dediğim gibi, bir anlamı yok bunun :)
python'ın re
modülündeki sub()
metodunu kullanarak bunu bir html tagı içine alabilirsin, örneğin;
import re
txt = "Güzel film blabla [--spoiler--]Bilmem ne ölüyor[--spoiler--] spoilersız yazı devam ediyor.. [--spoiler--]tekrar bir spoiler[--spoiler--] ve son :)"
replaced_txt = re.sub('\[--spoiler--\](.*?)\[--spoiler--\]', r'<span class="spoiler">\1</span>', txt)
print(replaced_txt)
# Güzel film blabla <span class="spoiler">Bilmem ne ölüyor</span> spoilersız yazı devam ediyor.. <span class="spoiler">tekrar bir spoiler</span> ve son :)
hangisini kolay yazıyorsan onunla kolay olur, bu tarz sorular biraz anlamsız kalıyor yapacağın şeyin özel bir yanı yok çünkü.
ayrıca lütfen sitedeki kategori seçimlerini soruyla ilişkili olarak kullanalım.
burada aldığın hata post değerinin array olmamasıyla alakalı dolayısı ile foreach'e sokmadan önce şu şekilde kontrol etmen daha doğru olacaktır;
if (isset($_POST['siparistamam'])) {
$isimsy=$_POST['isimsoyisim'];
$sirket=$_POST['sirket'];
$adres=$_POST['adres'];
$sehir=$_POST['sehir'];
if (isset($_POST['alan']) && is_array($_POST['alan'])){
foreach ($_POST['alan'] as $key => $value) {
$db->query("insert into siparis(alan_kadi) values ('$value')");
}
}
if (isset($_POST['veren']) && is_array($_POST['veren'])){
foreach ($_POST['veren'] as $key => $value) {
$db->query("insert into siparis(veren_kadi) values ('$value')");
}
}
if (isset($_POST['fiyat']) && is_array($_POST['fiyat'])){
foreach ($_POST['fiyat'] as $key => $value) {
$db->query("insert into siparis(toplam_tutar) values ('$value')");
}
}
if (isset($_POST['urunid']) && is_array($_POST['urunid'])){
foreach ($_POST['urunid'] as $key => $value) {
$db->query("insert into siparis(urun_id) values ('$value')");
}
}
$db->query("insert into siparis(isimsoyisim,adres,sirket,sehir) values('.$isimsy.','.$adres.','.$sirket.','.$sehir.')");
}
ayrıca print_r()
ile dump ederek gelen değerlerini kontrol etmen gerek, sen eminsin ama öyle geliyor mu bir kontrolün yok gibi, en basit olarak şöyle bakıp karar ver doğruluğuna;
print_r($_POST);
eğer include
ya da require
ile dosya açmak istiyorsan bunu tamponda tutup geriye döndürmen gerekir. Örneğin;
function kisakod_html(){
ob_start();
require 'dosyaadi.php';
$file = ob_get_clean();
return $file; // dosyanın içeriğini geriye döndürüyoruz, ob_ fonksiyonları ile ekrana basmayı engelliyor doğrudan
}
add_shortcode("kisakod","kisakod_html");
tabi sorunu yanlış anlamış olabilirim, o yüzden tam emin olamadım :)
tam olarak nasıl debug yaparsın bilmiyorum ancak javascript kodlarının tarayıcı uyumluluğuna bakarak safarinin desteklemediği kodları tespit ederek bunları düzenleme yoluna gidebilirsin belki
mantığı aslında belli bir standartta yazmak ve mümkün olduğunca içinde saf php yazmak yerine direktifleri kullanarak ya da özel yapı oluşturarak kullanmak.
yani html kodlarını phpden ayırıyoruz. ayrıca tabi bazı avantajlarıda var örneğin blade engine'de layout sistemi oluşturmak çok kolay ve bunu extend ederek tek bir yerden kontrolünü sağlamak çok rahat.
yapılışı ise aslında tamamen kodları regex ile ayrıştırıp işlemekten ibaret, elbette çok kolay değil, her ihtimali düşünmek gerekiyor.
mesela birlikte bir örnek yapalım, yapacağımız template engine'de sadece değişkenleri ve foreach işlemlerini dönüştürelim.
dolayısı ile php dosyasında değişkeni yazdırırken <?php echo $degisken; ?>
yerine {{ degisken }}
şeklinde bir kullanım olsun ve foreach için şunun yerine;
<?php foreach($todos as $key => $todo): ?>
<li>
<?=$todo?>
</li>
<?php endforeach; ?>
şöyle bir kullanımımız olsun
@foreach(todos as todo)
<li>{{ todo }}</li>
@endforeach
bu mantıkta ilk olarak temel bir sınıfa ihtiyacımız var. kabaca oluşturduğum ve test ettiğim sınıfı yazayım;
<?php
// template.php
class TemplatEngine {
public $view;
public function view($view, $data = [])
{
extract($data);
$viewName = $view . '.ptemplate.php';
$viewPath = __DIR__ . '/views/' . $viewName;
ob_start();
require $viewPath;
$this->view = ob_get_clean();
$this->parse();
$viewCachePath = __DIR__ . '/cache/' . md5($viewName) . '.cache.php';
// cache yoksa oluştur
if (!file_exists($viewCachePath)) {
file_put_contents($viewCachePath, $this->view);
}
if (filemtime($viewCachePath) < filemtime($viewPath)) {
file_put_contents($viewCachePath, $this->view);
}
require $viewCachePath;
}
public function parse()
{
$this->parseVariables();
$this->parseForeach();
}
public function parseVariables()
{
$this->view = preg_replace_callback('/{{(.*?)}}/', function($variable) {
return '<?=$' . trim($variable[1]) . '?>';
}, $this->view);
}
public function parseForeach()
{
$this->view = preg_replace_callback('/@foreach\((.*?) as (.*?)\)/', function($variable) {
if (strstr($variable[2], '=>')) {
[$key, $value] = explode('=>', $variable[2]);
return '<?php foreach($' . trim($variable[1]) . ' as $' . trim($key) . ' => $' . trim($value) . '): ?>';
}
return '<?php foreach($' . trim($variable[1]) . ' as $' . $variable[2] . '): ?>';
}, $this->view);
$this->view = preg_replace_callback('/@endforeach/', function($a){
return '<?php endforeach; ?>';
}, $this->view);
}
}
ve klasör yapın şöyle olsun
cache/
views/
template.php
index.php
index.php
de dosyalarımız;
<?php
require __DIR__ . '/template.php';
$template = new PrototurkTemplateEngine();
$template->view('index', [
'title' => 'Prototürk',
'name' => 'Tayfun Erbilen',
'todos' => [
'todo 1',
'todo 2',
'todo 3'
]
]);
views
altında index.ptemplate.php
adında bir dosyamız olacak ve içinde şunlar yazacak;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }}</title>
</head>
<body>
<h1>Hoşgeldin, {{ name }}</h1>
<ul>
@foreach(todos as todo)
<li>
{{ todo }}
</li>
@endforeach
</ul>
<ul>
@foreach(todos as key => todo)
<li>
{{ todo }}
</li>
@endforeach
</ul>
</body>
</html>
sonuç olarak cache/
klasöründe şöyle bir çıktı göreceksin;
// c9309029e1762f7da2afa048543c13b2.cache.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?=$title?></title>
</head>
<body>
<h1>Hoşgeldin, <?=$name?></h1>
<ul>
<?php foreach($todos as $todo): ?>
<li>
<?=$todo?>
</li>
<?php endforeach; ?>
</ul>
<ul>
<?php foreach($todos as $key => $todo): ?>
<li>
<?=$todo?>
</li>
<?php endforeach; ?>
</ul>
</body>
</html>
tabi temelde bu çok basit bir örneğiydi, blade engine'deki gibi extend
section
push
gibi direktiflerle çok daha kullanışlı hale getirilebilir.