From fb68d793d79b1566628d755faa0708b6e672fb21 Mon Sep 17 00:00:00 2001 From: wangjinlei <751475802@qq.com> Date: Mon, 26 Aug 2024 10:05:24 +0800 Subject: [PATCH] 1 --- application/api/controller/Main.php | 2 +- application/common.php | 6 + application/master/controller/Datebase.php | 153 +++++++++++++++++++++ 3 files changed, 160 insertions(+), 1 deletion(-) diff --git a/application/api/controller/Main.php b/application/api/controller/Main.php index 2fd8d80..000c33e 100644 --- a/application/api/controller/Main.php +++ b/application/api/controller/Main.php @@ -369,7 +369,7 @@ class Main extends Controller { ->select(); $list = array_merge($tmr_list,$bmec_list,$mdm_list); - $re['list'] = $list; + $re['list'] = strongArticleList($list); return jsonSuccess($re); } diff --git a/application/common.php b/application/common.php index 0a90686..ec0b906 100644 --- a/application/common.php +++ b/application/common.php @@ -263,6 +263,12 @@ function strongArticleList($list){ $list[$k]['authortitle'] = getAuthor($v); $list[$k]["mains"] = null; $list[$k]['has_html'] = hasHtml($v['article_id']); + $list[$k]['stage_year'] = $stage_info['stage_year']; + $list[$k]['journal_short'] = $journal_info["jabbr"]; + $list[$k]['journal_title'] = $journal_info['title']; + $list[$k]['stage_vol'] = $stage_info['stage_vol']; + $list[$k]['stage_no'] = $stage_info['stage_no']; + $list[$k]['usx'] = $journal_info['usx']; } //标题斜体 diff --git a/application/master/controller/Datebase.php b/application/master/controller/Datebase.php index bd04e36..0212551 100644 --- a/application/master/controller/Datebase.php +++ b/application/master/controller/Datebase.php @@ -33,6 +33,9 @@ class Datebase extends Controller protected $db_obj = ''; protected $db_data_obj = ''; + protected $article_author_to_organ_obj = ""; + + protected $article_organ_obj = ''; protected $ts_base_url = "http://ts.tmrjournals.cn/"; public function __construct(\think\Request $request = null) @@ -54,6 +57,8 @@ class Datebase extends Controller $this->journal_paper_art_obj = Db::name('journal_paper_art'); $this->db_obj = Db::name('db'); $this->db_data_obj = Db::name('db_data'); + $this->article_author_to_organ_obj = Db::name('article_author_to_organ'); + $this->article_organ_obj = Db::name("article_organ"); } /** @@ -229,6 +234,154 @@ class Datebase extends Controller return jsonSuccess($re); } + + public function xmlCreateForArticle(){ + + $article_id = 3034; + + $article_info = $this->article_obj->where("article_id",$article_id)->find(); + $journal_info = $this->journal_obj->where("journal_id",$article_info['journal_id'])->find(); + $xml = new \SimpleXMLElement('
'); + // 设置命名空间 + $xml->addAttribute('xmlns:mml', 'http://www.w3.org/1998/Math/MathML'); + $xml->addAttribute('xmlns:xlink', 'http://www.w3.org/1999/xlink'); + $xml->addAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); + $xml->addAttribute('article-type', $article_info['type']); + +// 创建 元素 + $front = $xml->addChild('front'); + +// 创建 元素并添加子元素 + $journalMeta = $front->addChild('journal-meta'); + $journalMeta->addChild('journal-id', $journal_info['usx']); + $journalTitleGroup = $journalMeta->addChild('journal-title-group'); + $journalTitleGroup->addChild('journal-title', $journal_info['title'])->addAttribute('xml:lang', 'en'); +// $journalTitleGroup->addChild('journal-title', '刊名')->addAttribute('xml:lang', 'zh-Hans'); + $journalTitleGroup->addChild('abbrev-journal-title', $journal_info['jabbr']); + $journalMeta->addChild('issn', $journal_info['issn'])->addAttribute('pub-type', 'ppub'); +// $journalMeta->addChild('issn', 'CN')->addAttribute('pub-type', 'cn'); + $publisher = $journalMeta->addChild('publisher'); + $publisher->addChild('publisher-name', 'TMR publisher group'); + $publisher->addChild('publisher-name', 'TMR')->addAttribute('specific-use', 'short-name'); + +// 创建 元素并添加子元素 + $articleMeta = $front->addChild('article-meta'); + $articleMeta->addChild('article-id', $article_info['article_id']); + $articleMeta->addChild('article-id', $article_info['doi'])->addAttribute('pub-id-type', 'doi'); + + $articleCategories = $articleMeta->addChild('article-categories'); + $subjGroup = $articleCategories->addChild('subj-group'); +// $subjGroup->addChild('subject', '学科栏目信息')->addAttribute('xml:lang', 'zh-Hans'); + $subjGroup->addChild('subject', 'subject')->addAttribute('xml:lang', 'en'); + + $articleTypeGroup = $articleCategories->addChild('subj-group'); + $articleTypeGroup->addAttribute('id', 'article-type'); +// $articleTypeGroup->addChild('subject', '文章类型')->addAttribute('xml:lang', 'zh-Hans'); + $articleTypeGroup->addChild('subject', $article_info['type'])->addAttribute('xml:lang', 'en'); + +// 添加 元素 + $titleGroup = $articleMeta->addChild('title-group'); + $titleGroup->addChild('article-title', $article_info['title'])->addAttribute('xml:lang', 'en'); + $transTitleGroup = $titleGroup->addChild('trans-title-group'); + $transTitleGroup->addAttribute('xml:lang', 'en'); + $transTitleGroup->addChild('trans-title', $article_info['title'])->addAttribute('xml:lang', 'en'); + +// 添加 和相关的 元素 + $contribGroup = $articleMeta->addChild('contrib-group'); + $authors = $this->article_author_obj->where("article_id",$article_id)->where("state",0)->select(); + $organs = $this->article_organ_obj->where("article_id",$article_id)->select(); + $os = []; + foreach ($organs as $k=>$v){ + $os[$v['article_organ_id']] = $k+1; + } + foreach ($authors as $v){ + $contrib_cache = $contribGroup->addChild('contrib'); + $contrib_cache->addAttribute('contrib-type', 'author'); + $nameAlternatives_cache = $contrib_cache->addChild('name-alternatives'); + $name_cache = $nameAlternatives_cache->addChild("name"); + $name_cache->addAttribute("name-style","western"); + $name_cache->addAttribute("specific-use","en"); + $name_cache->addAttribute("xml:lang","en"); + $name_cache->addChild("surname",$v['first_name']); + $name_cache->addChild("given-names",$v['last_name']); + $l_c = $this->article_author_to_organ_obj->where("article_id",$article_id)->where("article_author_id",$v['article_author_id'])->where("state",0)->select(); + foreach ($l_c as $val){ + $xref_cache = $contrib_cache->addChild("xref"); + $xref_cache->addAttribute("rid","aff".$os[$val['article_organ_id']]); + $xref_cache->addAttribute("xml:base","aff"); + $xref_cache->addAttribute("xml:lang","en"); + $xref_cache->addChild("sup",$os[$val['article_organ_id']]); + } + } + foreach ($organs as $v){ + $affAl_cache = $contribGroup->addChild("aff-alternatives"); + $affAl_cache->addAttribute("id","aff".$os[$v['article_organ_id']]); + $aff_cache = $affAl_cache->addChild("aff"); + $aff_cache->addAttribute("xml:lang","en"); + $aff_cache->addChild("label",$os[$v['article_organ_id']]." ".$v['organ_name']); + $ins_cache = $aff_cache->addChild("institution ",$v['organ_name']); + $ins_cache->addAttribute("content-type",'orgname'); + } + + //pub-date + $stage_info = $this->journal_stage_obj->where("journal_stage_id",$article_info['journal_stage_id'])->find(); + $pubDate = $articleMeta->addChild("pub_date"); + $pub_date_list = explode(" ",$article_info['pub_date']); + $pubDate->addChild("year",$pub_date_list[2]); + $pubDate->addChild("month",$pub_date_list[1]); + $vol = $articleMeta->addChild("volume",$stage_info['stage_vol']); + $vol->addAttribute("content-type","Vol."); + $issue = $articleMeta->addChild("issue",$article_info['npp']); + $issue->addAttribute("content-type","No."); + + //abstract +// $abstract = $articleMeta->addChild("abstract "); +// $abstract->addAttribute("xml:lang","en"); +// $abs_p = $abstract->addChild("p",$article_info['abstract']); +// $abs_p->addAttribute("indent","0mm"); + + //keywords + $kwd = $articleMeta->addChild("kwd-group"); + $kwd->addAttribute("kwd-group-type","inspec"); + $kwd->addAttribute("xml:lang","en"); + $keywords_list = explode(";",$article_info['keywords']); + foreach ($keywords_list as $v){ + if($v==""){ + continue; + } + $kwd->addChild("kwd",trim($v)); + + } + + + //notes + $notes = $front->addChild("notes"); + $notes_p = $notes->addChild("p"); + $notes_p->addAttribute("ontent-type","qrcode"); + $notes_p->addAttribute("xml:specific-use","website"); + $url = "https://www.tmrjournals.com/article.html?J_num=".$journal_info['journal_id']."&a_id=".$article_info['article_id']; + $notes_p_uri = $notes_p->addChild("uri",htmlspecialchars($url)); + $notes_p_uri->addAttribute("xlink:href",htmlspecialchars($url)); + $notes_p1 = $notes->addChild("p"); + $notes_p1->addAttribute("xml:specific-use","crossmark"); + $notes_p1_uri = $notes_p1->addChild("uri"); + $notes_p1_uri->addAttribute("xlink:href","http://crossmark.crossref.org/dialog/?doi=".$article_info['doi']); + +// $name = $contrib->addChild('name'); +// $name->addAttribute('name-style', 'eastern'); +// $name->addAttribute('specific-use', 'zh-Hans'); +// $name->addAttribute('xml:lang', 'zh-Hans'); +// $name->addChild('surname', '姓'); +// $name->addChild('given-names', '名'); + +// 示例只展示部分内容,完整生成对应的 XML 需要按文件结构依次添加其他元素 + +// 将生成的 XML 输出或保存 +// echo $xml->asXML(); // 或者保存到文件,例如 $xml->asXML('output.xml'); + $xml->asXML('d:/output.xml'); + + } + private function push_sftp($stage) { $stage_info = $this->journal_stage_obj->where('journal_stage_id',$stage)->find();