• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
استفاده از zend_paginator
#1
مستندات بخش zend_paginator فکر میکنم کمی گنگ هست، می تونید یه راهنمایی با مثال کامل تری نسبت به مستندات زند در باره استفاده از این امکان بگذارید؟
ممنون میشم
  پاسخ
تشکر شده توسط :
#2
از دیتابیس می خواین استفاده کنین یا از آرایه؟
  پاسخ
تشکر شده توسط :
#3
از دیتابیس که ممکنه از کش هم استفاده بشه
  پاسخ
تشکر شده توسط :
#4
قدم اول این هست که adapter رو‌ ایجاد کنین که یکی از اون ها واسه دیتابیس هست (این قسمتای توی کنترلر انجام میشه)
کد پی‌اچ‌پی:
$adapter = new Zend_Paginator_Adapter_DbSelect($db->select()->from('posts')); 

Zend_Paginator_Adapter_DbSelect
یه دونه پارامتر‌ می گیره که آبجکت select‌ هست که حتی این آبجکت می تونه از select مدل دیتابیس هم باشه

حالا شما باید تعداد کل ستون‌هاتون رو بدین. برای اینکار باید از setRowCount ‌استفاده کنین. می تونین مستقیما به این متد یه عدد بدین مثلا ۱۰۰. یعنی ۱۰۰ تا رکورد دارم.‌ یا اینکه نه بیایی از select بدی‌ .
کد پی‌اچ‌پی:
$adapter->setRowCount($db->fetchRow($db->select()->from('posts')->array('COUNT(*_by) as `count`'))->count
); 

حالا‌ میشه آبجکت اصلی‌ رو ساخت

کد پی‌اچ‌پی:
$paginator = new Zend_Paginator($adapter); 

حالا‌ ‌پاسش میدیم به view
کد پی‌اچ‌پی:
$this->view->paginator=$paginator 

حالا‌ برای اینکه آیتمهای موجود رو نشون بدیم می تونیم از حلقه استفاده کنیم. این مثال خود zend هست. (منظور رکوردهایی هست که توی اون صفحه وجود داره) (این قسمتها ماله view هست )

کد پی‌اچ‌پی:
<html>
<
body>
<
h1>Example</h1>
<?
php if (count($this->paginator)): ?>
<ul>
<?php foreach ($this->paginator as $item): ?>
  <li><?php echo $item?></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>

<?php echo $this->paginationControl($this->paginator,
                                    
'Sliding',
                                    
'my_pagination_control.phtml'); ?>
</body>
</html> 
فقط هلپر‌ paginationControl می مونه که با این می خواد صفحه بندی رو نشون بدیم.‌ پارامتر اول که مشخصه چیه . پارامتر دوم هم توی داکیومنت به داخل یه جدول توضیحاتش رو داده. پارامتر آخر هم یه فایل phtml هست که نحوه نمایش رو نشون میده. که خود زند سه مثال برای این صفحه آورده که یکیش این هست

کد پی‌اچ‌پی:
<?php if ($this->pageCount): ?>
<div class="paginationControl">
<!-- Previous page link -->
<?php if (isset($this->previous)): ?>
  <a href="<?php echo $this->url(array('page' => $this->previous)); ?>">
    &lt; Previous
  </a> |
<?php else: ?>
  <span class="disabled">&lt; Previous</span> |
<?php endif; ?>

<!-- Numbered page links -->
<?php foreach ($this->pagesInRange as $page): ?>
  <?php if ($page != $this->current): ?>
    <a href="<?php echo $this->url(array('page' => $page)); ?>">
        <?php echo $page?>
    </a> |
  <?php else: ?>
    <?php echo $page?> |
  <?php endif; ?>
<?php 
endforeach; ?>

<!-- Next page link -->
<?php if (isset($this->next)): ?>
  <a href="<?php echo $this->url(array('page' => $this->next)); ?>">
    Next &gt;
  </a>
<?php else: ?>
  <span class="disabled">Next &gt;</span>
<?php endif; ?>
</div>
<?php endif; ?>

فقط چند تا بحث دیگه می مونه توی قسمت کنترلر صفحه فعلی رو خود zend ‌مشخص‌‌ نمی کنه و خودت باید این رو مشخص کنی که توی کنترل برای مثالهای بالا می تونی از کد زیر استفاده کنی
کد پی‌اچ‌پی:
$paginator->setCurrentPageNumber($this->_getParam('page')); 

البته من اینها رو تست نکردم. خودم از اینا استفاده می کنم. اگر مشکلاتی داشته باشد ممکنه توی select ها باشه.‌‌ اگر مشکلی داشت و تونستید برطرف کنید بیاد بگید تا اصلاح کنم اگرم نتونستید اخطار رو بدید تا بررسیش کنم
  پاسخ
تشکر شده توسط : nasserghiasi scorpion
#5
ضمنا ملاحظات امنیتی دیتابیس در نظرگرفته شده یا باید خودمان انجام دهیم؟
چرا در نمی شود از parent directory استفاده کرد؟ مثلا من الگوی آماده ای برای صفحه بندی در پوشه تمپلیت های تم قرار داده ام و می خواهم همه جا از آن استفاده شود ولی نمی شود.
  پاسخ
تشکر شده توسط :
#6
چون‌ از آبجکت select استفاده ‌می‌کنیم نمی خواد
برای سوال آخری هم شما می تونید استفاده کنید. ولی در کل برای چیزی که می خوایید از layout ‌استفاده کنید
  پاسخ
تشکر شده توسط : nasserghiasi
#7
دست شما درد نکنه ، مشکل من در رابطه با zend_paginator حل شد فقط مشکلم استفاده از یک الگوی آماده برای صفحه بندی هست که متاسفانه نمی شود از parent directory استفاده کرد و شما گفتید که می تونید بجای اون از layout استفاده کنید! می شه بگید چجوری؟
  پاسخ
تشکر شده توسط :
#8
فکر‌ کنم قبلا بد متوجه شدم که گفتم از layotu استفاده کنید.
من روی نسخه های قدیمیش با ../ می‌ ذاشتم اولش به پوشه قبلی میرفت
  پاسخ
تشکر شده توسط :
#9
پس با این حساب امکان استفاده از الگوی خارج از پوشه وجود نداره و برای هر ماژول که ایجاد می کنم یک الگوی Pagination هم باید ایجاد کنم؟!
  پاسخ
تشکر شده توسط :
#10
از ../ استفاده کردین؟‌ تا جایی که یادمه اینجوری میشد. اگر نمیشه بگید تا یه بررسی کنم
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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