从文本文件简单的PHP跳转列表

时间:2013-08-13 22:43:07

标签: php javascript html

我正在尝试从文本文件中创建一个简单的下拉列表...文本文件看起来像这样:

websitename1 http:// websitename1.com
websitename2 http:// websitename2.com
websitename3 http:// websitename3.com

我找不到一个脚本来读取文本文件并且只显示第1列,然后在选中时“跳转”到相关的第2列URL。我已经找到了很多关于如何使用PHP填充下拉列表的示例 - 但是如果选择它们,它们就会“跳转”(点击操作)。

1 个答案:

答案 0 :(得分:1)

修改08-20-13 - 添加空白选择选项和JS功能

为避免不必要的正则表达式方法,您应该使用.csv格式而不是.txt。它代表以逗号分隔的值,它允许您将网站名称放在空格中而不需要任何棘手的字符串操作。例如,您的csv可能如下所示:

News,
Website Name 1,http://websitename1.com
Website Name 2,http://websitename2.com
Website Name 3,http://websitename3.com
Events,
Website Name 4,http://websitename4.com
Website Name 5,http://websitename5.com
Website Name 6,http://websitename6.com

一个快速的小片段可能是这样的:

<select id="myselect" onchange="changePage( this.value );">

    <option value="" selected>Select Website...</option>

    <?php if( ( $file = fopen( 'websites.csv', "r" ) ) !== FALSE ): ?>

        <?php while( ( $row = fgetcsv( $file, 0, ',' ) ) !== FALSE ): ?>

            <option value="<?php echo $row[1]; ?>"><?php echo $row[0]; ?></option>

        <?php endwhile; ?>

    <?php endif; ?>

</select>

<script type="text/javascript">

    function changePage( url )
    {
        if( url !== '' )
        {
            window.open( url, '_blank' );
        }
    }
</script>


只是一个想法,200个项目的跳转列表可能会非常大。在任何情况下,使这种“跳跃”的主要代码行是:

window.open = ( url, '_blank' );

这会将下拉选项的值传递给窗口位置,并将用户带到所选页面。


警告词
如果由于某种原因需要在网站名称或网址中加上逗号,则需要将其括在csv中。幸运的是,fgetcsv允许您在默认情况下可选地用双引号括起字段。例如:

"Website, Name 4",http://websitename4.com

打印名称变量时会输出Website, Name 4,并且不会错误地认为Name 4是下一个字段。


备注:

  • 正如评论中提到的OP,文件扩展名不一定是.csv,我这样做是为了与正确的约定保持一致,但它必须遵循相同的文本格式。我给了我的文件几个不同的扩展名(.wmv,.php,.jpg),所有这些扩展看起来都是一样的。最好只调用文件它是什么,并且如下所述,.csv数据将用Excel打开。在新工作簿上使用“从文本文件导入数据”方法,您将能够确保Excel不会通过导入向导设置列数据类型来自动更正列并搞砸数据。

    < / LI>
  • 正如Fred提出的那样,在代码window.open( this.value, '_blank' )中,您可以将'_blank'更改为'_self'以在同一页面上加载新位置。
    Javascript open()参考: http://www.w3schools.com/jsref/met_win_open.asp

课程之类:

如果你想为你的下拉列表提供一些类,你也可以在.csv中为类名添加另一列,并改变它的回声方式。你的csv看起来像这样:

News,,jump-title
Website Name 1,http://websitename1.com,jump-link
Website Name 2,http://websitename2.com,jump-link
Website Name 3,http://websitename3.com,jump-link
Events,,jump-title
Website Name 4,http://websitename4.com,jump-link
Website Name 5,http://websitename5.com,jump-link
Website Name 6,http://websitename6.com,jump-link

现在我们有3个字段,Name,Url,Class

现在修改以下行

发件人:

<option value="<?php echo $row[1]; ?>"><?php echo $row[0]; ?></option>

<option value="<?php echo $row[1]; ?>" class="<?php echo $row[2]; ?>"><?php echo $row[0]; ?></option>

这样您就可以使用CSS类添加一些文本格式,这样您的用户就可以直观地区分链接和标题。