Practical symfony Day 14 Feed #part 2

Feeds

Хамгийн сүүлийн Feed-үүд

Өөр өөр төрлийн формат дэмжих нь яг л өөр өөр төрлийн template үүсгэхдээ адил хялбархан. Хамгийн сүүлийн ажлын байрны Atom feed үүсгэхийн тулд indexSuccess.atom.php template-ыг үүсгэнэ:

<!-- apps/frontend/modules/job/templates/indexSuccess.atom.php -->
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Jobeet</title>
<subtitle>Latest Jobs</subtitle>
<link href="" rel="self"/>
<link href=""/>
<updated></updated>
<author><name>Jobeet</name></author>
<id>Unique Id</id>
<entry>
<title>Job title</title>
<link href="" />
<id>Unique id</id>
<updated></updated>
<summary>Job description</summary>
<author><name>Company</name></author>
</entry>
</feed>

Template-ын нэрс

Html формат нь вэб application-д хамгийн их хэрэглэгддэг формат болохоор үүнийг template-ын нэрний хэсгээс авчиж болно. IndexSuccess.php ба indexSuccess.html.php хоёр template-үүд ижилхэн ба symphony эхнийхийг нь хэрэглэгдэг.

Яагаад template болгон Success гэсэн төгсгөлтэй байдаг вэ? Action аль template дуудагдахыг зааж өгдөг. Хэрэв action нь юу ч буцаагаагүй бол, дараах кодтой ижил болно:

return sfView::SUCCESS; // == 'Success'

Хэрэв та төгсгөлийг нь өөрчлөхийг хүсвэл, өөр нэг  буцаахад болно:

return sfView::ERROR; // == 'Error'
return 'Foo';

Өмнөх хичээлэр үзсэнчлэн template-ийн нэрийг setTemplate method-ыг ашиглан өөрчлөх боломжтой байдаг:

$this->setTemplate(‘foo’);

Анхны утгандаа symphony response-ын Content-Type –ыг форматын дагуу өөрчилж, бүгд non-HTML формат болж, layout нь disabled болно. Atom feed-ын хувьд symphony Content-Type –ыг application/atom+xml; charset=utf-8 болгож өөрчилнө.

Jobeet-ын footer хэсгийн feed холбоосыг шинэчлэе:

<!– apps/frontend/templates/layout.php –>

<li class=&#8221;feed&#8221;>

<a href=&#8221;<?php echo url_for(‘@job?sf_format=atom’) ?>&#8221;>Full feed</a>

</li>

Дотоод URI нь job-ын жагсаалттай ижил боловч sf_format гэсэн хувьсагч нэмэгдсэн байна.  Layout-ынхаа head хэсэгт <link> таг нэмж өгсөнөөр browser бидний feed-ыг автоматаар олох боломжыг өгнө:

<!– apps/frontend/templates/layout.php –>

<link rel=&#8221;alternate&#8221; type=&#8221;application/atom+xml&#8221; title=&#8221;Latest Jobs&#8221;

href=&#8221;<?php echo url_for(‘@job?sf_format=atom’, true) ?>&#8221; />

Холбоосын href атрибут-ын хувьд url_for –ын хоёрдох аргумент өгөгдсөнөөр URL(Absolute)  хэрэглэгдэнэ.

Atom-ын template-ын header хэсгийг дараах кодоор өөрчилье:

<!-- apps/frontend/modules/job/templates/indexSuccess.atom.php -->

<title>Jobeet</title>

<subtitle>Latest Jobs</subtitle>

<link href=&#8221;<?php echo url_for(‘@job?sf_format=atom’, true) ?>&#8221;

rel=&#8221;self&#8221;/>

<link href=&#8221;<?php echo url_for(‘@homepage’, true) ?>&#8221;/>

<updated><?php echo gmstrftime(‘%Y-%m-%dT%H:%M:%SZ’,

Doctrine::getTable(‘JobeetJob’)->getLatestPost()->getDateTimeObject(‘created_at’)->format(‘?></updated>

<author>

<name>Jobeet</name>

</author>

<id><?php echo sha1(url_for('@job?sf_format=atom', true)) ?></id>

Тэмдэглэх зүйл гэвэл format() –ын U аргумент нь он сарыг одооны байгаа огноогоор авна. Хамгийн сүүлийн post-ыг авах getLatestPost() method үүсгэе:
// lib/model/doctrine/JobeetJobTable.class.php

class JobeetJobTable extends Doctrine_Table

{

public function getLatestPost()

{

$q = Doctrine_Query::create()

->from(‘JobeetJob j’);

$this->addActiveJobsQuery($q);

return $q->fetchOne();

}

// …

}

Feed-ын оролтууд нь дараах кодоор боловсруулагдана:

<!-- apps/frontend/modules/job/templates/indexSuccess.atom.php -->

<?php use_helper('Text') ?>

<?php foreach ($categories as $category): ?>

<?php foreach

($category->getActiveJobs(sfConfig::get(‘app_max_jobs_on_homepage’)) as

$job): ?>

<entry>

<title>

<?php echo $job->getPosition() ?> (<?php echo $job->getLocation()

?>)

</title>

<link href=&#8221;<?php echo url_for(‘job_show_user’, $job, true) ?>&#8221; />

<id><?php echo sha1($job->getId()) ?></id>

<updated><?php echo gmstrftime(‘%Y-%m-%dT%H:%M:%SZ’,

$job->getDateTimeObject(‘created_at’)->format(‘U’)) ?></updated>

<summary type=&#8221;xhtml&#8221;>

<div xmlns=&#8221;http://www.w3.org/1999/xhtml”&gt;

<?php if ($job->getLogo()): ?>

<div>

<a href=&#8221;<?php echo $job->getUrl() ?>&#8221;>

<img src=&#8221;http://&lt;?php echo $sf_request->getHost().’/

uploads/jobs/’.$job->getLogo() ?>&#8221;

alt=&#8221;<?php echo $job->getCompany() ?> logo&#8221; />

</a>

</div>

<?php endif; ?>

<div>

<?php echo simple_format_text($job->getDescription()) ?>

</div>

<h4>How to apply?</h4>

<p><?php echo $job->getHowToApply() ?></p></div>

</summary>

<author>

<name><?php echo $job->getCompany() ?></name>

</author>

</entry>

<?php endforeach; ?>

<?php endforeach; ?>
Хүсэлтийн объектын ($sf_request)  getHost() method нь одооны хостыг буцаана. Үүгээр компани лого-ны жинхэнэ холбоосыг үүсгэх боломжтой болно.

Feed үүсгэхдээ та коммандын хэрэглүүрүүд болох curl эсвэл wget –уудыг ашигладаг бол алдааг хялбараар засах боломжтой.

Advertisements

One thought on “Practical symfony Day 14 Feed #part 2

Хариулт үлдээх

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Өөрчлөх )

Twitter picture

You are commenting using your Twitter account. Log Out / Өөрчлөх )

Facebook photo

You are commenting using your Facebook account. Log Out / Өөрчлөх )

Google+ photo

You are commenting using your Google+ account. Log Out / Өөрчлөх )

Connecting to %s