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;
}
}