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