• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
جستجو در EXTJS
#1
Question 
سلام
یک live search ایجاد کردم در EXTJS
به این شکله که با تایپ هر کارکتر اطلاعات تایپ شده باید به فایل php برای دریافت نتایج ارسال بشه.
مشکلم اینه که نمیدونم چه فیلدی رو با چه REQUESTI ای داره ارسال میکنه دقیقا که در فایل PHP همون رو دریافت کنم و اطلاعات متناسب با اون رو برگردونم.
کدها رو در پایین ضمیمه کردم
کد پی‌اچ‌پی:
Ext.onReady(function(){
    var 
ds = new Ext.data.Store({
            
url'output.php'
            
,
        
reader: new Ext.data.JsonReader({
            
root'topics',
            
totalProperty'totalCount',
            
id'post_id'
        
}, [
            {
name'title'mapping'topic_title'},
            {
name'topicId'mapping'topic_id'},
            {
name'author'mapping'author'},
            {
name'lastPost'mapping'post_time'type'date'dateFormat'timestamp'},
            {
name'excerpt'mapping'post_text'}
        ])
    });

    
// Custom rendering Template
    
var resultTpl = new Ext.XTemplate(
        
'<tpl for="."><div class="search-item">',
            
'<h3><span>{lastPost:date("M j, Y")}<br />by {author}</span>{title}</h3>',
            
'{excerpt}',
        
'</div></tpl>'
    
);
    
    var 
search = new Ext.form.ComboBox({
        
storeds,
        
displayField:'title',
        
typeAheadfalse,
        
minChars:3,
        
loadingText'Searching...',
        
width570,
        
pageSize:10,
        
hideTrigger:true,
        
tplresultTpl,
        
applyTo'search',
        
itemSelector'div.search-item',
        
onSelect: function(record){ // override default onSelect to do redirect
            
window.location =
                
String.format('http://extjs.com/forum/showthread.php?t={0}&p={1}'record.data.topicIdrecord.id);
        }
    });
}); 
  پاسخ
تشکر شده توسط :
#2
از firebug کمک بگیر
پیش فرض توی ایندکس query مربوط به _GET یا _POST قرار میده
  پاسخ
تشکر شده توسط : parsbin paull
#3
ممنون
start و limit و query داره
فقط یک مشکلی خوردم در ساخت json
الگویی که قبول میکنه به این شکل هستش
کد پی‌اچ‌پی:
{"count":"10","company":[{"cmp":"mana","tell":"123455"},{"cmp":"barez","tell":"9999999"} ]} 

فرمول ساخت json اش رو نمیتونم جور کنم
فرض کنین میخوایم این اطلاعات رو از دیتابییس در بیاریم و به json تبدیلش کنیم
ساخت array هاش به چه شکلی میشه؟
به یک جاهایی رسیدم منتها نتونستم جواب دقیق رو پیدا کنم
کد پی‌اچ‌پی:
array('count'=>10,'comps'=>array('cmp'=>'mana','tell'=>'123455')); 
  پاسخ
تشکر شده توسط :
#4
چون totalProperty رو برابر totalCount قرار دادی و همینطور root رو برابر با topics قرار دادی پس باید آرایه ایی که تولید می کنی بشه این
کد پی‌اچ‌پی:
array('totalCount'=>10,'topics'=>array(array('cmp'=>'mana','tell'=>'123455'))); 

بعدش هم فیلدهایی که توی store تعریف کردی وجود نداره
این آرایه رو با json_encode انکود کن و چاپ کن
  پاسخ
تشکر شده توسط : parsbin paull
#5
بسیار ممنون
مشکل بعدی اینه که خروجیم به شکل زیر در اومده
کد پی‌اچ‌پی:
{"totalCount":10,"comps":[{"name":"\u0635\u0646\u0627\u06cc\u0639 \u063a\u0630\u0627\u06cc\u06cc \u0645\u0627\u0646\u0627","type":"\u0642\u0631\u0627\u0631\u062f\u0627\u062f \u062c\u0627\u0631\u06cc"}]} 


کدهام
کد پی‌اچ‌پی:
                $txt_que "SELECT * FROM contact WHERE $id_or LIMIT 10;";
////////////////////
                
                
            
$result mysql_query($txt_que);
            if (
mysql_num_rows($result) > 0) {
            
                
$num ;
                while (
$row mysql_fetch_assoc($result)) {
                
                    if(
$row['field_type']=='COMPANY_VAZIAT'){$array[$num]['type']=$row['char_val'];$st_vaziat true ;}
                    if(
$row['field_type']=='COMPANY_NAME'){$array[$num]['name']=$row['char_val'];$st_name true ;}
                    if((
$st_vaziat == true) and ($st_name == true)){
                        
$num++;
                        
$st_vaziat false ;
                        
$st_name false ;
                    }
                }
            }
echo 
json_encode(array('totalCount'=>10,'comps'=>$array)); 
  پاسخ
تشکر شده توسط :
#6
مشکلش چیه؟
  پاسخ
تشکر شده توسط :
#7
حل شد
ممنون از راهنمایی هاتون
چیز خوبی از آب در اومد قسمت سرچ برنامه
[عکس: i363690_searchout.JPG]
  پاسخ
تشکر شده توسط :
#8
برای سبک شدن کار، المنتها و اجزای صفحه رو با json میخوام لود کنم.
مثل فرم ها و یا همین فیلد جستجو.
منتها مدل کدهایی که میخواد با json لود بشه باید طوری باشه که json میخواد.
یعنی بصورت الگوی
کد پی‌اچ‌پی:
{
xtype:'combo',
.
.
.
}
,
{
xtype:'combo',
.
.
.
}
.
.

یعنی نه تابعی باید باشه نه کلاسی
همه باید بصورت آیتم باشن
موندم روی تبدیل کدها این فیلد جستجو به این الگو.
کدهای جستجوی زنده اینه
کد پی‌اچ‌پی:
Ext.onReady(function(){
    var 
ds = new Ext.data.Store({
            
url'json_core.php',
        
reader: new Ext.data.JsonReader({
            
root'comps',
            
totalProperty'totalCount'
        
}, [
            {
name'name'mapping'name'},
            {
name'id'mapping'id'},
            {
name'type'mapping'type'},
            {
name'description'mapping'description'},
            {
name'date'mapping'date'}
        ])
    });
    var 
resultTpl = new Ext.XTemplate(
        
'<tpl for="."><div class="search-item" dir=rtl>',
            
'<h3>{name}<span>{date}<br /> {type}</span></h3>',
            
'{description}',
        
'</div></tpl>'
    
);  
    var 
search = new Ext.form.ComboBox({
        
storeds,
        
cls'textright',
        
displayField:'name',
        
typeAheadfalse,
        
loadingText'... در حال جستجو',
        
width450,
        
pageSize:10,
        
hideTrigger:true,
        
tplresultTpl,
        
minChars2,
        
applyTo'search',
        
itemSelector'div.search-item',
        
onSelect: function(record){
            var 
company_id String.format('{0}'record.data.id);
            
window.location '?contact_id='+company_id ;
        }
    });
    
search.focus();
}); 
  پاسخ
تشکر شده توسط :
#9
من که متوجه نشدم
  پاسخ
تشکر شده توسط :
#10
خوب
ببینین با کد زیر کاری کردم تا بشه اسکریپت یک فرم رو از صفحه echo.php دریافت کرد.

کد پی‌اچ‌پی:
handler: function(){  
Ext.Ajax.request({  
  
url'echo.php?do=sabte_foroosh',  
  
success: function(response) {  
    var 
field_items Ext.decode(response.responseText);  
    var 
formPanel = new Ext.form.FormPanel({  
      
itemsfield_items  
    
});          
        
page.add(formPanel);  
        
page.doLayout();  
  }  
});  


منتها در صفحه echo.php کدها باید به صورت خاصی باشن تا بشه با این روش ازشون استفاده کرد.
همه اجزای اون صفحه باید بصورت آیتم باشن.
یعنی مثلا از
کد پی‌اچ‌پی:
var formPanel = new Ext.form.FormPanel 
همچین چیزی نباید استفاده کرد
و بجاش باید از
کد پی‌اچ‌پی:
{
xtype:'form',
.
.


استفاده کرد.
توی قطعه کد جستجوی زنده، برای تبدیلش به این الگو مشکل دارم.
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان