lostyazilim
tr.link

Sıralamayı bir türlü beceremiyorum.

8 Mesajlar 797 Okunma
lstbozum
tr.link

muratbenek muratbenek WM Aracı Kullanıcı
  • Üyelik 22.11.2018
  • Yaş/Cinsiyet 34 / E
  • Meslek IT
  • Konum İstanbul Anadolu
  • Ad Soyad M** B**
  • Mesajlar 6
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)
Arkadaşlar Selamlar.

Öncelikle belirteyim, konu açmadan önce bu konuyla alakalı detaylı incelemelerde bulundum daha önce verilmiş cevapları denedim ama sonuca ulaşamadım.

Sizlere resimleri ile anlatmaya çalışacağım.

Şöyle bir kodum var;


// add action to check for table item
add_action('gdlr_print_item_selector', 'gdlr_league_table', 10, 2);
function gdlr_league_table($type, $settings = array()){
if($type == 'gol-krali'){
gdlr_print_league($settings);
}
}
//table item
function gdlr_print_league($settings){
// query league table
$args['post_type'] = 'player';
$args['posts_per_page'] = (empty($settings['num-fetch']))? '5': $settings['num-fetch'];
$query = new WP_Query( $args );
// getting table array
while($query->have_posts()){ $query->the_post();
$player_val = gdlr_lms_decode_preventslashes(get_post_meta(get_the_ID(), 'gdlr-soccer-player-settings', true));
$assists = empty($player_val)? array(): json_decode($player_val, true);
$table[get_the_title()]['p'] = ($assists);
}
echo '
';
if(empty($settings['style']) || $settings['style'] == 'full'){
gdlr_print_league_table($table);
}
echo '
';
}
// table
function gdlr_print_league_table($player){
echo '';
?>





$count = 1;
foreach($player as $player_name => $score ){

?>





$count++;
}
echo '
Asist
';
}



Bu kod normalde başka bir amaca hizmet ediyordu fakat ben biraz değişiklikler yaptım. Amacım şu;

resim linki; https://ibb.co/LQkqQQ2

Database tarafında resimde göreceğiniz gibi veriler tutuluyor. Beni bu verilerden "assists:" kısmı ilgilendiriyor.

Assist verilerini şu tabloya çekebildim.

Resim linki ; https://ibb.co/5GV5s5v

Ama şuan sıralamayı oluşturulma tarihine göre yapıyor fakat benim istediğim asist sayılarını büyükten küçüğe sıralayabilmek.

Yardımlarınızı bekliyorum, teşekkürler.
 

 

wmaraci
reklam

enerjiveguc enerjiveguc Wordpress Destek Kullanıcı
  • Üyelik 28.05.2018
  • Yaş/Cinsiyet 52 / E
  • Meslek Street Engineer
  • Konum İstanbul Anadolu
  • Ad Soyad B** A**
  • Mesajlar 5151
  • Beğeniler 2185 / 2187
  • Ticaret 0, (%0)
muratbenek
pek bilgim yok ama aklıma geleni söylemek istedim belki yardımcı olur. Altta Kırmızı işaretli kodlarda "pos" yerine "p" olması "date" komutunu çağırıyor olabilir mi ?

// table
function gdlr_print_league_table($player){
echo '';
?>





$count = 1;
foreach($player as $player_name => $score ){

?>





$count++;
}
echo '
Asist
';
}
 

 

muratbenek muratbenek WM Aracı Kullanıcı
  • Üyelik 22.11.2018
  • Yaş/Cinsiyet 34 / E
  • Meslek IT
  • Konum İstanbul Anadolu
  • Ad Soyad M** B**
  • Mesajlar 6
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)
enerjiveguc

Daha önce bu kod golleri çağırıyordu ve büyükten küçüğe sıralı bir vaziyette.

Fakat goller database tarafında iki türlü kayıt ediliyor.

Birinci yapı şu; https://ibb.co/LQkqQQ2

Ama tabloya çağırmak için meta_key kullanılan başka bir kayıt daha oluşturuluyor. https://ibb.co/cXCyg1L

Meta_key olduğu için şu şekilde sıralamayı yapıyordum;


$args = array('post_type' => 'player', 'suppress_filters' => false);
$args['posts_per_page'] = (empty($settings['num-fetch']))? '5': $settings['num-fetch'];
$args['meta_key'] = 'gdlr-soccer-player-goals';
$args['orderby'] = 'meta_value_num';
$args['order'] = 'desc';
if( !empty($settings['category']) ){
$args['tax_query'] = array(
array('terms'=>explode(',', $settings['category']), 'taxonomy'=>'player_category', 'field'=>'slug')
);
}


Meta_key olmayınca asistlerde sıralamayı tarihe göre yapıyor.
 

 

27207 27207 WM Aracı Anonim Üyelik
  • Üyelik 02.01.2014
  • Yaş/Cinsiyet - /
  • Meslek
  • Konum
  • Ad Soyad ** **
  • Mesajlar 1852
  • Beğeniler 346 / 707
  • Ticaret 5, (%100)
Resimler açılmadı. Meta field verilerini JSON yapısında veritabanında tutuyorsun anladığım kadarıyla. Ama senin işteki problem büyük ihtimalle veri yapısından kaynaklanıyor. JSON verilerin yapısını var_dump() ile öğren. Wordpress Query yaparken meta değerlerini meta_value_num ile sıralamak istiyorsan değerlerin string olması lazım.
Senin sorgu kodu şöyle bir şeye benzemeli:


// add action to check for table item
add_action('gdlr_print_item_selector', 'gdlr_league_table', 10, 2);
function gdlr_league_table($type, $settings = array()){
if($type == 'gol-krali'){
gdlr_print_league($settings);
}
}
//table item

$player_val = gdlr_lms_decode_preventslashes(get_post_meta(get_the_ID(), 'gdlr-soccer-player-settings', true));
$assists = empty($player_val)? array(): json_decode($player_val, true);
$assits2 = (string)$assists;

function gdlr_print_league($settings){
// query league table
$args['post_type'] = 'player';
$args['posts_per_page'] = (empty($settings['num-fetch']))? '5': $settings['num-fetch'];
$args['orderby'] = $assists2;
$query = new WP_Query( $args );
// getting table array
while($query->have_posts()){ $query->the_post();
$player_val = gdlr_lms_decode_preventslashes(get_post_meta(get_the_ID(), 'gdlr-soccer-player-settings', true));
$assists = empty($player_val)? array(): json_decode($player_val, true);
$table[get_the_title()]['p'] = ($assists);
}
echo '
';
if(empty($settings['style']) || $settings['style'] == 'full'){
gdlr_print_league_table($table);
}
echo '
';
}
// table
function gdlr_print_league_table($player){
echo '';
?>





$count = 1;
foreach($player as $player_name => $score ){

?>





$count++;
}
echo '
Asist
';
}
 

 

wmaraci
wmaraci

muratbenek muratbenek WM Aracı Kullanıcı
  • Üyelik 22.11.2018
  • Yaş/Cinsiyet 34 / E
  • Meslek IT
  • Konum İstanbul Anadolu
  • Ad Soyad M** B**
  • Mesajlar 6
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)
PHPacemisi

Yine aynı hocam değişiklik olmadı, benim kafa da durdu artık ilerisi yok :(
Varmı başka bir fikrin bu konuda?
 

 

27207 27207 WM Aracı Anonim Üyelik
  • Üyelik 02.01.2014
  • Yaş/Cinsiyet - /
  • Meslek
  • Konum
  • Ad Soyad ** **
  • Mesajlar 1852
  • Beğeniler 346 / 707
  • Ticaret 5, (%100)
Yazdığım kod örnekti. Nasıl bir değişiklik yaptın ?
 

 

muratbenek muratbenek WM Aracı Kullanıcı
  • Üyelik 22.11.2018
  • Yaş/Cinsiyet 34 / E
  • Meslek IT
  • Konum İstanbul Anadolu
  • Ad Soyad M** B**
  • Mesajlar 6
  • Beğeniler 0 / 0
  • Ticaret 0, (%0)
PHPacemisi

Bu işin uzmanı değilim zaten fakat assist2 değişkenine string fonksiyonunu tanımladığınızı kavrayabildim.

Bir de olay bu kod üzerinde dönüyor gibime geliyor sanki siz ne dersiniz?

$player_val = gdlr_lms_decode_preventslashes(get_post_meta(get_t he_ID(), 'gdlr-soccer-player-settings', true));

Birde şunu anlamaya çalışıyorum decode etmeden, tabloya çağırdığımız sayıları sıralamamız mümkün değil mi?
 

 

27207 27207 WM Aracı Anonim Üyelik
  • Üyelik 02.01.2014
  • Yaş/Cinsiyet - /
  • Meslek
  • Konum
  • Ad Soyad ** **
  • Mesajlar 1852
  • Beğeniler 346 / 707
  • Ticaret 5, (%100)
Şimbi bu Good LMS eklentisinden devşirilmiş galiba. get_post_meta(get_t he_ID(), 'gdlr-soccer-player-settings', true bu gdlr-soccer-player-settings meta etiketine sahip içeriği çağırıyor. Veritabanına JSON ile kaydedilenler ise havuz gibi kaydedilir. Herşey bir sütunda karışık depolanır. Sen onu içinden çekersin. İlk önce JSON içeriği decode edilmeli.

Mesela şöyle bir json dizisi var:
$ligpuani = '{"fener":20,"galatasaray":82,"besiktas":455}';
Bunu decode etmesi böyle:
$sonuc = json_decode($ligpuani);
echo $sonuc->{'besiktas'}; dedinmi 455 yazdırır. Çağırılması böyle. Birde bunun hata çıktısını gösteren fonksiyon var json_error_xxx diye tam hatırlayamadım. Çekilen stringin var olup olmadığını da oradan kontrol ettirebiliyorsun.

JSONu decode edip doğru şeyi çektirdiysen sıralaması 'orderby' => 'meta_value_num'; ile yapılıyor. Ama sonuç sayısal değer döndürmesi lazım. İlk önce sen $player_val değişkenini bir okut. var_dump ile kontrol et. Array dönüyorsa JSON'dan doğru içerik çekilmiyordur. Net sayısal değer döndürmesi lazım. Bunlar hiç karışık değil ama ben anlatınca karışık oluyor.

https://core.trac.wordpress.org/browser/tags/5.0/src/wp-includes/compat.php#L298
Sen buraya da bak. JSON hata çıktısını gösteren fonksyonun da örneği var:
$last_error_code = json_last_error(); diye başlayan 378. satır.
 

 

Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al