function div($content) { return "<div>$content</div>"; }
function section($content) { return "<section>$content</section>"; }
function strong($content) { return "<strong>$content</strong>"; }
function span($content) { return "<span>$content</span>"; }
function i($content) { return "<i>$content</i>"; }
function ul($content) { return "<ul>$content</ul>"; }
function li($content) { return "<li>$content</li>"; }
$kelimeler = "";
$anlamlar = "";
$birlesikler = "";
foreach($h as $item) {
foreach($item["anlamlar"] as $anlam) {
$anlamlar .= li(i($anlam["ozellik"]).div($anlam["anlam"]));
};
foreach($item["birlesikler"] as $birlesik) {
$birlesikler .= li(span($birlesik));
};
$kelimeler .= div(
div(strong("Kelime: ").span($item["kelime"]))
.section(div(strong("Anlamlar")).ul($anlamlar))
.section(div(strong("Birleşikler")).ul($birlesikler))
);
};
echo $kelimeler;
Kodları test etme imkânım yok şu an. Varsayımsal olarak yazdım.
Hata veriyorsa sunucuda hata gösterimini açmalısınız yoksa hatayı göremeyiz.
Kodları if(count($h)) {...}
içine alabilirsiniz.
print_r($h);
komutunuzun çıktısı nedir?
Aşağıdaki örneklerden kendinize uygun olanı seçebilirsiniz.
En yakına yuvarla: round()
https://www.php.net/manual/en/function.round.php
round(3.4); // 3
round(3.5); // 4
round(3.6); // 4
round(3.6, 0); // 4
round(5.045, 2); // 5.05
round(5.055, 2); // 5.06
round(345, -2); // 300
round(345, -3); // 0
round(678, -2); // 700
round(678, -3); // 1000
round( 1.55, 1, PHP_ROUND_HALF_UP); // 1.6
round(-1.55, 1, PHP_ROUND_HALF_UP); // -1.6
round( 1.55, 1, PHP_ROUND_HALF_DOWN); // 1.5
round(-1.55, 1, PHP_ROUND_HALF_DOWN); // -1.5
round( 1.55, 1, PHP_ROUND_HALF_EVEN); // 1.6
round(-1.55, 1, PHP_ROUND_HALF_EVEN); // -1.6
round( 1.55, 1, PHP_ROUND_HALF_ODD); // 1.5
round(-1.55, 1, PHP_ROUND_HALF_ODD); // -1.5
round()
'un 3.parametresindeki sabitler:
PHP_ROUND_HALF_UP : Sayıyı 0'dan uzaklaştırarak yuvarlar.
PHP_ROUND_HALF_DOWN : Sayıyı 0'a yaklaştırarak yuvarlar.
PHP_ROUND_HALF_EVEN : Sayıyı en yakın çift sayıya yaklaştırarak yuvarlar.
PHP_ROUND_HALF_ODD : Sayıyı en yakın tek sayıya yaklaştırarak yuvarlar.
Yukarı yuvarla: ceil()
https://www.php.net/manual/en/function.ceil.php
ceil(4.3); // 5
ceil(9.999); // 10
ceil(-3.14); // -3
Aşağı yuvarla: floor()
https://www.php.net/manual/en/function.floor.php
floor(4.3); // 4
floor(9.999); // 9
floor(-3.14); // -4
Siz, sayının kendisinden büyük ilk tam veya buçuklu sayıya yuvarlanmasını istiyorsunuz.
Yani 1.2 ise, kendisinden büyük ilk tam veya buçuklu sayı olan 1.5'e yuvarlansın.
Yani 1.7 ise, kendisinden büyük ilk tam veya buçuklu sayı olan 2.0'a yuvarlansın.
Bunun için özel bir fonksiyon oluşturmanız gerekecek. Şöyle bir fonksiyon yazdım:
function roundUpHalfOrInt($num) {
if(!is_numeric($num)) throw new Exception('Parameter of roundUpHalfOrInt() is not numeric!');
$num = (float)$num;
$numStr = (string)$num;
$numArr = explode(".", $numStr);
if(count($numArr)<2) return (float)$num;
$numFloatSide = (int)((string)$numArr[1])[0];
if($numFloatSide===0) return (float)$num;
if($numFloatSide < 5) return (float)($numArr[0].".5");
return (float)($numArr[0]+1);
}
Bu fonksiyona sayısal değeri verirseniz bahsettiğiniz şekilde yukarı yuvarlama yapacaktır.
React Native öğrenirseniz Dart yerine Javascript kullanırsınız.
React Native'de fulltime veya freelance iş bulma olanağı daha fazladır.
React Native öğrenirken React da öğrenmiş olursunuz.
React Native'i seçmeniz sizin için daha iyi olur.
Ama ikisinde de birer todo uygulaması yapmanızı, böylece ikisinin de mantığını uygulayarak görmenizi tavsiye ederim.
Hangisini öğrenmenin daha kolay olduğu tartışılır ama öğrenme hızı açısından aralarında uçurum görmüyorum. React Native belki size daha zor veya daha kolay gelebilir. Ama hem iş imkânı açısından, hem de ekipçe çalışacak insan bulmanın daha kolay olacağını düşünerek size daha zor gelse bile React Native'i tercih etmenizi öneriyorum.
Kullanmadım ama zorlayan biri kodunuzu kırabilir gibi görünüyor.
Sonuçta bu kodun çalışması için gereken tüm bilgi yine aynı sayfada.
Ama şifreyi kırıp asıl kodunuza erişebilmek için zaman harcamak gerekir.
https://emn178.github.io/online-tools/base64_decode.html ve https://onlinephp.io/ sitelerini kullanarak şifreleri biraz inceledim.
Şifreli kodu açtığınızda karşınıza yine şifrelenmiş kod çıkıyor.
O kodu açtığınızda yine şifrelenmiş bir kod çıkıyor.
O kodu açtığınızda yine... Matruşka gibi.
Ama uğraşa uğraşa sonuca ulaşmak mümkün gibi geldi bana. Yine de sonuna kadar gitmediğim için bilemem tabi.
Ayrıca kodu bu şekliyle şifrelerseniz sayfanız şifre çözmekle de uğraşacağı biraz geç açılacaktır.
Advenced muhtemelen daha güvenlidir. Çünkü kodun hangi yöntemle çözüldüğü ve kodun anahtar bilgisi sayfanın içinde olmayacak.
Muhtemelen sizin ayrı bir kullanıcı adı şifre ile koruyacağınız bir dosyada tutulacak. Böylece sunucuya kuracağınız bu dosya kırılmadığı sürece kodunuzun nasıl çözüldüğü bilinemeyecek.
İki türlü de ben kullanmadığım için kesin konuşamıyorum...
$('[name="kullanici_adsoyad[]"]').attr('name', 'kullanici_adsoyad_yeni[]');
Örneğin WordPress, install.php gibi bir dosyaya sahiptir.
Bu dosya adım adım kurulum bilgilerini alır. Veritabanının sunucu adresi, kullanıcı adı, şifre verilerini alır.
Bu verileri aldıktan sonra PHP ile veritabanına bağlanır ve sitede lazım olan tabloları PHP (MySQL'e bağlanarak) oluşturur.
Ayrıca bu veritabanına bağlanma bilgilerini de bir dosyaya yazar. Site veritabanına bağlanmak için bu dosyayı include eder.
Hazır paket satıyor da olsanız, veritabanı kurulumunu siz yapacak da olsanız bu yöntem çok güzel, büyük hız kazandıracak bir yöntem.
Yani,
- MySQL önceden boş halde açılmış olmalı.
- install.php dosyası oluşturun. Kurulum yapmak için bu sayfayı açmalısınız.
- bu sayfa ilk adımda veritabanına bağlantı bilgilerini bir form yardımıyla alsın.
- aldığınız verilerle veritabanına bağlanıp bağlanamadığınızı kontrol edin.
- bağlanamadıysanız hata verin.
- bağlanabildiyseniz bu verileri connection.php adlı bir dosyaya yazdırın. (bu dosyaya sadece siteniz üzerinden erişilmesini sağlamak için güvenlik önlemleri almalısınız). Sonra da
CREATE TABLE
komutlarıyla sitenizde kullanacağınız tüm tabloları PHP ile oluşturun ve gerekiyorsa başlangıç verilerini de bu tablolaraINSERT
edin. - işlemler tamamlandıktan sonra ekrana "işlemler tamam. bu install.php dosyasını silin" diye mesaj verin.
Siteniz, veritabanına bağlantı verilerini almak için connection.php dosyasını include ediyor olmalı. Artık tablolarınız da kurulmuş halde. Böylece siteyi, MySQL'i hiç açmadan kurabilmiş oldunuz.
Bu konuyla ilgili dokümantasyon sayfası:
https://fullcalendar.io/docs/v3/lang
Siz dil dosyasını sayfanıza çağırmamış olabilirsiniz.
lang
Takvim için dil ve yerelleştirme seçeneklerini özelleştirin.
Bu ayarlar v3'te locale olarak yeniden adlandırıldı. Ayrıca, lang.js ve /lang/*.js dosyaları da benzer şekilde yeniden adlandırıldı.
String türünde dil kodu alır. Varsayılan: "en"
Diğer diller nasıl kullanılır?
Kullanmak için dilin JavaScript dosyasını yüklemeniz gerekecek.
Bu dosyalar, lang/ dizinindeki FullCalendar indirmesine dahil edilmiştir.
Ana FullCalendar kitaplığı yüklendikten sonra bir <script />
etiketi aracılığıyla yüklenmeleri gerekir.
<script src='fullcalendar/fullcalendar.js'></script>
<script src='fullcalendar/lang/es.js'></script>
<script>
$(function() {
$('#calendar').fullCalendar({
});
});
</script>
Yalnızca bir dil yüklüyorsanız, dil seçeneğini belirtmeniz gerekmez. FullCalendar, yüklenen en son dil dosyasına bakar ve onu kullanır.
Ancak, birden fazla dil dosyası yüklenmişse veya birleştirilmiş all.js dosyası yüklenmişse, lang seçeneği aracılığıyla hangi dili kullanacağınızı açıkça belirtmelisiniz:
<script src='fullcalendar/fullcalendar.js'></script>
<script src='fullcalendar/lang-all.js'></script>
<script>
$(function() {
$('#calendar').fullCalendar({
lang: 'es'
});
});
</script>
MomentJS ve jQuery UI Datepicker
Bir FullCalendar dil dosyası yüklediğinizde, MomentJS ve jQuery UI Datepicker (kütüphane zaten sayfadaysa) için çevirileri de yükler.
FullCalendar'ın dil dosyasını eklemeden önce Moment ve Datepicker için <script />
etiketlerini eklediğinizden emin olun:
<script src='lib/moment.js'></script>
<script src='lib/jquery-ui.custom-datepicker.js'></script>
<script src='fullcalendar/fullcalendar.js'></script>
<script src='fullcalendar/lang-all.js'></script>
Şöyle bir örnek hazırladım. İnceleyebilirsiniz:
https://codepen.io/ebykdrms/pen/jOxZbjb
JS kısmında en üstteki objede kaç kullanıcının kaç yıldız verdiğini belirleyebiliyorsunuz.
Önemli olan da js kısmı zaten. Yarın bi'gün codepen'den silinirse diye JS kodunun bir örneğini burada paylaşıyorum:
// Hangi yıldızdan kaç tane almış?
const starCounts = {
star1: 4, // 4 kişi 1 puan vermiş
star2: 0, // Kimse 2 puan vermemiş
star3: 3, // 3 kişi 3 puan vermiş
star4: 28, // 28 kişi 4 puan vermiş
star5: 16 // 16 kişi 5 puan vermiş
};
// Puanları bir dizi şeklinde alalım.
// [4, 0, 3, 28, 16]
const allScores = Object.values(starCounts);
// Toplamda kaç kişi puan vermiş?
// (4+0+3+28+16=51)
const totalSelectorCount = allScores.reduce((sum, num)=>sum+num, 0);
// Herkes 5 puan verseydi kaç puan olurdu?
// (51*5=255)
const maxScore = totalSelectorCount * 5;
// Peki şu an herkesin verdipi puana göre kaç puan olmuş?
// (4*1 + 0*2 + 3*3 + 28*4 + 16*5 = 205)
const currentScore = allScores.reduce((sum,num,index)=>sum+(num*(index+1)), 0);
// 255'te 205 ise 100'de kaçtır? Oran-orantı...
// 205/255 = x/100 -> x = 100 * 205 / 255 -> x = 80.39215... -> ~80
const rate = 100 * currentScore / maxScore;
// Hangi yüzdelik orana girdiğine göre kaç yıldızı aktif edeceğimizi bulalım.
// 100'de rate (80.392...) ise 5'te kaçtır? Oran-orantı... ~4
const activeStar = (5 * rate / 100).toFixed(0);
alert(`Yüzde ${rate.toFixed(2)} puan alarak 5 üzerinden ${activeStar} yıldız aldı`);
Sanırım şurada sizinle aynı soruyu sormuşlar.
https://stackoverflow.com/questions/36052604/how-to-let-react-router-respond-with-404-status-code
Doğru cevap olarak işaretlenmemiş ama şöyle bir çözüm önerilmiş:
<Route path="/" component={App}>
<IndexRoute component={Home} />
<Route path='post/' component={Post} />
{ /* Catch all route */ }
<Route path="*" component={NotFound} status={404} />
</Route>
Yani 404 sayfanız için status
parametresi gönderin diyor. Sonra da bir middleware yardımıyla status'u 404 olanları yakalamanızı öneriyor.
import { match } from 'react-router';
import getRoutes from './routes';
....
app.use((req, res) => {
match(
{ history, routes: getRoutes(), location: req.originalUrl },
(error, redirectLocation, renderProps) => {
if (redirectLocation) {
res.redirect(redirectLocation.pathname + redirectLocation.search);
}
else if (error) {
console.error('ROUTER ERROR:', error);
res.status(500);
}
else if (renderProps) {
const is404 = renderProps.routes.find(r => r.status === 404) !== undefined;
}
if (is404) {
res.status(404).send('Not found');
}
else {
// Go on and render the freaking component...
}
}
);
});
Eğer siteniz sadece React ise, yani sunucu taraflı bir kontrol edilmeksizin single page application olarak çalışıyorsa zaten 404 dönemez sanıyorum çünkü zaten aslında tüm site tek seferde yüklenmiş oluyor. Yeni yeni sayfalara yeni yeni istekler atılmıyor. Haliyle istek olmayınca yanıt da olmuyor.
Yukarıdaki örnek, react projenizin expressjs üzerinde çalıştığını varsayarak yazılmış.
Eğer siz next.js üzerinde çalışıyorsanız bulamadığı sayfaya zaten 404 dönüyordur diye tahmin ediyorum. (pek bilmem next.js)