كيف يمكنك الحفاظ على رقم الصفحة بعد توجيه في للكيك؟

StackOverflow https://stackoverflow.com/questions/1055359

سؤال

ولدي وجهة نظر مؤشر تسرد البنود، وانها قائمة طويلة جدا وأنا استخدم Paginator للحد من البنود 50 إلى واحد في الرأي.

وكل عنصر له صلة "تحرير" أن يذهب إلى وجهة نظر تحرير مع المدخلات / التصديقات / الخ. عند تقديم هذا النموذج، وإعادة توجيه استخدام إلى طريقة العرض المؤشر.

وحتى الآن على ما يرام، ولكن هنا تكمن المشكلة:

إذا كان مستخدم على صفحة N من المؤشر بعد وينقرون تحرير وتحرير عنصر، أريدهم أن يتم توجيهك إلى الصفحة N المؤشر. إذا كنت أعرف رقم الصفحة، ويمكنني أن مجرد عصا "/ الصفحة: N" إلى نهاية URL، ولكن ليس لدي أي فكرة عن كيفية يمكنني الحصول على رقم الصفحة. (N يمكن أن يكون أي رقم الصفحة، ولكن خصوصا => 2)

وسيكون موضع تقدير أي أفكار.

هل كانت مفيدة؟

المحلول

ويجب أن يكون عدد الصفحات جزءا من فار $ بارامس في عرض القائمة. فقط تك وضعها على نهاية الارتباط تحرير والتعامل معها من هناك. على الصفحة تحرير سوف تحتاج إلى وسيلة لاتخاذ عدد الصفحات اختياري، واحفظها في أي تقديم النموذج، وإلى الأمام مرة أخرى إلى قائمة مع نفس رقم الصفحة.

نصائح أخرى

وأنا خلقت المكون الذي يحفظ الصفحة في الدورة. ثم في app_controller.php، وتحقق لمعرفة ما إذا كان هناك أي شيء في الدورة لنموذج معين يتم استخدامه ثم قم بإضافة ذلك إلى رابط. إذا كنت مهتما في رمز لعنصر، رسالة لي. وأود أيضا أن تخزين النظام، إذا تغيرت المستخدم ترتيب في صفحة الفهرس قبل التحرير.

وانظر هنا لمصدر: http://github.com/jimiyash/cake- pluggables / فقاعة / a0c3774982c19d02cfdd19a2977eabe046a4b294 / التحكم / مكونات / memory.php

وهنا هو جوهر ما أقوم به.

//controller or component code
if(!empty($params['named']) && !empty($params['controller']) && $params['action'] == 'admin_index'){
    $this->Session->write("Pagem.{$params['controller']}", $params['named']);
}

//app_controller.php
    $redirectNew = "";
    if(is_array($redirectTo)){
        if(!empty($params['prefix']) && $params['prefix'] == 'admin'){
            $redirectNew .= '/admin';
        }
        if(!empty($params['controller'])){
            $redirectNew .= "/" . $params['controller'];
        }
        if(!empty($redirectTo['action'])){
            $redirectNew .= "/" . $redirectTo['action'];
        }
    } else {
        $redirectNew = $redirectTo;
    }

    $controller = $params['controller'];
    if($this->Session->check("Pagem.$controller")){
        $settings =  $this->Session->read("Pagem.$controller");
        $append = array();
        foreach($settings as $key=>$value){
            $append[] = "$key:$value";
        }
        return $redirectNew . "/" . join("/", $append);
    } else {
        return $redirectNew;
    }

إذا فهمت بشكل صحيح، ما سبق على ما يرام للتحرير، ولكن ليس لإضافة. هذا الحل يجب أن تعمل لكلتا الحالتين:

في حدات التحكم الخاصة بك أو /app/app_controller.php الخاص بك، وضعت في شيء من هذا القبيل لإضافة:

$insertID = $this->{$this->modelClass}->getLastInsertID();
$page = $this->{$this->modelClass}->getPageNumber($insertID, $this->paginate['limit']);
$this->redirect("/admin/{$controllerName}/index/page:{$page}");

... وشيء من هذا القبيل لتحرير:

$page = $this->{$this->modelClass}->getPageNumber($id, $this->paginate['limit']);
$this->redirect("/admin/{$controllerName}/index/page:{$page}");

في /app/app_model.php الخاص بك، وطرح في هذا:

/**
 * Work out which page a record is on, so the user can be redirected to
 * the correct page.  (Not necessarily the page she came from, as this
 * could be a new record.)
 */

  function getPageNumber($id, $rowsPerPage) {
    $result = $this->find('list'); // id => name
    $resultIDs = array_keys($result); // position - 1 => id
    $resultPositions = array_flip($resultIDs); // id => position - 1
    $position = $resultPositions[$id] + 1; // Find the row number of the record
    $page = ceil($position / $rowsPerPage); // Find the page of that row number
    return $page;
  }

وعلى أمل أن يساعد!

هل بسيط

$this->redirect($this->referer());

والأعمال؟

في الرأي مع paginator:

<?php
if ($this->Paginator->hasPage(null, 2)) {   
$pag_Start = $this->Paginator->counter('{:start}');
$pag_End = $this->Paginator->counter('{:end}');
if( $pag_Start == $pag_End ){
$pageToRedirect = $this->Paginator->current('Posts');
}else{
$pageToRedirect= '';
}}?>

وبعد ذلك تصل إلى صفحة تعديل

<?php
echo $this->Form->postLink(
'Edit',
array('action' => 'edit', $subscription['Post']['id']));
?>

في وحدة التحكم:

public function edit($post_id, $pageToRedirect = false){

    //after all editing its done redirect

    if($pageToRedirect){
    // if record was last in pagination page redirect to previous page
    $pageToRedirect = $pageToRedirect -1;
    return $this->redirect(array('action' => 'index/page:'.$pageToRedirect ));
    }else{
    // else redirect to the same pagination page
    $this->redirect($this->referer());          
    }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top