first(); $oSiteMap = ModelSiteMap::where("code", $sSiteCode)->first(); $sSiteGroupCode = $oSiteMap->group_code; $sSiteName = $oSiteMap->name; // $sArticleConfig = ModelArticleConfig::where("article_group_code", $oArticleSchema->group_code)->where("site_group_code", $sSiteGroupCode)->first()?->config; // $this->aArticleConfig = json_decode($sArticleConfig, true); $oInstance = new self(); $oInstance->sArticleCode = $sArticleCode; $oInstance->sSiteCode = $sSiteCode; $oInstance->oArticle = $oArticleSchema; $oInstance->sSiteGroupCode = $oSiteMap->group_code; $oInstance->sSiteName = $oSiteMap->name; $oInstance->sSiteUrl = $oSiteMap->url; // $oInstance->sArticleConfig = $sArticleConfig; return $oInstance; } public function build() { $sMethod = "build_article__".$this->sSiteGroupCode; if (method_exists($this, $sMethod)) { $oArticleFlow = $this->$sMethod(); } else { return Flow::start("build")->fail("没有".$sMethod."的对应处理"); } return $oArticleFlow; } // 废弃,改直接推了 public function api_buildArticle() { $oFlow = Flow::start("api_buildArticle"); $sArg = file_get_contents('php://input'); $aArg = json_decode($sArg, true); $sArticleCode = $aArg[""] ?? ''; $sSiteCode = $aArg["sSiteCode"] ?? ''; // ffcp $sSiteName = $aArg["sSiteName"] ?? ''; // ttcp $sSiteUrl = $aArg["sSiteUrl"] ?? ''; // ttcp.com $isTest = $aArg["isTest"] ?? false; $sSiteGroupCode = ModelSiteMap::where("code", $sSiteCode)->first()?->group_code; $oArticleSchema = ModelArticleSchema::where("code", $sArticleCode)->first(); $aArg = [ "sArticleCode" => $sArticleCode, "sSiteGroupCode"=> $sSiteGroupCode, "sSiteCode" => $sSiteCode, "sSiteName" => $sSiteName, "sSiteUrl" => $sSiteUrl, "isTest" => $isTest, "aSchema" => json_decode($oArticleSchema->schema, true), ]; $sMethod = "build_article__".$sSiteGroupCode; if (method_exists($this, $sMethod)) { $oArticleFlow = $this->$sMethod($aArg); } else { $aResult = $oFlow->fail("没有".$sMethod."的对应处理")->getResult(); echo json_encode($aReturn); exit; } echo json_encode($oArticleFlow->getResult()); exit; } private function build_article__jccp_a() { $oFlow = Flow::start("build_article__cp_a"); $sArticleCode = $this->sArticleCode; $sSiteGroupCode = $this->sSiteGroupCode; $sSiteCode = $this->sSiteCode; $sSiteName = $this->sSiteName; $sSiteUrl = $this->sSiteUrl; $aSchema = json_decode($this->oArticle->schema, true); $isTest = $this->isTest; $aArticle["data"] = []; foreach ($aSchema as $k => $aArticleSchemaRow) { $sContent = $aArticleSchemaRow["content"]["base"] ?? "⚠️ 没有content?"; if ($aArticleSchemaRow['type'] == 'str') { if ($aArticleSchemaRow['name'] == "schema_name") { $sSchemaName = $aArticleSchemaRow["content"]["base"] ?? "⚠️ 提取name失败?"; $sSchemaName = trim($sSchemaName); $aArticle["name"] = $sSchemaName; $aArticle["title"] = $this->nameToTitleCS($sSchemaName); } $sContent = str_replace("{{sAuthorName}}", $sSiteName, $sContent); $sContent = str_replace("{{sIconText}}", "### ", $sContent); $aArticleSchemaRow["content"]["base"] = $sContent; $aArticle["data"][] = $aArticleSchemaRow; } else if ($aArticleSchemaRow['type'] == 'img') { $sContent = "![".$aArticleSchemaRow["content"]["base"]."](".$aArticleSchemaRow["content"]["img"]["base"].")"; $aArticleSchemaRow["content"]["base"] = $sContent; $aArticle["data"][] = $aArticleSchemaRow; } else { $aArticle["data"][] = $aArticleSchemaRow; } } ////// step 2 排序 //// 找排序option,没有就走默认 $sOrderKey = "article::schema::order::{$sSiteCode}::name"; $sOrderName = ModelOption::_hit($sOrderKey) ?? ''; $aOrderName = explode(',', $sOrderName); if (!$sOrderName) { TeleSlave::notify()->send("未设置option:".$sOrderKey."使用默认。"); $sDefaultOrderKey = "article::schema::order::default::type"; $sDefaultOrderType = ModelOption::_hit($sDefaultOrderKey) ?? ''; $aDefaultOrderType = explode(',', $sDefaultOrderType); if (!$sDefaultOrderType) { TeleSlave::fail()->send("未设置option:".$sOrderKey."使用默认。"); return $oFlow->fail("未设置option的default排序"); } } if ($sOrderName) { $aArticle["dataOrder"] = $this->articleSort($aArticle["data"], "name", $aOrderName); } else { $aArticle["dataOrder"] = $this->articleSort($aArticle["data"], "type", $aDefaultOrderType); } ////// step 3 文章化 $aArticleOrder = $aArticle["dataOrder"]; $sEnter = " "; $sArticle = ''; $sArticle .= $sEnter; $j = false; foreach ($aArticleOrder as $aArticleOrderRow) { $sContent = $aArticleOrderRow["content"]["base"] ?? "⚠️ content里的base没有?"; $sContent = trim($sContent); $sContent = str_replace("
", $sEnter, $sContent); $sTmpName = $aArticleOrderRow["name"] ?? ''; if ($sTmpName == "tixingnin") { $sArticle .= "::: tip {$sSiteName}提醒您,"; $sArticle .= $sContent; $sArticle .= $sEnter; $sArticle .= ":::"; $sArticle .= $sEnter; } else if ($sTmpName == "jichangzijie") { // $sArticle .= "::: note 机场自介"; // $sArticle .= $sContent; // $sArticle .= $sEnter; // $sArticle .= ":::"; // $sArticle .= $sEnter; $sArticle .= $sEnter; $sArticle .= $sEnter; $sArticle .= "## 机场自介"; $sArticle .= $sEnter; $sArticle .= $sEnter; $sArticle .= $sContent; } else if ($sTmpName == "lianjiedaohang") { $sContent = nl2br($sContent); $br = "
"; $sContent = preg_replace('/套餐.*'.$br.'/', '', $sContent); $sContent = preg_replace('/论坛.*\.html/', '', $sContent); // $sArticle .= "::: info 链接导航"; // $sArticle .= $this->clearBr($sContent); // $sArticle .= $sEnter; // $sArticle .= ":::"; // $sArticle .= $sEnter; $sArticle .= $sEnter; $sArticle .= $sEnter; $sArticle .= "## 链接导航"; $sArticle .= $sEnter; $sArticle .= $sEnter; $sArticle .= $this->clearBr($sContent); } else if ($sTmpName == "zhuguandianping") { $sArticle .= "::: important {$sSiteName}点评"; $sArticle .= $sContent; $sArticle .= $sEnter; $sArticle .= ":::"; $sArticle .= $sEnter; } else if ($sTmpName == "zhuguanpingfen") { $sContent = preg_replace('/(以上评分仅供参考)/', '', $sContent); $sContent = preg_replace('/(? $aArticle["title"] ?? "⚠️ 没有titile?", "content" => $sArticle, ]; return $oFlow->setDataA($aResultData)->done(); } private function clearBr($sStr) { $sEnter = " "; return str_replace("
", $sEnter, $sStr); } private function articleSort(array $data, string $field, array $priorityOrder): array { // 保留原始键名 uasort($data, function ($a, $b) use ($field, $priorityOrder) { $aValue = $a[$field] ?? null; $bValue = $b[$field] ?? null; $aIndex = array_search($aValue, $priorityOrder); $bIndex = array_search($bValue, $priorityOrder); // 如果找不到,排在最后 $aIndex = $aIndex === false ? PHP_INT_MAX : $aIndex; $bIndex = $bIndex === false ? PHP_INT_MAX : $bIndex; return $aIndex <=> $bIndex; }); return $data; } private function nameToTitleCS($sName) { $sTitle = trim($sName); $iCesuCount = ModelArticleSchema::where("name", $sName)->count(); if ($iCesuCount > 1) { $sWrap = ModelOption::_hit("ffq_tg_a-title_wrap"); if (!$sWrap) { return "未设置dog_option::ffq_tg-title_wrap"; } $sTitle = str_replace('{{name}}', $sName, $sWrap); $sTitle = str_replace('{{cesu_count}}', (string) $iCesuCount, $sTitle); } else { $sWrap = ModelOption::_hit("ffq_tg_a-title_wrap-first"); if (!$sWrap) { return "未设置dog_option::ffq_tg-title_wrap-first"; } $sTitle = str_replace('{{name}}', $sName, $sWrap); } return $sTitle; } }