1

我正在尝试从文本文件中创建一个简单的下拉跳转列表...文本文件如下所示:

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

我找不到将读取文本文件并仅显示第 1 列,然后在选择时“跳转”到相关的第 2 列 URL 的脚本。我发现了很多关于如何使用 PHP 填充下拉列表的示例——但没有一个示例在选择后会进行“跳转”(点击操作)。

4

1 回答 1

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

打印 name 变量时会输出Website, Name 4,不会错误地认为Name 4是下一个字段结束。


笔记:

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

  • 正如 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 类添加一些文本格式,以便您的用户可以直观地分辨链接和标题之间的区别。

于 2013-08-13T23:12:27.257 回答