EE管理静态内容:你会怎么做?

时间:2012-03-06 09:04:38

标签: php expressionengine

我在这个新项目中处于一个奇怪的地方:我有一个工作Javascript应用程序的客户端,他们想用CMS管理文本元素。本机JS环境将领先。

理想情况下,EE会管理内容,然后呈现内容目录中的静态文件。我不是一个PHP人,我对EE内容的体验一直是动态的,使用它的标签。现在我需要将内容预呈现到模板目录之外的文件或URL ...所以我可以使用一些指导。

这样的工作:

{exp:channel:entries
    channel="content"
    disable="categories|category_fields|member_data|pagination|trackbacks"
    status="Open"
    dynamic="no"
    limit="1"
}

<?php 
 $File = "./articles/YourFile.html"; 
 $Handle = fopen($File, 'w');
 $Data = "<h1>{title}</h1>\n<hr /><p>{base_body}</p>\n"; 
 fwrite($Handle, $Data); 
 print "Data Written"; 
 fclose($Handle); 
 ?>

{/exp:channel:entries}

但实际上我必须手动查看页面来呈现内容......有没有办法解决这个问题?我可以使用EE作为服务吗?关于如何呈现上述内容的示例将会很有帮助。我今天也在考虑服务......

2 个答案:

答案 0 :(得分:0)

关于EE的事情是系统内的内容不会转换为页面或网址。频道数据是动态的,并且经常与来自其他来源的数据混合在一起(全局变量,多个频道,低变量,列表继续)。

这样做的最好方法(我能想到)就是编写一个扩展名,在保存条目时触发文件写入系统。你已经在你的模板中运行了php的方式。

如果您选择这条路线,请检查entry_submission_end挂钩以便在分机中使用。诀窍是弄清楚你输出的是什么。由于频道数据不一定与模板相关,因此您需要选择模板来渲染频道数据,或使用页面模块允许用户在EE中选择模板。

这不是100%解决您问题的方法,但它应该指向您需要的方向。

答案 1 :(得分:0)

这是我之前为获取EE模板的静态文件而设置的。

我正常设置我的EE模板。然后设置一个PHP脚本,该脚本使用CURL调用模板URL并将内容写入静态文件。我设置了一个cron来按我需要的时间间隔运行文件。

PHP脚本文件和输出PHP或TXT文件(或任何您需要它命名的文件)位于同一目录中。确保输出文件具有777权限。

这就是你要放在php脚本文件中的内容。只需将$ site和$ filename变量更改为您要使用的内容:

set_time_limit(3450);

#GRAB  DATA
$site = "http://www.domain.com/template-group/template";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$site);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result=curl_exec ($ch);
curl_close ($ch);

#WRITE  DATA TO FILE
$filename = 'static-file-name.php';
if (is_writable($filename)) {
    if (!$handle = fopen($filename, 'w')) {
         echo "Cannot open file ($filename)";
         exit;
    }
    if (fwrite($handle, $result) === FALSE) {
        echo "Cannot write to file ($filename)";
        exit;
    }
    echo "Success, updated the accordion file";
    fclose($handle);
} else  echo "The file $filename is not writable";

您的EE模板如下所示:

{exp:channel:entries channel="content" disable="categories|category_fields|member_data|pagination|trackbacks" status="Open" dynamic="no" limit="1" }
      <h1>{title}</h1>
      <hr />
      <p>{base_body}</p>
{/exp:channel:entries}