@thenerepe teşekkürler. Yalnız !, *3 gibi tetikleyici kullanıldığında önizleme çalışmıyor.
C:\users\KullaniciAdi\Appdata\Roaming\Code\User\snippets\
konumunda html.json adlı json dosyası yoksa oluşturup aşağıdaki gibi örnekte olduğu gibi değerler girerseniz.
İhtiyacınız olduğunda prefix değerini yazarak tetikleyici kullanarak otomatik kod oluşturabilirsiniz.
"!jquery": {
"prefix": "!jquery-jsdelivr",
"body": [
"<script src=\"https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js\"></script>"
]
}
php için php.json
"php": {
"prefix": "php",
"body": [
"<?php",
"\t$1",
"?>"
],
"description": "php tag"
},
"!php-mysqli-connect": {
"prefix": "!mysqli-connect",
"body": [
"mysqli_connect(\"localhost\", \"user\",\"password\",\"dbName\")"
],
"description": "MySqli Connect Line"
},
"!php-mssql-connect": {
"prefix": "!mssql-connect",
"body": [
"sqlsrv_connect($$serverName, ['Database' => $$database, 'UID' => 'zirvenet', 'PWD' => 'zrvsql', 'CharacterSet' => 'UTF-8']);"
],
"description": "MsSqli Connect Line"
}
javascript için javascript.json
"arrowA": {
"prefix": "arrowA",
"body": [
"() => {",
"\t$1",
"}"
]
},
"ConsoleLog": {
"prefix": "csl",
"body": [
"console.log($1);",
]
}
"&fn=" + "istekadi" sana kalmış ek bilgi göndermek istersen diye ekledim. Zamanında bu konuda takılmıştım. Belki lazım olur eklemek istedim.
$.post("post.php", $("form").serialize() + "&fn=" + "istekadi", (response)=>{
console.log(res);
},"json") // "xml", "html", "text"
Sen sorgulama sonrası oluşan "tabloyu dışarı aktar > Csv for MS Excel" seçeneği ile mi alıyorsun?
Eğer böyle aktarıyorsan csv dosyasının içine değerler metin olarak "100.4" şeklinde yazılıyor. Metin olarak saklandığı için de metin olarak görünür.
Aslında sistemde verü türü sayı, ondalık olanları otomatik sayı olarak saklayıp indirmesi daha mantıklı olurdu.
Excel ile açtıktan sonra sayısal sütunları seç Ctrl+H ile noktaları virgüle çevir.
Aşağıdaki kodları bir php sayfasına yapıştır.
$xmlDom->loadXML(file_get_contents("xmlFile.xml")); Dosyayı sistemine kaydettirdiğin için
Xml dosyasının konumunu da atayabilir veya hazır xml dosyasının adını da yazıp deneyebilirsin...
Sonra kodları analiz edip gerisini kendin çözümlersin.
<table>
<thead>
<tr>
<th>
Miktar
</th>
<th>
Mal Hizmet Adı
</th>
<th>
Tutar
</th>
</tr>
</thead>
<tbody>
<?php
// XmlGird kullandığında bir değere Show Xpath ile konumunu aldığında '/Invoice/cac:InvoiceLine[1]/cac:Item/cbc:Name'
// ('//cac:InvoiceLine/cac:Item/cbc:Name')->item($key) yapmalısın aksi durumda değere ulaşamıyorsun.
$xmlDom = new DOMDocument();
$xmlDom->preserveWhiteSpace = false;
$xmlDom->loadXML(file_get_contents("xmlFile.xml"));
$xpath = new DOMXPath($xmlDom);
$invoiceLine = @$xpath->query('//cac:InvoiceLine');
foreach ($invoiceLine as $key => $val) {
$invoiceLine = [
"ID" => @$xpath->query("//cac:InvoiceLine/cbc:ID")->item($key)->nodeValue,
"InvoicedQuantity" => @$xpath->query("//cac:InvoiceLine/cbc:InvoicedQuantity")->item($key)->nodeValue,
"LineExtensionAmount" => @$xpath->query("//cac:InvoiceLine/cbc:LineExtensionAmount")->item($key)->nodeValue,
"ItemName" => @$xpath->query("//cac:InvoiceLine/cac:Item/cbc:Name")->item($key)->nodeValue,
"ItemID" => @$xpath->query("//cac:InvoiceLine/cac:Item/cac:SellersItemIdentification/cbc:ID")->item($key)->nodeValue,
"Price" => @$xpath->query("//cac:InvoiceLine/cac:Price/cbc:PriceAmount")->item($key)->nodeValue,
];
$tr = "<tr><td>$invoiceLine[LineExtensionAmount]</td><td>$invoiceLine[ItemName]</td><td>$invoiceLine[Price]</td></tr>"
?>
<?= $tr ?>
<?php
}
?>
</tbody>
</table>
Arkadaşım anladığım kadarı ile faturanın xml dosyasını post ediyorsun ve php tarafına yorumlatıyorsun.
Eğer veritabanına kaydetmen ve sunucu tarafında kullanman gerekmiyorsa php kullanmana gerek yok.
Jquery kütüphanesini kullanarak Javascript ile çözebilirsin çünkü ben yapmıştım.
https://tr-sherlock.com/earsivxml adresinden xml dosyalarını tablo haline getirtiyorum. JS Kodlarını inceleyebilirsin.
Sitemdeki uzun zaman önceydi ama aydınlatıcı olur. Yerelde kullandığım Js kullandıkça biraz daha gelişti diyebilirim :)
İlle de php ile yapacağım dersen ben 5000/30000 bin portalından fatura sorgulama ve gelen arşiv dosyasının içindeki xml dosyasının adını değiştirerek indirmek istiyordum.
İki hafta önce araştırmalarım sonucu çözdüm. @munzevi arkadaşımızın dediği gibi new DOMDocument() ve ek olarak new DOMXPath($xmlDom) sınıflarını kullanabilirsin.
DOMXPath ise javascript xpath = div > input gibi kullanmanı sağlar. DOMXPath kullanımı ise div/input
//cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="VKN"] bir de bunu yazmakla uğraşmaman için
xmlgird.net adresinden Open File kullanarak xml dosyasındaki bilgilere ulaşabilirsin.
$uniqeZip = uniqid() . ".zip"; // Geçici dosya adı oluşturur.
$zipResource = fopen($uniqeZip, "w"); // Dizine geçici dosya oluşturur.
$zip_curl = curl_init($_POST["downUrl"]); // 5000/30000 portalındaki faturaya ait bağlantı alınır.
curl_setopt($zip_curl, CURLOPT_FILE, $zipResource); // Curl calıştırıldığında geçici dosyaya yazılır.
$page = curl_exec($zip_curl);
if (!$page) {
echo "Error :- " . curl_error($ch);
}
curl_close($zip_curl);
$zip = new ZipArchive;
if ($zip->open($uniqeZip) === TRUE) {
$xmlFile = $zip->getFromIndex(1)); // Arşiv dosyasında indexine göre 0.html 1.xml
$fatura = [];
$xmlDom = new DOMDocument();
$xmlDom->preserveWhiteSpace = false;
$xmlDom->loadXML($xmlFile);
$xpath = new DOMXPath($xmlDom);
$fatura["ID"] = $xpath->query('//cbc:ID')->item(0)->nodeValue;
$fatura["saticiVKN"] = @$xpath->query('//cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="VKN"]')->item(0)->nodeValue;
$fatura["saticiTCKN"] = @$xpath->query('//cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="TCKN"]')->item(0)->nodeValue;
$fatura["aliciVKN"] = @$xpath->query('//cac:AccountingCustomerParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="VKN"]')->item(0)->nodeValue;
$fatura["aliciTCKN"] = @$xpath->query('//cac:AccountingCustomerParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID="TCKN"]')->item(0)->nodeValue;
$aliciVKN = $fatura["aliciVKN"] == null ? $fatura["aliciTCKN"] : $fatura["aliciVKN"];
$saticiVKN = $fatura["saticiVKN"] == null ? $fatura["saticiTCKN"] : $fatura["saticiVKN"];
// echo json_encode([
// "xmlName" => "@$saticiVKN@$fatura[ID]@$aliciVKN.xml",
// "xmlString" => $xmlFile
// ]);
$zip->close();
} else {
echo 'failed';
}
unlink($uniqeZip);
#YUKARIDAKİ KODLAR LAZIM OLURSA KULLANIRSI
// XmlGird kullandığında bir değere Show Xpath ile konumunu aldığında '/Invoice/cac:InvoiceLine[1]/cac:Item/cbc:Name'
// ('//cac:InvoiceLine/cac:Item/cbc:Name')->item($key) yapmalısın aksi durumda değere ulaşamıyorsun.
$invoiceLine = @$xpath->query('//cac:InvoiceLine');
forEach($invoiceLine as $key=>$val) {
print_r([
"ID"=> @$xpath->query("//cac:InvoiceLine/cbc:ID")->item($key)->nodeValue,
"InvoicedQuantity"=> @$xpath->query("//cac:InvoiceLine/cbc:InvoicedQuantity")->item($key)->nodeValue,
"LineExtensionAmount"=> @$xpath->query("//cac:InvoiceLine/cbc:LineExtensionAmount")->item($key)->nodeValue,
"ItemName" => @$xpath->query("//cac:InvoiceLine/cac:Item/cbc:Name")->item($key)->nodeValue,
"ItemID" => @$xpath->query("//cac:InvoiceLine/cac:Item/cac:SellersItemIdentification/cbc:ID")->item($key)->nodeValue,
]);
}
@recepkaramanli61
Öncelikle ilginiz için teşekkür ederim. Şu anda dediğiniz gibi kullanıyorum.
Böyle cevap bulmanız biraz zor. Sistem bağlanamıyorsa bir sebebi vardır ve hata mesajı vermiştir. Onu da paylaşmanızda yarar var.
Türkçe karakter sorunu gidermek için aşağıdaki eski kodun yerine yeni kodu kullanın.
Eski Kod: return a > b ? direction : -1 * direction;
Yeni Kod: return direction ? a.localeCompare(b): -1 * direction;
Sonunda aradığımı buldum Codepen'de paylaşılmış isterseniz inceleyebilirsiniz
JavaScript Multi-Sort Array of Objects
Sen selectbox yerine arama yapılabilen selectbox istiyorsun anladığım kadarı ile.
Bunun için https://select2.org/selections kullanabilirsin.
Ben de kişisel searchbox yapmaya çalışıyordum.
Tayfun kardeşim sağ olsun html-css kısmını onun videosundan bakarak yaptım.
İşlerim nedeni ile yarım bırakmıştım. Renkleri falan değişmesi gerekebilir.
En azından işlevsel olarak fena değil. Aranabilir bulunan değerler arasında hareket edilebilir ve enter ile de seçilen değer kullanılabilir.
Kontrollerimi yaparken farkettim click eventi eklememişim.