diff --git a/application/default/controllers/HeiheController.php b/application/default/controllers/HeiheController.php
new file mode 100644
index 00000000..31bcc780
--- /dev/null
+++ b/application/default/controllers/HeiheController.php
@@ -0,0 +1,307 @@
+_helper->layout->setLayout('heihe');
+ }
+
+ function indexAction()
+ {
+ }
+
+ /*
+ * 数据浏览
+ */
+ function browseAction()
+ {
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $state=$this->db->query("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80'");
+ $row=$state->fetchAll();
+ $sum=$row[0]['count'];
+ $select=$this->db->select();
+ $select->from('metadata','*')->where("source=?",'e3ad32dc-f573-11e0-aa7b-b768cfd88d80')->order('title desc')->limitPage($page,$this->limit);
+ $this->view->metadata = $this->db->fetchAll($select);
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ $this->view->offset=$offset+1;
+ }
+
+ function thumbAction()
+ {
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $state=$this->db->query("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80'");
+ $row=$state->fetchAll();
+ $sum=$row[0]['count'];
+ $select=$this->db->select();
+ $select->from('metadata','*')->where("source=?",'e3ad32dc-f573-11e0-aa7b-b768cfd88d80')->order('title desc')->limitPage($page,$this->limit);
+ $this->view->metadata = $this->db->fetchAll($select);
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ }
+
+ function documentAction()
+ {
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $row=$this->db->fetchAll("select count(*) from reference where id in (select refid from mdref where uuid in (select uuid from metadata where source='0595169a-279e-4b95-819f-129d0ba4280d'))");
+ $sum=$row[0]['count'];
+ $sql="select * from reference where id in (select refid from mdref where uuid in (select uuid from metadata where source='0595169a-279e-4b95-819f-129d0ba4280d')) order by reference limit ? offset ?";
+ $this->view->refs=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit,"文献");
+ $this->view->offset=$offset+1;
+ }
+
+ function baseAction()
+ {
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $state=$this->db->query("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='冰川' or keyword='沙漠' or keyword='地貌' or keyword='植被' or keyword='草场' or keyword='沙漠化' or keyword='基础地理' or keyword='遥感影像' or keyword='水文地质' or keyword='社会经济' or keyword='人口' or keyword='SWAT' or keyword='NPP' or keyword='WRF' or keyword='辐射' or keyword='NEP'))");
+ $row=$state->fetchAll();
+ $sum=$row[0]['count'];
+ $sql="select uuid,title from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='冰川' or keyword='沙漠' or keyword='地貌' or keyword='植被' or keyword='草场' or keyword='沙漠化' or keyword='基础地理' or keyword='遥感影像' or keyword='水文地质' or keyword='社会经济' or keyword='人口' or keyword='SWAT' or keyword='NPP' or keyword='WRF' or keyword='辐射' or keyword='NEP')) order by timebegin,title limit ? offset ?";
+ $this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ $this->view->offset=$offset+1;
+ }
+
+ function geobaseAction()
+ {
+ $this->getmd('基础地理');
+ }
+
+ function coreAction()
+ {
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $state=$this->db->query("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='DEM' or keyword='土地利用' or keyword='土壤' or keyword='气象' or keyword='水文观测' or keyword='灌溉' or keyword='试验'))");
+ $row=$state->fetchAll();
+ $sum=$row[0]['count'];
+ $sql="select uuid,title from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='DEM' or keyword='土地利用' or keyword='土壤' or keyword='气象' or keyword='水文观测' or keyword='灌溉' or keyword='试验')) order by timebegin,title limit ? offset ?";
+ $this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ $this->view->offset=$offset+1;
+ }
+
+ function demAction()
+ {
+ $this->getmd('DEM');
+ }
+
+ function rsAction()
+ {
+ $this->getmd('遥感影像');
+ }
+
+ function waterAction()
+ {
+ $this->getmd('水文地质');
+ }
+
+ function modelAction()
+ {
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $state=$this->db->query("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='WRF' or keyword='NPP' or keyword='SWAT' or keyword='NEP' or keyword='辐射'))");
+ $row=$state->fetchAll();
+ $sum=$row[0]['count'];
+ $sql="select uuid,title from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='WRF' or keyword='NPP' or keyword='SWAT' or keyword='NEP' or keyword='辐射')) order by timebegin,title limit ? offset ?";
+ $this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ $this->view->offset=$offset+1;
+ }
+
+ function economicAction()
+ {
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $state=$this->db->query("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='人口' or keyword='社会经济'))");
+ $row=$state->fetchAll();
+ $sum=$row[0]['count'];
+ $sql="select uuid,title from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='人口' or keyword='社会经济')) order by timebegin,title limit ? offset ?";
+ $this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ $this->view->offset=$offset+1;
+ }
+
+ function landsurfaceAction()
+ {
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $state=$this->db->query("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='冰川' or keyword='沙漠' or keyword='地貌' or keyword='植被' or keyword='草场' or keyword='沙漠化'))");
+ $row=$state->fetchAll();
+ $sum=$row[0]['count'];
+ $sql="select uuid,title from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='theme' and (keyword='冰川' or keyword='沙漠' or keyword='地貌' or keyword='植被' or keyword='草场' or keyword='沙漠化')) order by timebegin,title limit ? offset ?";
+ $this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ $this->view->offset=$offset+1;
+ }
+
+ function landuseAction()
+ {
+ $this->getmd('土地利用','theme');
+ }
+
+ function soilAction()
+ {
+ $this->getmd('土壤','theme');
+ }
+
+ function meteoAction()
+ {
+ $this->getmd('气象','theme');
+ }
+
+ function hydroAction()
+ {
+ $this->getmd('水文观测','theme');
+ }
+ function irragationAction()
+ {
+ $this->getmd('灌溉','theme');
+ }
+
+ function obsAction()
+ {
+ $this->getmd('试验','theme');
+ }
+
+ function docAction()
+ {
+ $sql="select uuid,title from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' order by timebegin,title";
+ $this->view->metadata=$this->db->fetchAll($sql);
+ }
+
+ function tagAction()
+ {
+ $key = $this->_request->getParam('key');
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ if (!empty($key)) {
+ $this->view->codename=$key;
+ $sql=$this->db->quoteInto('select count(id) from keyword where keyword=?',$key);
+ $state=$this->db->query($sql);
+ $row=$state->fetchAll();
+ $sum=$row[0]['count'];
+ $sql="select uuid,title,id,description from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keyword='".$key."') order by timebegin,title limit ? offset ?";
+ $this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ } else {
+ $state=$this->db->query("select keyword.keyword,count(*) from keyword left join metadata on keyword.id=metadata.id where keyword.keytype='place' and metadata.source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' group by keyword.keyword order by count desc");
+ $k1=$state->fetchAll();
+ $state=$this->db->query("select k.keyword,count(k.keyword) from keyword k left join metadata m on k.id=m.id where k.keytype='theme' and m.source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' group by k.keyword order by k.keyword");
+ $k2=$state->fetchAll();
+ $state=$this->db->query("select k.keyword,count(k.keyword) from keyword k left join metadata m on k.id=m.id where k.keytype='discipline' and m.source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' group by k.keyword order by k.keyword");
+ $k3=$state->fetchAll();
+ $state=$this->db->query("select k.keyword,count(k.keyword) from keyword k left join metadata m on k.id=m.id where k.keytype='stratum' and m.source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' group by k.keyword order by k.keyword");
+ $k4=$state->fetchAll();
+ $state=$this->db->query("select keyword.keyword,count(*) from keyword left join metadata on keyword.id=metadata.id where keyword.keytype='temporal' and metadata.source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' group by keyword.keyword order by keyword.keyword");
+ $k5=$state->fetchAll();
+ $this->view->keywords=array('place'=>$k1,'theme'=>$k2,'discipline'=>$k3,'stratum'=>$k4,'temporal'=>$k5);
+ }
+ }
+
+ function searchAction()
+ {
+ $this->view->addHelperPath('helper','Zend_View_Helper_');
+ $form=new SearchForm();
+ $this->view->form=$form;
+ //$form->submit->setLabel('快速搜索');
+ $key=$this->_request->getParam('q');
+ if (!empty($key)) {
+ $search=new Search($key);
+ $where=$search->sql_expr(array("title","description"));
+ $page=@(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $row=$this->db->fetchAll("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and ".$where);
+ $sum=$row[0]['count'];
+ $sql="select uuid,title,id,description from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and ".$where." order by timebegin,title limit ? offset ?";
+ $this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ $this->view->key=$key;
+ $this->view->offset=$offset+1;
+ }
+ }
+
+ function timemapAction()
+ {
+ $sql="select id,uuid,west,south,north,east,title,timebegin,timeend from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and timebegin is not null";
+ $this->view->rows=$this->db->fetchAll($sql);
+ }
+
+ function timelineAction()
+ {
+ $fn="heihetime.xml";
+ $rows=$this->db->fetchAll("select ts_created from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' order by ts_created desc limit 1");
+ $last_update=strtotime($rows[0]['ts_created']);
+ if (!file_exists($fn) || (filemtime($fn)<$last_update))
+ {
+ $dateformat="M j Y";
+ $rows=$this->db->fetchAll("select id,uuid,description,title,timebegin,timeend from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and timebegin is not null order by timebegin,title");
+ $timexml='';
+ foreach($rows as $row) {
+ $timexml.='';
+ $desc_length=mb_strlen($row['description'],"UTF-8");
+ $desc=mb_substr($row['description'],0,($desc_length>300)?300:$desc_length,"UTF-8");
+ if ($desc_length>300) $desc.=" ...";
+ $timexml.=htmlspecialchars($desc);
+ $timexml.="\n";
+ }
+ $timexml.='';
+ $fp=fopen($fn,'w');
+ fwrite($fp,$timexml);
+ fclose($fp);
+ }
+ }
+
+ function categoryAction()
+ {
+ $code = (int)$this->_request->getParam('code');
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $this->view->category=$this->db->fetchAll("select c.code,name,name_zh,count(*) from category c left join metadata m on c.id=m.id,categorycode cc where c.code=cc.code and m.source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' group by c.code,cc.name,cc.name_zh");
+ if ($code>0 && $code<20) {
+ $row=$this->db->fetchAll("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from category where code=".$code.")");
+ $sum=$row[0]['count'];
+ $sql="select uuid,title,description,id from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select distinct id from category where code=".$code.") order by timebegin,title limit ? offset ?";
+ $this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ $this->view->offset=$offset+1;
+ $row=$this->db->fetchRow("select name,name_zh from categorycode where code=?",$code);
+ $this->view->codename=(empty($row['name_zh'])?$row['name']:$row['name_zh']);
+ } else {
+ //提供全部分类列表
+ }
+ }
+
+ private function getmd($keyword,$type='theme')
+ {
+ $page=(int)$this->_request->getParam('page');
+ if (empty($page)) $page=1;
+ $offset=$this->limit*($page-1);
+ $state=$this->db->query("select count(*) from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='".$type."' and keyword='".$keyword."')");
+ $row=$state->fetchAll();
+ $sum=$row[0]['count'];
+ //@todo: add order with title
+ $sql="select uuid,title from metadata where source='e3ad32dc-f573-11e0-aa7b-b768cfd88d80' and id in (select id from keyword where keytype='".$type."' and keyword='".$keyword."') order by timebegin,title limit ? offset ?";
+ $this->view->metadata=$this->db->fetchAll($sql,array($this->limit,$offset));
+ $this->view->page=new Pagination($sum,$page,$this->limit);
+ $this->view->offset=$offset+1;
+ }
+}
\ No newline at end of file
diff --git a/application/default/views/scripts/heihe/base.phtml b/application/default/views/scripts/heihe/base.phtml
new file mode 100644
index 00000000..7768364d
--- /dev/null
+++ b/application/default/views/scripts/heihe/base.phtml
@@ -0,0 +1,39 @@
+headTitle($this->config->title->site);
+$this->headTitle($this->config->title->data);
+$this->headTitle()->setSeparator(' - ');
+$this->headLink()->appendStylesheet('/css/water.css');
+$this->breadcrumb('首页');
+$this->breadcrumb(''.$this->config->title->data.'');
+$this->breadcrumb('数字黑河');
+$this->breadcrumb('基础数据');
+$this->breadcrumb()->setSeparator(' > ');
+?>
+
+
英文发表的成果依据以下规范注明: The data set is provided by Environmental and Ecological Science Data Center for West China,National Natural Science Foundation of China (http://westdc.westgis.ac.cn)
+
数据评论
+