phpwind8门户模板中获取推送数据部分的代码分析

[ 2011-02-13 16:47:14 | 作者: admin ]
字号: | |
p.s. 今天改了下门户的配置,导致了以前推送数据的丢失,很郁闷,就仔细查看了下pw8的代码,终于找到了原因,原来除了ID之外,title也不能做修改,不然就会丢失已添加的推送数据。

打开配置文件/html/portal/oindex/config.htm,有如下获取模块定义:
引用
<pw id="P4345oindex" />
<h4><span>美食</span></h4>
<pw id="U4803oindex" />
                   <ul class="cc o_home_imglistA">
                   <list num="18" action="user" cachetime="3" ifpushonly="0" title="美食达人" />
                   <loop>
                    <li><a href="{url}" target="_blank"><img src="{image,48,48}" alt="{title}" width="48" height="48" /></a>
                    <p title="{title}">{title,16}</p>
                    </li>
                    </loop>
                   </ul>
phpwind8读取推送数据的流程:

1、打开/data/tplcache/portal_oindex.htm,我们可以看到是通过pwTplGetData函数获取推送数据,pwTplGetData('U4803oindex','美食达人') 同时使用ID和title来指定数据源
引用
EOT;
$pwresult = pwTplGetData('U4803oindex','美食达人');
foreach($pwresult as $key=>$val){print <<<EOT
<li>
            <a href="$val[url]" target="_blank"><img src="$val[image]" alt="$val[title]" width="48" height="48" /></a>
            <p title="$val[title]">$val[title]</p>
</li>
EOT;
}print <<<EOT
2、打开require/common.php文件,可以发现pwTplGetData函数中使用area目录中的tplgetdata类的 getData函数获取推送数据,那就继续
引用
/**
  * 获取模板数据
  *
  * @param string $invokeName
  * @param string $title
  * @param int $loopId
  * @return string
  */
function pwTplGetData($invokeName, $title) {
  $GLOBALS['__pwTplGetData'] = true;
  $tplgetdata = L::loadClass('tplgetdata', 'area');
  return $tplgetdata->getData($invokeName, $title);
}
3、打开lib/area/tplgetdata.class.php文件,发现是通过_getDataFromPush函数实现,不过要继续打开 pushdataservice 类,继续
引用
  function getData($invokename,$title){
    if (!$invokename || !$title) return array();
    $temp = $this->_getDataFromCache($invokename,$title);

    if ($temp === false) {
      $temp = $this->_getDataFromBBS($invokename,$title);
      $this->index++;
    }
    return $temp;
  }


  function _getDataFromBBS($invokename,$title){
    $pw_invkoepiece = L::loadDB('invokepiece', 'area');
    $config  = $this->_getPieceConfigByInovkeNameAndTitle($invokename,$title);
    $data  = $this->_getDataFromPush($config);
    if (count($data)<$config['num'] && !$config['ifpushonly']) {
      $tempElement= $this->_getDataFromSystem($config);
      $data    = $this->_combinElementAndPush($tempElement,$data,$config['num']);
    }
    //如果是图片模块,没有数据的情况下调用系统默认图片
    if (!$data && $config['action']=='image') {
      global $imgpath;
      $data[]  = array('image'=>"$imgpath/nopic.gif");
    }
    
    $this->_updateCache($config,$data);
    return $data;
  }

  function _getDataFromPush($config){
    $pushdataService = L::loadClass('pushdataservice', 'area');
    
    $invokepieceid  = $config['id'];
    $num  = $config['num'];
    return $pushdataService->getEffectData($invokepieceid,$num);
  }
4、打开lib/area/pushdataservice.class.php文件,还要继续loadDB pushdata
引用
  function PW_PushDataService() {
    $this->_pushdataDao = L::loadDB('pushdata', 'area');
  }
  function getPushDataById($id) {
    return $this->_pushdataDao->get($id);
  }
5、打开lib/area/db/pushdatadb.class.php文件,看看get函数可以发现推送数据存放在 pw_pushdata 表中
引用
                    var $_tableName = "pw_pushdata";
  function get($id) {
    $temp = $this->_db->get_one("SELECT * FROM ".$this->_tableName." WHERE id=".pwEscape($id));
    return $this->_initData($temp);
  }
[最后修改由 admin, 于 2011-02-14 08:30:23]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=1636

这篇日志没有评论。

此日志不可发表评论。