GVKun编程网logo

php – 如何使用zend paginate而不加载数据库的所有结果(php添加数据到数据库没有反应)

6

关于php–如何使用zendpaginate而不加载数据库的所有结果和php添加数据到数据库没有反应的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于AndroidListview滑动时不加

关于php – 如何使用zend paginate而不加载数据库的所有结果php添加数据到数据库没有反应的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android Listview滑动时不加载数据 停止时加载数据、c# – 如何使用Paginate方法、Cakephp如何在paginate使用unbind、ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动等相关知识的信息别忘了在本站进行查找喔。

本文目录一览:

php – 如何使用zend paginate而不加载数据库的所有结果(php添加数据到数据库没有反应)

php – 如何使用zend paginate而不加载数据库的所有结果(php添加数据到数据库没有反应)

所以我看到zend paginate工作的方式是你做的:

$paginator = Zend_Paginator::factory($results);
$paginator->setItemCountPerPage($itemCount);
$paginator->setPageRange($pageRange);

其中$results是以数据库形式从数据库加载一堆项的结果

"SELECT * FROM table WHERE etc"

然后zend paginate将计算结果数并自动生成页面范围…

但是如果你这样做,那么你将不得不获取数据库的所有结果,我认为这是一种浪费,因为一次只显示一个页面,因此你只需要获取该页面的项目……

如何使zend paginate能够计算正确的页面范围和数字而无需获取整个表的所有结果?

最佳答案
使用工厂方法,您可以发送Zend_Db_Select或Zend_Db_Table_Select的实例.如果你是类扩展Zend_Db_Table_Abstract,你可以简单地从它构建一个select查询,然后发送它.如果没有,您可以创建实例并发送它,请参阅文档中的示例:

    $adapter = new Zend_Paginator_Adapter_DbSelect($db->select()->from('posts'));
    $adapter->setRowCount(
        $db->select()
           ->from(
                'item_counts',array(
                   Zend_Paginator_Adapter_DbSelect::ROW_COUNT_COLUMN => 'post_count'
                )
             )
    );

$paginator = new Zend_Paginator($adapter)

http://framework.zend.com/manual/en/zend.paginator.usage.html#zend.paginator.usage.dbselect

Android Listview滑动时不加载数据 停止时加载数据

Android Listview滑动时不加载数据 停止时加载数据

本文实例为大家分享了Listview滑动时不加载数据 停止时加载数据的具体代码,供大家参考,具体内容如下

数据源配置(Adapter)

package com.zhengsonglan.listview_loading.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.zhengsonglan.listview_loading.R;
import com.zhengsonglan.listview_loading.entity.UserEnity;

import java.util.List;

/**
 *
 */
public class MyAdapter extends BaseAdapter {
 Context context;
 LayoutInflater inflater;
 List<UserEnity> lists;

 private boolean scrollState=false;

 public void setScrollState(boolean scrollState) {
  this.scrollState = scrollState;
 }


 public MyAdapter(Context context,List<UserEnity> lists) {
  this.context=context;
  this.inflater=LayoutInflater.from(context);
  this.lists=lists;
 }

 @Override
 public int getCount() {
  return lists!=null?lists.size():0;
 }

 @Override
 public Object getItem(int position) {
  return lists.get(position);
 }

 @Override
 public long getItemId(int position) {
  return position;
 }

 @Override
 public View getView(int position,View convertView,ViewGroup parent) {
  ViewHolder viewHolder;
  if (convertView == null) {
   convertView=inflater.inflate(R.layout.main_item,null,true);
   viewHolder=new ViewHolder();
   viewHolder.iv_icon= (ImageView) convertView.findViewById(R.id.main_item_iv_icon);
   viewHolder.tv_name= (TextView) convertView.findViewById(R.id.main_item_tv_name);
   convertView.setTag(viewHolder);
  } else {
   viewHolder= (ViewHolder) convertView.getTag();
  }


  UserEnity userEnity=lists.get(position);

  String img_url=userEnity.getIcon();
  if (!scrollState){
   viewHolder.tv_name.setText(userEnity.getName());
   viewHolder.tv_name.setTag(null);
   ImageLoader.getInstance().displayImage(img_url,viewHolder.iv_icon);
   viewHolder.iv_icon.setTag("1");

  }else{
   viewHolder.tv_name.setText("加载中");
   viewHolder.tv_name.setTag(userEnity.getName());
   viewHolder.iv_icon.setTag(img_url);
   viewHolder.iv_icon.setimageResource(R.mipmap.ic_launcher);

  }
  return convertView;

 }

 static class ViewHolder{
  TextView tv_name;
  ImageView iv_icon;
 }
}

这个Adapter中重要的代码如下:

//定义当前listview是否在滑动状态
private boolean scrollState=false;
public void setScrollState(boolean scrollState) {
 this.scrollState = scrollState;
}
//实体类
UserEnity userEnity=lists.get(position);

if (!scrollState){//如果当前不是滑动的状态,我们填充真数据
   //填充数据
   viewHolder.tv_name.setText(userEnity.getName());
   //设置Tag中数据为空表示数据已填充
   viewHolder.tv_name.setTag(null);
   //加载图片
   ImageLoader.getInstance().displayImage(img_url,viewHolder.iv_icon);
   //设置tag为1表示已加载过数据
   viewHolder.iv_icon.setTag("1");

}else{//如果当前是滑动的状态,我们填充假数据
   viewHolder.tv_name.setText("加载中");
   //将数据name保存在Tag当中
   viewHolder.tv_name.setTag(userEnity.getName());
   //将数据image_url保存在Tag当中
   viewHolder.iv_icon.setTag(img_url);
   //设置默认显示图片(最好是本地资源的图片)
   viewHolder.iv_icon.setimageResource(R.mipmap.ic_launcher);

}

设置监听

ok,我们在看看Activity中的代码,主要是监听listview的onscrolllistener方法

@Override
 public void onScrollStateChanged(AbsListView view,int scrollState) {
  switch (scrollState){

   case AbsListView.OnScrollListener.SCROLL_STATE_IDLE://停止滚动
   {
    //设置为停止滚动
    myAdapter.setScrollState(false);
    //当前屏幕中listview的子项的个数
    int count = view.getChildCount();
    Log.e("MainActivity",count+"");

    for (int i = 0; i < count; i++) {
     //获取到item的name
     TextView tv_name = (TextView) view.getChildAt(i).findViewById(R.id.main_item_tv_name);
     //获取到item的头像
     ImageView iv_show= (ImageView) view.getChildAt(i).findViewById(R.id.main_item_iv_icon);

     if (tv_name.getTag() != null) { //非null说明需要加载数据
      tv_name.setText(tv_name.getTag().toString());//直接从Tag中取出我们存储的数据name并且赋值
      tv_name.setTag(null);//设置为已加载过数据
     }

     if (!iv_show.getTag().equals("1")){//!="1"说明需要加载数据
      String image_url=iv_show.getTag().toString();//直接从Tag中取出我们存储的数据image――url
      ImageLoader.getInstance().displayImage(image_url,iv_show);//显示图片
      iv_show.setTag("1");//设置为已加载过数据
     }
    }
    break;
   }
   case AbsListView.OnScrollListener.SCROLL_STATE_FLING://滚动做出了抛的动作
   {
    //设置为正在滚动
    myAdapter.setScrollState(true);
    break;
   }

   case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://正在滚动
   {
    //设置为正在滚动
    myAdapter.setScrollState(true);
    break;
   }
  }
 }

最后记得给listview加上滑动的监听

listview.setonScrollListener(this);

效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

c# – 如何使用Paginate方法

c# – 如何使用Paginate方法

我在Web API项目中遇到了PaginatedList的问题.

在存储库中有一个方法,如:

public virtual PaginatedList<T> Paginate<TKey>(int pageIndex,int pageSize,Expression<Func<T,TKey>> keySelector,bool>> predicate,params Expression<Func<T,object>>[] includeProperties)
{
    IQueryable<T> query = AllIncluding(includeProperties).OrderBy(keySelector);

    query = (predicate == null)
        ? query
        : query.Where(predicate);

    return query.ToPaginatedList(pageIndex,pageSize);
}

但是,当我尝试使用它时,像这样:

var a = repository.Paginate<Region>(pageNo,pageSize,x => x.ID,null);

我收到此错误:

Cannot implicitly convert type ‘int’ to
‘Domain.Entities.Dictionaries.Region’

我究竟做错了什么?

解决方法

你的方法签名有TKey,我想是一个排序的键,但在你的调用中你指定整个对象Region,然后你在keySelector中指定int,所以它不能编译它,因为它尝试使用int类型作为TKey的区域类型.

我想你的样本应该是:

repository.Paginate<int>(pageNo,null);

通用类型T i假设是为整个类指定的,因此在此处应该没有在调用中指定它,因为存储库实例已经是特定于通用的.

Cakephp如何在paginate使用unbind

Cakephp如何在paginate使用unbind

cakephp的controller中的paginate是一个得到分页数据的函数.配合helper里的paginator,可以很轻松的做出分页列表,排序的列表页面.
但由我开始学习用cakephp时,我就有一个问题一直困扰着我.
model如何解除关联(unbind)?
正常的情况下,只要在find之前解除(unbind)我不需的model.就可以不去搜索这些modeld关联的数据表.而且在find完以后会自动返把之前我解除的model再次关联起来.以下是常用的使用方法


//user model
class User extends AppModel {

  var $name = ''User'';
  var $belongsTo = array(
            ''Profile'' = array(''className''=>''Profile'',''foreignKey''=>''user_id'')
          )
}


运行以下代码


$this->User->unbind(array(''belongsTo''=>array(''Profile'')));
$rs=$this->User->find();


$rs会是

立即学习“PHP免费学习笔记(深入)”;


array(
       ''User''=>array(),
)


如果在find之前没有运行unbind,$rs将会是


array(
       ''User''=>array(),
       ''Profile''=>array()
)


但如果运行paginate就得不到同样的结果
code]
$this->User->unbind(array(''belongsTo''=>array(''Profile'')));
$rs=$this->paginate(''User'');
[/code]
$rs的结果还是


array(
       ''User''=>array(),
       ''Profile''=>array()
)


为什么在paginate不能解除关联(unbind)?
原因是在find里在得到数据后,find会用model->resetAssociations();把所有关联(Association)还原.而paginate里使用了两次find.一次是得到总数,另一次得到分页显示的数据.所以返回的结果还是有Profile的内容.
解决方法:给unbind的第二个参数里赋上非ture的值.如果unbind的第二个参数是true,cakephp会把需要解除关联的数据库保存到model->__backAssociation里,当运行model->resetAssociations();会从model->__backAssociation把相关的关联的数据还原.所以以下代码就可以解决


$this->User->unbind(array(''belongsTo''=>array(''Profile'')),false);
$rs=$this->paginate(''User'');


另外,如果在运行paginate()后,还需要使用model里的关联数据来find 数据.可以在app_model.php文件里增加以下代码


  /**
     * function description:turn off the Association,and return the the Association,.
   *                      the function working for Controller->paginate() and Model->bind().
   *                      the function will help you that get data form Controller->paginate() before unbind some 
   *                      Association for and rebind the remove of Association after get data.
   *                      if you don''t neet to rebind Association,you can only use 
   *                      <br>   *                      $this-&gt;Models-&gt;unbind($params,false);<br>   *                      
     * @Date:2008-10-10
   * <br>   * $backAssociation = $this-&gt;ModelName-&gt;unbindAndPushModels(array(''belongsTo''=&gt;array(''User'')));<br>   * $result=$this-&gt;paginate(''ModelName'');<br>   * $this-&gt;ModelName-&gt;bind($backAssociation);//this action is to restore the model of assocication data.<br>   *
     * @param    (类型)参数名  :描述
  **/
    Function unbindAndPushModels($params)
    {
    $backAssociation=array();
      foreach ($params as $assoc => $models)
    {
      foreach ($models as $model)
      {
        If(isset($this->{$assoc}[$model]))
        {
          $backAssociation[$assoc][$model] = ;
          unset ($this->{$assoc}[$model]);
        }  
      }
    }
    Return $backAssociation;

 以上就是Cakephp如何在paginate使用unbind的内容。

ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动

ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动

如何解决ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动?

我有 PagingDataAdapter,它包含在 ConcatAdapter 内的 GridAdapter 中。 当我像这样收集数据时:

lifeCycleScope.launch { viewmodel.setPostState().collectLatest {pagingData->postsAdapter.notifyItems(pagingData) } } 

分页库开始按顺序加载所有页面,无需滚动。

postsAdapter 是一个带有 GridLayoutManager 的适配器,它是对 PagingDataAdapter 的封装

viewmodel 中的 setPostState 函数:

 fun setPostState(): Flow<PagingData<Post>> = 
        Pager(
            PagingConfig(
                PAGE_SIZE,initialLoadSize = INIT_LOAD_SIZE
            )
        )
        {
            PostsPagingSource { page,pageSize ->
                useCase.getPosts(page,pageSize)
            }
        }
            .flow
            .cachedIn(viewmodelScope)

GridAdapter 中的notifyItems 函数:

suspend fun notifyItems(data: PagingData<Post>) {
        withContext(Default) { nestedAdapter.submitData(data) }
    }

我怀疑 concat 适配器为我的 GridAdapter 提供了无限的高度,它开始加载所有内容,就好像我将 recyclerView 放在了nestedScrollView 中

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

关于php – 如何使用zend paginate而不加载数据库的所有结果php添加数据到数据库没有反应的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android Listview滑动时不加载数据 停止时加载数据、c# – 如何使用Paginate方法、Cakephp如何在paginate使用unbind、ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动的相关信息,请在本站寻找。

本文标签: