0

まだ初心者ですが、ビューを 10 レコード [プロパティ] に制限し、プロパティ モデルのフィールドで並べ替えるためにページネーターと戦っています。ページネーターにビューを制御させるために、コードで何が間違っているか、または欠けていますか???

リージョンとプロパティの 2 つのモデルがあり、リージョンには多くのプロパティがあります。たとえば、私のビューは /region/view/13 です。これは、リージョン 13 のすべてのプロパティを示しています。

ページネーターは正しい量のプロパティを表示し、ページを正しく設定し、すべてが正しいように見えますが、ページネーターはビューを制限していません。ビューをページごとに 10 に制限するのではなく、その領域ごとにすべてのプロパティを 1 つの巨大なリストに表示するだけです。ブラウザのURLは問題ないようですが、スリープごとのソートも機能しません。

/regions/view/13/sort:sleeps/direction:asc
/regions/view/13/sort:sleeps/direction:desc

モデル:

<?php
App::uses('AppModel', 'Model');
/**
* Region Model
*
* @property Country $Country
* @property Property $Property
*/
class Region extends AppModel {

/**
* Display field
*
* @var string
*/
public $displayField = 'regionname';


/**
* belongsTo associations
*
* @var array
*/
public $belongsTo = array(
    'Country' => array(
        'className' => 'Country',
        'foreignKey' => 'country_id',
        'conditions' => '',
        'fields' => '',
        'order' => ''
    )
);

/**
* hasMany associations
*
* @var array
*/
public $hasMany = array(
    'Property' => array(
        'className' => 'Property',
        'foreignKey' => 'region_id',
        'dependent' => false,
        'conditions' => '',
        'fields' => '',
        'order' => '',
        'limit' => '',
        'offset' => '',
        'exclusive' => '',
        'finderQuery' => '',
        'counterQuery' => ''
    )
);

}

コントローラ:

    public function view($id = null) {
    if (!$this->Region->exists($id)) {
        throw new NotFoundException(__('Invalid region'));
    }
            $this->Region->recursive = 2; // related to associated model data, Region -> Properties -> PropertyImages
    $options = array('conditions' => array('Region.' . $this->Region->primaryKey => $id));
    $total = $this->Region->Property->find('count', array(
                    'conditions' => array('Property.region_id' => $id)
                    ));
            $this->set('total', $total);  // Push to counter the view.
            $this->set('region', $this->Region->find('first', $options)); // Push the properties to the view.
            $this->paginate = array(
                'limit' => 10,    
                'conditions' => array('Property.region_id' => $id),
                );
            $this->Region->Property->virtualFields['sleeps'] = 'Property.sleeps';
            $this->set('regions', $this->paginate('Property'));
}    

意見:

<div class="paging">
<?php
echo $this->Paginator->prev('< ' . __('previous'), array(), null, array('class' => 'prev disabled'));
echo $this->Paginator->numbers(array('separator' => ''));
echo $this->Paginator->next(__('next') . ' >', array(), null, array('class' => 'next   disabled')); ?>
</div>
<br>
<?php
echo $this->Paginator->counter(array(
'format' => __('Page {:page} of {:pages}, showing {:current} records out of {:count} total, starting on record {:start}, ending on {:end}'))); ?><br>

Total properties: <?php echo $total . "\n"; ?><br>
Sort by: <?php echo $this->Paginator->sort('sleeps'); ?>

<?php if (!empty($region['Property'])): ?>
<div class="regionviewfooter"></div>
<?php 
$i = 0;
foreach ($region['Property'] as $property): ?>
<!-- We only need 1 image to show up -->
<?php foreach ($property['PropertyImage'] as $key =>$propertyImage): ?>
    <div class="regionview">
        <div class="regionviewleft">
            <?php echo '<span style="font-size:12px;line-height:18px;font-weight:bold;">'; echo $this->Html->link(__($property['description']), array('controller' => 'properties', 'action' => 'view', $property['id'])); echo '</span>'; ?>
            <div class="regionviewheader">Sleeps&nbsp;<?php echo $property['sleeps']; echo ' :: ' ?>
                    <?php
                    if ($property['minPrice'] == 0) {
                        echo 'Please call for prices';
                    } else {
                        echo 'Prices from ';
                        echo $this->Number->currency($property['minPrice'], 'GBP');
                        if ($property['maxPrice'] == 0) {
                            echo ' PW';
                        } else {
                            echo ' - ';
                            echo $this->Number->currency($property['maxPrice'], 'GBP');
                            echo ' PW';
                        }
                    }
                    echo '<span style="font-size:11px;line-height:18px;font-weight:normal;">'; echo ' :: ';
                    echo $this->Html->link(__('View Property'), array('controller' => 'properties', 'action' => 'view', $property['id'])); echo '</span>'; ?>
            </div>
                <?php echo ($property['shortDesc']); ?><br>
                <a href="../../enqlist">Add to my Enquiry List</a> :: Property Ref.    (<?php echo strtoupper($property['ref']); ?>)
        </div>
        <div class="regionviewright">
            <!-- display image -->
            <?php echo $this->Html->image(($propertyImage['filename']), array('alt' => ($propertyImage['description']),'width' => '150' ,'height' => '77')); $key ?>
            <?php $key++; ?>
        </div>
    </div>
    <div class="clear"></div>
    <div class="regionviewfooter"></div>
    <?php if ($key == 1) {
            break; // Stop, we did 1 image.
        }
    ?>
    <?php endforeach; ?>
  <?php endforeach; ?>
<?php endif; ?>
<br><a href="#top">Top of Page</a><br><br>
4

1 に答える 1

1

ページ分割された結果を に設定していますが、ビューでは、すべてのプロパティをプルする再帰 2 を使用して、(単数)$regionsをループして表示しています。$regionfind()

したがって、コードでクリーンアップする必要があるものは他にもたくさんありますが、今のところ、 View では単数形では$regionsなく (複数形) を使用$regionしてください。

于 2013-05-03T00:28:55.307 に答える