News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

2.0 RC3 Özel Profil alanına girilen değerlerini farklı bir sayfada yazdırma??

Started by serhatyilmaz, November 19, 2010, 09:30:34 AM

Previous topic - Next topic

serhatyilmaz

Merhaba.
Örneğin ben sitemde adınız diye özel bir profil alanı açtım. Bunları farklı bir sayfada liste halinde nasıl yazabilirim? yani tüm üyelerin adınız alanına girdiği değerleri bir sayfada listeletecek. bilgilerin dbde hangi alanda tutulduğunuda bulamadım yardım ederseniz sevinirim.

grafitus

Veriler smf_themes tablosunda, variable sütunun özel profil alanınıza verdiğiniz adla, karşısındaki value sütunununa kaydediliyor.

Yağız...

<?php
   
require_once('SSI.php');
   
$request $smcFunc['db_query']('''SELECT col_name, field_name, bbc, enclose FROM {db_prefix}custom_fields', array() );
   
$custom_fields = array();
   while (
$row $smcFunc['db_fetch_assoc']($request))
   {
      
$custom_fields[] = array(
         
'colname' => $row['col_name'],
         
'title' => $row['field_name'],
         
'bbc' => $row['bbc'],
         
'enclose' => $row['enclose'],
      );
   }
   foreach (
$custom_fields as $cf)
   {
      
$value $options[$cf['colname']];
      if (
$cf['bbc'])
         
$value parse_bbc($value);

      if (!empty(
$cf['enclose']))
         
$value strtr($cf['enclose'], array(
            
'{SCRIPTURL}' => $scripturl,
            
'{IMAGES_URL}' => $settings['images_url'],
            
'{DEFAULT_IMAGES_URL}' => $settings['default_images_url'],
            
'{INPUT}' => $value,
         ));

      
$memberContext[$user_info['id']]['cfs'][] = array(
         
'title' => $cf['title'],
         
'colname' => $cf['colname'],
         
'value' => $value,
      );
   }
   
$custom_fields $memberContext[$user_info['id']]['cfs'];
   foreach (
$custom_fields as $field)
      echo 
$field['title'] . ': ' $field['value'] . '<br />';
?>

Bunu deneyebilirsiniz.

grafitus

Yağız şu haliyle sadece çevrimiçi üyenin özel profil alanlardaki değerlerini verir. Arkadaş tüm üyelerinkini istemiş. :)

Yağız...

Çevrimiçiyle ne alakası var?

Düzenleme: çevrimiçi değil de görüntüleyen üye olmasın o?


Bunu deneyin:
<?php
require_once(
'SSI.php');
$request $smcFunc['db_query']('''SELECT id_member, value FROM {db_prefix}themes WHERE variable = {string:col_name}', array( 'col_name' => 'cust_test') );
$members = array();
while ($row $smcFunc['db_fetch_assoc']($request))
{
loadMemberData($row['id_member'], false'minimal');
loadMemberContext($row['id_member']);
$user $memberContext[$row['id_member']];

$members[] = array(
'link' => $user['link'],
'isim' => $row['value'],
);
}

echo '
<table width="100%">
<tr>
<td>Üye</td>
<td>İsim</td>
</tr>'
;
foreach ($members as $member)
{
echo '
<tr>
<td>'
$member['link'], '</td>
<td>'
$member['isim'], '</td>
</tr>'
;
}
echo '
</table>'
;
?>

cust_test yazan yeri kendi alan isminizle değiştirin. Mesela Adınız ise cust_ad olarak değiştirin (ilk özel karaktere kadar, küçük harflerde olacak)

serhatyilmaz

bilgiler için teşekkür ettim fakat şöyle bir hata veriyor sayfanın başında

sayfa burada: http://www.nfstr.com/nfs/nfsw.php

sayfa siyah olduğundan yazılar görünmüyor fakat üst kısmı fareyle seçerseniz görürsünüz.


Notice: Undefined index: minWordLen in /home/nfstrcom/public_html/nfs/Sources/Load.php(2350) : eval()'d code on line 164

Notice: Undefined index: minChar in /home/nfstrcom/public_html/nfs/Sources/Load.php(2350) : eval()'d code on line 165

Notice: Undefined index: minWordLen in /home/nfstrcom/public_html/nfs/Sources/Load.php(2350) : eval()'d code on line 918

Notice: Undefined index: minChar in /home/nfstrcom/public_html/nfs/Sources/Load.php(2350) : eval()'d code on line 919

Yağız...


serhatyilmaz

hocam zaten mod türkçe yani Modifications.turkish-utf8.php de onun bilgileri yazıyor:

//Minimun Characters or Words Mod
$txt['minWordLen'] = 'İleti başına minimum kelime';
$txt['minwords_mod'] = 'kelime';
$txt['minChar'] = 'İleti başına minimum karakter';
$txt['minchars_mod'] = 'karakter';
$txt['minmod_zero'] = '0 Devre dışı bırakır.';
$txt['minAdminLen'] = 'Minimum karakter ve kelime denetimini yöneticiler için devre dışı bırak';
$txt['minCountQuote'] = '[QUOTE] BBCode arasındakileri de say';
$txt['error_minWordLen'] = 'Mesaj gönderirken mesajınız, en az ' . $modSettings['minWordLen'] . ' kelimeden oluşmalıdır..';
$txt['error_minChar'] = 'Mesaj gönderirken mesajınız, en az ' . $modSettings['minChar'] . ' karakterden oluşmalıdır..';


ayrıca dil ingilizce olsa bile bu hata çıkıyor:


Notice: Undefined index: minWordLen in /home/nfstrcom/public_html/nfs/Sources/Load.php(2350) : eval()'d code on line 927

Notice: Undefined index: minChar in /home/nfstrcom/public_html/nfs/Sources/Load.php(2350) : eval()'d code on line 928


serhatyilmaz

neyse çözüldü olarak işaretleyelim ben yanıtımı aldım haftaya forumu temizleyip rc4e upgrade edeceğim ve yapacaklarımı temiz bir sistem üzerinde deneyeceğim. yardımlarınız için teşekkürler.

serhatyilmaz

sayın yöneticiler. üst msjda yazdığım gibi temiz forum kurdum sorunsuz çalışıyor fakat sayfa çok uzayacak. acaba bunları nasıl bölebilirim? (Sayfa [1][2][3] gibi)

grafitus

Yağız'ın verdiği kodu şöyle değiştirin (Kodda fazla değişiklik yaptıysanız yedek alın. Denemedim bunu):
<?php
require_once(
'SSI.php');

$this_file 'BU DOSYANIN ADI';
$col_name 'ÖZEL ALANINIZ';

$request $smcFunc['db_query']('''
SELECT COUNT(*)
FROM {db_prefix}themes
WHERE variable = {string:col_name}'
,
array(
'col_name' => $col_name
)
);
list($total) = $smcFunc['db_fetch_row']($request);
$smcFunc['db_free_result']($request);

if (substr($this_file, -44) != '.php')
$this_file $this_file '.php';

$page_index constructPageIndex($boardurl $this_file$_REQUEST['start'], $total40);
$start $_REQUEST['start'];

$request $smcFunc['db_query']('''
SELECT id_member, value
FROM {db_prefix}themes
WHERE variable = {string:col_name}
LIMIT {int:start}, {int:limit}'
,
array(
'col_name' => $col_name,
'start' => $start,
'limit' => 40,
)
);
$members = array();
while ($row $smcFunc['db_fetch_assoc']($request))
{
loadMemberData($row['id_member'], false'minimal');
loadMemberContext($row['id_member']);
$user $memberContext[$row['id_member']];

$members[] = array(
'link' => $user['link'],
'isim' => $row['value'],
);
}
$smcFunc['db_free_result']($request);

echo '
<table width="100%">
<tr>
<td>Üye</td>
<td>İsim</td>
</tr>'
;
foreach ($members as $member)
{
echo '
<tr>
<td>'
$member['link'], '</td>
<td>'
$member['isim'], '</td>
</tr>'
;
}
echo '
<tr>
<td colspan="2">'
$page_index'</td>
<tr>
</table>'
;
?>

$this_file,   $col_name değişkenlerini düzenlemeyi unutmayın.

serhatyilmaz

bu sayfalara böldü galiba ama linkler şu şekilde çıktı ve 2. sayfaya tıklayınca 404 verdi

http://www.nfstr.com/nfsnfsw.php;start=40

bende düzeltmek için şu kodu editledim araya / koydum

  $page_index = constructPageIndex($boardurl .'/'.$this_file, $_REQUEST['start'], $total, 40);

bu sefer linki düzeldi ama yine 404 :)

serhatyilmaz

tamam o sorunuda çözdüm ama sadece boşluk ve -,+ gibi bazı karakterlerden oluşan kayıtların gözükmemesini istiyorum. bunuda yaptım ama onları kaldırdığı zaman bir sayfada 40 yerine 20 civarı kayıt gösteriyor. bunları özel alana göre değilde nicke göre bölemezmiyiz?

Yağız...

<?php
require_once(
'SSI.php');

$col_name 'testfi';
$limit 10;

$request2 $smcFunc['db_query']('''
SELECT COUNT(id_member)
FROM {db_prefix}themes
WHERE variable = {string:col_name}'
,
array(
'col_name' => 'cust_' $col_name,
)
);
list ($count) = $smcFunc['db_fetch_row']($request2);
$smcFunc['db_free_result']($request2);
   
   
$page_index constructPageIndex('http://localhost/20rc4/mami/asd.php?start=%1$d'$_REQUEST['start'], $count$limittrue);
   
$request $smcFunc['db_query']('''
SELECT id_member, value
FROM {db_prefix}themes
WHERE variable = {string:col_name}
LIMIT {int:start}, {int:limit}'
,
array(
'col_name' => 'cust_' $col_name,
'start' => $_REQUEST['start'],
'limit' => 10,
)
);
$members = array();
while ($row $smcFunc['db_fetch_assoc']($request))
{
loadMemberData($row['id_member'], false'minimal');
loadMemberContext($row['id_member']);
$user $memberContext[$row['id_member']];

$from = array('+''-'',');
$to = array();
$row['value'] = str_replace($from$to$row['value']);

$members[] = array(
'link' => $user['link'],
'isim' => $row['value'],
);
}
$smcFunc['db_free_result']($request);

echo '
<div class="righttext">'
$page_index'</div>';

echo '
<table width="100%">
<tr class="titlebg">
<td>Üye</td>
<td>İsim</td>
</tr>'
;
foreach ($members as $member)
{
echo '
<tr>
<td class="windowbg">'
$member['link'], '</td>
<td class="windowbg2">'
$member['isim'], '</td>
</tr>'
;
}
echo '
</table>'
;

echo '
<div class="righttext">'
$page_index'</div>';

?>

4, 5, ve 38. satırdaki değerleri değiştirin.

serhatyilmaz

Quote from: Yağız... on December 01, 2010, 02:30:52 AM
4, 5, ve 38. satırdaki değerleri değiştirin.
teşekkür ederim bunu denedim gayet güzel çekti fakat benim derdim şu;

biliyorsunuzdur bir profil alanı eklediğimde(textbox) üye profiline en ufak bir düzenleme yapsa ve oraya ellemese bile dbye boşluk olarak kaydediyor bunu. benim derdim bu boşluk olanların listede gözükmemesi. umarım anlatabilmişimdir.

ayrıca buraya;
$from = array('+', '-', ',');

bunu eklediğimde

,' '

boşluk olanlarıda iptal etmiyor.

grafitus

Sanırım şu işinizi görecektir:
<?php
require_once(
'SSI.php');

$col_name 'testfi';
$limit 10;

$request2 $smcFunc['db_query']('''
SELECT COUNT(id_member)
FROM {db_prefix}themes
WHERE variable = {string:col_name}'
,
array(
'col_name' => 'cust_' $col_name,
)
);
list ($count) = $smcFunc['db_fetch_row']($request2);
$smcFunc['db_free_result']($request2);
   
   
$page_index constructPageIndex('http://localhost/20rc4/mami/asd.php?start=%1$d'$_REQUEST['start'], $count$limittrue);
   
$request $smcFunc['db_query']('''
SELECT id_member, value
FROM {db_prefix}themes
WHERE variable = {string:col_name}
LIMIT {int:start}, {int:limit}'
,
array(
'col_name' => 'cust_' $col_name,
'start' => $_REQUEST['start'],
'limit' => 10,
)
);
$members = array();
while ($row $smcFunc['db_fetch_assoc']($request))
{
if (empty($row['value']))
continue;

loadMemberData($row['id_member'], false'minimal');
loadMemberContext($row['id_member']);
$user $memberContext[$row['id_member']];

$from = array('+''-'',');
$to = array();
$row['value'] = str_replace($from$to$row['value']);

$members[] = array(
'link' => $user['link'],
'isim' => $row['value'],
);
}
$smcFunc['db_free_result']($request);

echo '
<div class="righttext">'
$page_index'</div>';

echo '
<table width="100%">
<tr class="titlebg">
<td>Üye</td>
<td>İsim</td>
</tr>'
;
foreach ($members as $member)
{
echo '
<tr>
<td class="windowbg">'
$member['link'], '</td>
<td class="windowbg2">'
$member['isim'], '</td>
</tr>'
;
}
echo '
</table>'
;

echo '
<div class="righttext">'
$page_index'</div>';

?>

-Yine :)- 4, 5, ve 38. satırdaki değerleri değiştirin.

serhatyilmaz

grafitus hocam dediğini yaptım güzelde oldu. peki ya bunları alfabetik sıraya göre sıralatabilirmiyiz ve son soru olarak bu kodların işlemci kullanımı açısından sunucuma zararı olurmu?

http://www.nfstr.com/nfs/index.php?action=page;id=31

Yağız...

<?php
   
require_once('SSI.php');
   
   
$col_name 'testfi';
   
$limit 10;
   
   
$request2 $smcFunc['db_query']('''
      SELECT COUNT(id_member)
      FROM {db_prefix}themes
      WHERE variable = {string:col_name}'
,
      array(
         
'col_name' => 'cust_' $col_name,
      )
   );
   list (
$count) = $smcFunc['db_fetch_row']($request2);
   
$smcFunc['db_free_result']($request2);
   
      
$page_index constructPageIndex('http://localhost/20rc4/mami/asd.php?start=%1$d'$_REQUEST['start'], $count$limittrue);
   
   
$request $smcFunc['db_query']('''
      SELECT id_member, value
      FROM {db_prefix}themes
      WHERE variable = {string:col_name}
  ORDER BY value
      LIMIT {int:start}, {int:limit}'
,
      array(
         
'col_name' => 'cust_' $col_name,
         
'start' => $_REQUEST['start'],
         
'limit' => 10,
      )
   );
   
$members = array();
   while (
$row $smcFunc['db_fetch_assoc']($request))
   {
      if (empty(
$row['value']))
         continue;
      
      
loadMemberData($row['id_member'], false'minimal');
      
loadMemberContext($row['id_member']);
      
$user $memberContext[$row['id_member']];

      
$from = array('+''-'',');
      
$to = array();
      
$row['value'] = str_replace($from$to$row['value']);

      
$members[] = array(
         
'link' => $user['link'],
         
'isim' => $row['value'],
      );
   }
   
$smcFunc['db_free_result']($request);
   
   echo 
'
   <div class="righttext">'
$page_index'</div>';
   
   echo 
'
   <table width="100%">
      <tr class="titlebg">
         <td>Üye</td>
         <td>İsim</td>
      </tr>'
;
   foreach (
$members as $member)
   {
      echo 
'
      <tr>
         <td class="windowbg">'
$member['link'], '</td>
         <td class="windowbg2">'
$member['isim'], '</td>
      </tr>'
;
   }
   echo 
'
   </table>'
;

   echo 
'
   <div class="righttext">'
$page_index'</div>';
   
?>


Sunucuyu kasacağını hiç sanmıyorum :)

serhatyilmaz

Quote from: Yağız... on December 02, 2010, 06:42:46 AM
Sunucuyu kasacağını hiç sanmıyorum :)
eyvallah hocam inşallah sayfaların bölünmesinde sorun olmaz çünkü boşluk olanlar görünmeyecek onlar yüzünden bazı sayfalarda 8 bazılarındaysa 5 vs. rastgele kayıt görünüyordu.



edit: boş olanları çekiyordu yine bu yüzden bir sayfada 12(benim verdiğim değer) yerine daha az kayıt gösteriyordu. bende böyle yaparak çözdüm inş. çözmüşümdür :D


      $request2 = $smcFunc['db_query']('', '
      SELECT COUNT(id_member)
      FROM {db_prefix}themes
      WHERE variable = {string:col_name} and value != ""',



      $request = $smcFunc['db_query']('', '
      SELECT id_member,
      FROM {db_prefix}themes
      WHERE variable = {string:col_name} and value != ""
      ORDER BY value ASC
      LIMIT {int:start}, {int:limit}',

grafitus

Quote from: serhatyilmaz on December 02, 2010, 07:19:02 AMedit: boş olanları çekiyordu yine bu yüzden bir sayfada 12(benim verdiğim değer) yerine daha az kayıt gösteriyordu. bende böyle yaparak çözdüm inş. çözmüşümdür :D


      $request2 = $smcFunc['db_query']('', '
      SELECT COUNT(id_member)
      FROM {db_prefix}themes
      WHERE variable = {string:col_name} and value != ""',



      $request = $smcFunc['db_query']('', '
      SELECT id_member,
      FROM {db_prefix}themes
      WHERE variable = {string:col_name} and value != ""
      ORDER BY value ASC
      LIMIT {int:start}, {int:limit}',

Büyük ihtimal çözülmüştür. Benim yukarıda yaptığımla value sütununa "0" değeri (yani false) verilmişse bile ekranda gösterilirdi. Aslında bu sizin yaptığınız yöntem daha sağlıklı (bence). Veriyi çekerken direk SQL'den halletmek daha performanslı oluyor.

Quote from: serhatyilmaz on December 02, 2010, 07:19:02 AM
eyvallah hocam inşallah sayfaların bölünmesinde sorun olmaz çünkü boşluk olanlar görünmeyecek onlar yüzünden bazı sayfalarda 8 bazılarındaysa 5 vs. rastgele kayıt görünüyordu.
Bunun da sebebinin benim eklediğim koddan olduğunu sanıyorum -- siz bu değişikliği yaptıktan sonra benim eklediğim kodun kalıp kalmamasının mahzuru yok, sorarsınız diye şimdiden söylemek istedim. :) SMF'nin sayfalama fonksiyonu, çekilen toplam veriden istediğiniz kadarını gösteriyor. Ancak biz yukarıda önce verileri çektik, sonra boş olanları göstermedik. Yine sizin yaptığınız kodla bunun çözüleceğini sanıyorum. ;)

Advertisement: