زمان جاری: 2012/05/24, 04:14 PM خوش آمدید مهمان گرامی! (ورودعضویت)



Rss Helper


ارسال موضوع  ارسال پاسخ 
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رتبه موضوع:
 
Rss Helper
نویسنده پیام
786ali آفلاین
عضو نیمه حرفه ای
**

ارسال‌ها: 137
تاریخ عضویت: Jul 2011
رتبه: 2
تشکر: 197
80 بار تشکر شده در 42 پست
ارسال: #1
Question Rss Helper
سلام
استفاده از این کمک کننده را پیشنهاد می کنید و یا نوشتن rss به صورت دستی ؟
بنده کمی با این helper مشکل دارم دوستان اگر تجربه ای دارید راهنمایی بفرمائید ،
( مثلا وقتی به آدرس index.rss می رویم مرورگر فید را نمی شناسد و می خواهد فایل را دانلود کند ! )
ممنونم
2012/02/05 06:26 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #2
RE: Rss Helper
در روتر تعریف کردید؟؟ تنظیمات مورد نیاز رو؟!
2012/02/05 07:20 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : 786ali
786ali آفلاین
عضو نیمه حرفه ای
**

ارسال‌ها: 137
تاریخ عضویت: Jul 2011
رتبه: 2
تشکر: 197
80 بار تشکر شده در 42 پست
ارسال: #3
RE: Rss Helper
دقیقا طبق مستندات کیک پیش رفتم :

در روتر :
کد PHP:
Router::parseExtensions('rss'); 

در کنترلر :

کد PHP:
var $components = array('RequestHandler');
public function 
index(){
if( 
$this->RequestHandler->isRss() ){
$posts $this->Post->find('all', array('limit' => 20'order' => 'Post.created DESC'));
$this->set(compact('posts'));
}} 

در Layout :

کد PHP:
echo $rss->header();
if (!isset(
$documentData)) {
    
$documentData = array();
}
if (!isset(
$channelData)) {
    
$channelData = array();
}
if (!isset(
$channelData['title'])) {
    
$channelData['title'] = $title_for_layout;

$channel $rss->channel(array(), $channelData$content_for_layout);
echo 
$rss->document($documentData,$channel); 

در ویو :

کد PHP:
$this->set('documentData', array(
        
'xmlns:dc' => 'http://purl.org/dc/elements/1.1/'));

    
$this->set('channelData', array(
        
'title' => __("Most Recent Posts"true),
        
'link' => $html->url('/'true),
        
'description' => __("Most recent posts."true),
        
'language' => 'en-us'));
    foreach (
$posts as $post) {
        
$postTime strtotime($post['Post']['created']);
 
        
$postLink = array(
            
'controller' => 'entries',
            
'action' => 'view',
            
'year' => date('Y'$postTime),
            
'month' => date('m'$postTime),
            
'day' => date('d'$postTime),
            
$post['Post']['slug']);
        
// You should import Sanitize
        
App::import('Sanitize');
        
// This is the part where we clean the body text for output as the description 
        // of the rss item, this needs to have only text to make sure the feed validates
        
$bodyText preg_replace('=\(.*?\)=is'''$post['Post']['body']);
        
$bodyText $text->stripLinks($bodyText);
        
$bodyText Sanitize::stripAll($bodyText);
        
$bodyText $text->truncate($bodyText400'...'truetrue);
 
        echo  
$rss->item(array(), array(
            
'title' => $post['Post']['title'],
            
'link' => $postLink,
            
'guid' => array('url' => $postLink'isPermaLink' => 'true'),
            
'description' =>  $bodyText,
            
'dc:creator' => $post['Post']['author'],
            
'pubDate' => $post['Post']['created']));
    } 

مشکل کار کجاست ؟
ارور acl هم وجود دارد ( RequestHandler ) را چطور باید دسترسی آزاد بدهیم (Auth->allow) ؟
در بالای فایل هم دو خط خالی وجود دارد که برخی اوقات ارور The page isn't redirecting properly داریم Angry

کلافه شدم !!!
(آخرین تغییر در این ارسال: 2012/02/05 08:24 PM توسط 786ali.)
2012/02/05 07:33 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #4
RE: Rss Helper
چند نکته که می تونم بگم این هست.

1- Router::parseExtensions('rss'); رو باید قبل از روتر اون کنترلری که این دستورات رو گزاشتید باید باشه.
2- در مورد لایوت ، این لایوت با لایوت اصلی فرق داره و باید در app/views/layouts/rss/default.ctp قرار بگیره و هیچ محتوایی به جز موارد زیر داخلش نباشه.
کد PHP:
<?php
echo $rss->header();

if (!isset(
$channel)) {
    
$channel = array();
}
if (!isset(
$channel['title'])) {
    
$channel['title'] = $title_for_layout;
}

echo 
$rss->document(
    
$rss->channel(
        array(), 
$channel$content_for_layout
    
)
);

?>

3- به طبع باید این اکشن هم دسترسی آزاد داشته باشه.
کد PHP:
$this->Auth->allow('rss'

4- اگر مشکلتون برطرف نشد. تنظیمات روتر و خروجی ار اس اس تون رو قرار بدید. تعداد نمایش پست ها رو کم کنید تا زیاد تاپیک شلوغ نشه 2 تا هم کافیه
2012/02/05 09:49 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : 786ali
786ali آفلاین
عضو نیمه حرفه ای
**

ارسال‌ها: 137
تاریخ عضویت: Jul 2011
رتبه: 2
تشکر: 197
80 بار تشکر شده در 42 پست
ارسال: #5
RE: Rss Helper
من همه موارد را طبق مستندات دقیق انجام دادم و الان ارور زیر را دارم :

کد PHP:
The page isn't redirecting properly 

و فکر می کنم ناشی از acl یا auth باشه
چون از قابلیت RequestHandler استفاده شده نمی دونم چطور باید این مورد را دسترسی عمومی (Auth->allow) بدهم و آیا $this->Auth->allow('index') کافی است یا نه

البته من از قابلیت theme استفاده کردم که نمی دونم مهمه یا نه ، گیج شدم .

در روتر از این مورد هم استفاده کردم که جواب نمیده :

کد PHP:
    Router::connect('/rss', array('controller' => 'posts','action' => 'index','url' => array('ext' => 'rss'))); 
2012/02/06 12:25 AM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #6
RE: Rss Helper
شرمندم شما کیک درست نمیکنید. دارید کیک سر هم میکنید.

اینطوری هم که مشخصه از هر چیزی قستمی رو استفاده کردید. به امید این که درست میشه. اما باید بگم این طوری کار رو خرابتر میکنید.
خیلی جالبه واسم شما موفق شدید از acl استفاده کنید. اما هنوز بحث دسترسی ها و کنترل اون رو نمی دونید. دقیقا برعکس بیشتر دوستان Tongue


لطفا کنتلر که توش این کد رو استفاده کردید رو کدش رو بزارید. کل کنترلر + اکشنی که این کد داخلش هست و سایر مشخصات کنترلر مثل کامپوننت ها و ... . سایر اکشن ها نیاز نیست.
کد PHP:
var $components = array('RequestHandler');
public function 
index(){
if( 
$this->RequestHandler->isRss() ){
$posts $this->Post->find('all', array('limit' => 20'order' => 'Post.created DESC'));
$this->set(compact('posts'));
}} 
و هم چنین روتر هایی که برای این کنترلر ست کردید.
2012/02/06 03:21 AM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
786ali آفلاین
عضو نیمه حرفه ای
**

ارسال‌ها: 137
تاریخ عضویت: Jul 2011
رتبه: 2
تشکر: 197
80 بار تشکر شده در 42 پست
ارسال: #7
RE: Rss Helper
من دارم سعی می کنم یاد بگیرم همین Huh

ببینید بحث دسترسی ها و acl را کاملا متوجه شدم و مشکلی در این زمینه ندارم ( چون قبلا خارج از کیک شبیه به این مورد را خودم نوشته بودم و در پروژه ها استفاده می کردم ) ، سوال جهت این بود که شاید اشتباهی هست که من نمی بینم و اینکه من تا به حال از RequestHandler استفاده نکردم .

کنترولر :
کد PHP:
class PostsController extends AppController {
 var 
$name="Posts";
 var 
$helpers = array('Html''Form' 'Time' 'UploadPack.Upload' 'Gallery' 'Javascript' ,  'Persiandate'); 
 var 
$scaffold;
 var 
$paginate = array(
  
'limit' => 5,
  
'order' => array(
  
'Post.titles' => 'asc'
 
));

    function 
beforeFilter() {
    
parent::beforeFilter();
    
$this->Auth->allow('index'); 
    }

   function 
index() {
        if( 
$this->RequestHandler->isRss() ){
          
$posts $this->Post->find('all', array('conditions' => array('publishes' => '1' ),'limit' => 2'order' => 'Post.created DESC'));
          return 
$this->set(compact('posts'));
       }
     
   } 

و کل فایل روتر :

کد PHP:
    Router::parseExtensions('rss');

    
Router::connect('/', array('controller' => 'posts''action' => 'main'));
    
    
Router::connect('/rss', array('controller' => 'posts','action' => 'index','url' => array('ext' => 'rss'))); 
2012/02/06 02:45 PM
یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
saleh آفلاین
Administrator
*******

ارسال‌ها: 989
تاریخ عضویت: Dec 2009
رتبه: 12
تشکر: 399
871 بار تشکر شده در 560 پست
ارسال: #8
RE: Rss Helper
شما این کار تغییر رو اعمال کنید

کد PHP:
Router::connect('/', array('controller' => 'posts''action' => 'main'));
      
Router::parseExtensions('rss');
    
Router::connect('/rss', array('controller' => 'posts','action' => 'index'))); 

حال دیباگ رو 0 کنید و این آدرس رو باز کنید. domain/rss
2012/02/06 09:44 PM
مشاهده سایت کاربر یافتن تمامی ارسال‌های این کاربر نقل قول این ارسال در پاسخ
 تشکر شده توسط : 786ali
ارسال موضوع  ارسال پاسخ 


پرش در انجمن: