Submitted by on 2007, June 27, 12:23 AM
汤包购物网,使用开源php网店程序ecshop。
网址:
http://www.tb99.com.cn
ecshop,采用了smarty模板引擎,对可视化编辑支持并不好。
当然灵活度确实不错。建议想自己做皮肤但又怕弄不好的朋友试试用表格布局。
这样直观。用div+css固然很好,但是清风这厮对div布局不太熟。于是乎回归table。
用table就是好啊,呵呵,搞定了。
ps:模板并非鄙人设计,鄙人只是把它做成ecshop能用的skin
Tags: 模板, ecshop, skin
设计|设计相关 | 评论:0
| Trackbacks:0
| 阅读:1337
Submitted by on 2007, June 25, 7:04 PM
Tags: xajax
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1114
Submitted by on 2007, June 23, 6:52 PM
Submitted by on 2007, June 20, 11:13 PM
解释一下什么是递归。就是自己调用自己了。
php有自己的删除目录的函数rmdir(),但是不方便,只能删除空目录。自己写个方便些的。
| 代码: |
<?php
function deldir($dir) {
$dh=opendir($dir);//打开目录
while ($file=readdir($dh)) {
if($file!="." && $file!="..") {//避开“.”和“..”两个“目录”
$fullpath=$dir."/".$file;
if(!is_dir($fullpath)) {//如果是文件,杀掉
unlink($fullpath);
} else {//是文件夹,递归调用
deldir($fullpath);
}
}
}
closedir($dh);//关闭目录,此时目录已经是空的了
if(rmdir($dir)) {//杀掉已经为空的目录
return true;
} else {
return false;
}
}
?> |
成功返回true,失败返回false了。如果这个文件夹目录较多,并且层次较深,那么递归调用耗费的服务器资源也会比较的多的吧。
Tags: 递归
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1149
Submitted by on 2007, June 20, 10:03 PM
session_start()关于Cannot send session cache limiter - headers already sent错误解决方法汇集。
我在本机和windows的服务器上使用正常的php程序,在unix上到处是Notice,Warning。因为调用的图片名称大小写的问题,好些图片都是红叉叉,惨不忍睹啊。
有一处使用session_start()方法,报session_start() : Cannot send session cache limiter - headers already sent (output started at /xxx/xxx.php:1)这样的错误,说是已经有输出。我倒,犯这样的低级错误了?!用编辑器打,前面明明什么都没有。
于是乎请出GG大神,在网上搜索一番,给的解释是:UTF8文件的BOM(Byte order Mark)标志,在保存的时候会自动存入!原来是UTF-8的问题啊。
不管它是干嘛的,现在的目的就是把它去掉,网上总结的方法有下面三种:
引用
1、 在Linux下打开,去掉后再保存(清风这厮没环境,放弃)
2、 用写字板打开,把光标放到最前后回车,然后再敲删除,重新回到第一行,这样最前面的那个字符就会去掉(清风测试通过)
3、 使用UltraEdit编辑器,打开高级----配置----Unicode/utf-8 检测,把自动检测UTF-8文件,自动检测没有BOM的Unicode文件等前面的勾全去掉,然后你再打开文件,删除多余字符就OK了!(清风直接另存,格式为“UTF-8-无BOM”ok)
另:当使用“header("Location: yoururl.php");”出现“Cannot modify header information”,在确认没有人为的输出后,也就要考虑是否也是UTF-8的问题了。
Tags: session_start, Warning
网站|PHP学习 | 评论:0
| Trackbacks:0
| 阅读:1153
Submitted by on 2007, June 20, 7:28 AM
前阵子一直在看,div+css布局和一些SEO方面的资料。结合一些搜索引擎的文章,感觉对网页设计了解加深了.
不说web程式语言,只是说说输出到浏览器中的HTML代码.
1、采用DIV+CSS布局。要能基本通过W3C XHTML和W3C CSS检验
使用DIV+CSS,不光是显示速度比TABLE快,对于搜索引擎更是比TABLE要好多得,而且容易更新样式
2、网页中的keywords和description要写,但不能太多
keywords顾名思义,关键字,不要为搜索引擎写N多热门关键字,只写3-5个与页面内容相关的关键词
据说现在不少搜索引擎对于Meta的比重有所下降.
3、h1,h2
每个页面中h1最好只有一个,h2有3-5个
4、链接的title,图片的alt一定要写
这几点也只是优化中最基本的.最主要的还是要页面内容质量高,原创的多些.嗯,SEO是门学问.值得玩味。
Tags: div+css, 网页设计, seo技术
网页|前台相关 | 评论:0
| Trackbacks:0
| 阅读:1295
Submitted by on 2007, June 20, 1:20 AM
汤包久久购物网。思前想后,最终采用开源php程序ecshop。
但是他的模板制作没有参考文档。
好容易终于把首页做完。
Tags: 模板, ecshop, skin
设计|设计相关 | 评论:2
| Trackbacks:0
| 阅读:1620
Submitted by on 2007, June 17, 1:59 AM
meta 标签生成器,seo时有用。
[html]<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4...
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>清风这厮</title>
<script language="javascript">
function create(form) {
if (confirm("确认生成代码?")) {
form.story.value = "<!--meta 标签生成 By 清风这厮-->\n";
if (form.title.value != "") {
form.story.value +="<meta name=\"Title\" content=\"" +
form.title.value + "\">\n";
}
if (form.author.value != "") {
form.story.value +="<meta name=\"Author\" content=\"" +
form.author.value + "\">\n";
}
if (form.subject.value != "") {
form.story.value +="<meta name=\"Subject\" content=\"" +
form.subject.value + "\">\n";
}
if (form.descript.value != "") {
form.story.value +="<meta name=\"Description\" content=\"" +
form.descript.value + "\">\n";
}
if (form.keyword.value != "") {
form.story.value +="<meta name=\"Keywords\" content=\"" +
form.keyword.value + "\">\n";
}
if (form.gen.value != "") {
form.story.value +="<meta name=\"Generator\" content=\"" +
form.gen.value + "\">\n";
}
if (form.input7.value != "") {
form.story.value +="<meta name=\"Language\" content=\"" +
form.input7.value + "\">\n";
}
if (form.input8.value != "") {
form.story.value +="<meta name=\"Expires\" content=\"" +
form.input8.value + "\">\n";
}
if (form.input9.value != "") {
form.story.value +="<meta name=\"Abstract\" content=\"" +
form.input9.value + "\">\n";
}
if (form.input10.value != "") {
form.story.value +="<meta name=\"Copyright\" content=\"At" +
form.input10.value + "\">\n";
}
if (form.input11.value != "") {
form.story.value +="<meta name=\"Designer\" content=\"" +
form.input11.value + "\">\n";
}
if (form.input12.value != "") {
form.story.value +="<meta name=\"Publisher\" content=\"" +
form.input12.value + "\">\n";
}
if (form.input13.value != "") {
form.story.value +="<meta name=\"Revisit-After\" content=\"" +
form.input13.value + " \Days\">\n";
}
if (form.input14.value != "") {
form.story.value +="<meta name=\"Distribution\" content=\"" +
form.input14.options[form.input14.selectedIndex].value + "\">\n";
}
if (form.input15.value != "") {
form.story.value +="<meta name=\"Robots\" content=\"" +
form.input15.options[form.input15.selectedIndex].value + "\">\n";
}
}
}
//End -->
</script>
<style type="text/css">
<!--
body{font-family:Verdana, 宋体}
img{border:0}
a:link,a:hover,a:visited{color:#00c}
.c{margin-left:auto; margin-right:auto}
.t{text-align:center}
.f12{font-size:12px}
.f14{font-size:14px}
.f16{font-size:16px}
.left{float:left}
.right{float:right}
#menu{width:600px; font-family:Arial; margin-top:28px;}
#menu div{margin-left:100px}
#search{width:600px; font-family:Arial; margin-top:5px;}
#search div{margin-left:96px}
#url{font-family:Verdana;font-size:16px;height:21px;padding-top:3px;}
#sub{height:28px;width:5.6em;font-size:14px; margin-bottom:1px; margin-left:5px}
.cent{background:#ffd; border:1px solid #d8d8b2; padding-top:8px; padding-bottom:8px}
#show{width:498px; font-size:14px; margin-top:8px; padding-left:100px; display:none; font-family:Arial,宋体}
#whios{width:500px; font-size:14px; margin-top:8px; padding:20px 20px 20px 80px; font-family:Arial,宋体}
#so{width:498px; font-size:14px; margin-top:8px; padding-left:100px; display:none; font-family:Arial}
#so div{width:381px; height:18px; padding-top:3px;}
#so span{display:block; width:127px; float:left}
.clear {width:100%;clear:both;height:1px;line-height:1px;margin-top:-1px !important;margin-top:-3px;}
#content{width:738px; margin-top:6px; border:1px solid #999; padding:10px; background:#e5ecf9; font-size:13px}
.d1{width:180px}
.d2{width:500px}
-->
</style></head>
<body>
<div id="content" class="c" style="text-align:right">
<form>
Title:(主题)
<input name="title" type="text" onFocus="this.select()" value="如:Meta 标签生成器" size="50" /><br />
Author:(作者)
<input name="author" type="text" onFocus="this.select()" value="如:laos"blgo" size="50" />
<br />
Subject:(主题)
<input name="subject" type="text" onFocus="this.select()" value="如:Meta 标签生成器" size="50" /><br />
Description:(描述)
<input name="descript" type="text" onFocus="this.select()" value="如:在线生成META标签的工具" size="50" /><br />
Keywords:(关键字)
<input name="keyword" type="text" onFocus="this.select()" value="如:Meta 标签生成器;工具" size="50" /><br />
Generator:(编辑器)
<input name="gen" type="text" onFocus="this.select()" value="如:Meta 标签生成器" size="50" /><br />
Language:(语言)
<input name="input7" type="text" onFocus="this.select()" value="如:zh-CN" size="50" /><br />
Expires:(期限)
<input name="input8" type="text" onFocus="this.select()" value="如:Wed, 27 Sep 2007 08:21:57 GMT" size="50" />
<br />
Abstract:(摘要)
<input name="input9" type="text" onFocus="this.select()" value="如:Meta 标签生成器" size="50" /><br />
Copyright:(版权)
<input name="input10" type="text" onFocus="this.select()" value="如:清风这厮" size="50" />
<br />
Designer:(设计者)
<input name="input11" type="text" onFocus="this.select()" value="如:清风这厮" size="50" />
<br />
Publisher:(出版者)
<input name="input12" type="text" onFocus="this.select()" value="如:清风这厮" size="50" />
<br />
Revisit-After:(重访)
<input name="input13" type="text" onFocus="this.select()" value="请在此输入标题,如:Meta 标签生成器" size="50" /><br />
Distribution:(分配)
<select name="input14" size="1">
<option value="" selected="selected">Select One</option>
<option value="Global">1. Global</option>
<option value="Local">2. Local</option>
<option value="IU">3. Intern Use</option>
</select><br />
Robots:(机器人向导)
<select name="input15" size="1">
<option value="" selected="selected">Select One</option>
<option value="All">1. All</option>
<option value="None">2. None</option>
<option value="Index">3. Index</option>
<option value="No Index">4. No Index</option>
<option value="Follow">5. Follow</option>
<option value="No Follow">6. No Follow</option>
</select><br />
<input type="button" value="生成 META 标签" onClick="create(this.form)" name="button" />
<input type="reset" value="清除" name="reset">
<input onclick="story.select();document.execCommand("Copy")" type="button" name="Submit" value="复制" />
<textarea WRAP name="story" rows="12" cols="80">
</textarea>
</form>
</div>
</body>
</html>[/html]
Tags: JS, meta
网页|前台相关 | 评论:0
| Trackbacks:0
| 阅读:1408
Submitted by on 2007, June 14, 12:51 AM
最近在看侯捷的《 Word 排版艺术》,在被他的文笔所吸引的同时,也感叹于排版中的学问。正好今天,看到了 Mark Boulton 写的一篇日志《 Semantic Typography: Bridging the XHTML gap 》,所以想介绍给大家。
本文主要讲的就是如何在排版中遵循语义的原则,任何道理如果去“干讲”都显得枯燥晦涩,所以,我们就直入主题,用他举的例子来给大家阐述一下:
如果你有一个客户,他是一个房产代理,你要为他做一个网站。站点中的大部分内容都是房产信息。现在,他交给了你一个文档(很可能就是一个 word 文件),里面都是些房产的具体信息,他让你用此来做这个网站,下面的这个,就是房产的具体信息:

正如你看到的,这是一个很“朴素”的文档,我们要做的第一项任务,是建立它的概念结构(Conceptual Structure),它的语义元素,以此,我们才能确定他的排版结构:

这步完成以后,让我们暂时忘记怎么去设计它的问题吧,我们先用对应的 XHTML 标签来标记上面的这些元素:

在保留了概念结构的同时,我们也拥有了 XHTML 结构(语义化的标记)。现在我们可以专注与排版了,使他去遵循概念结构(与此同时,我们也就遵循了 XHTML 的结构)。

完~
这种设计过程最大的好处就是,不再被代码所烦扰,而且它很“健康”。
Tags: XHTML, 网页排版
网页|前台相关 | 评论:0
| Trackbacks:0
| 阅读:1175
Submitted by on 2007, June 13, 11:10 PM
FCKeditor 是一个十分强大的网页文本编辑器,它支持多种脚本编程语言和支持多国语言。
官方网站
http://www.FCKeditor.net/
这里是关于php的配置方法,其他语言的配置方法是和它一样的。
假设网站的目录为:
\www
\index.php
\inc
\FCKeditor
一:调用FCKeditor的两种方法
1:通过创建实例
在这里只写调用它的代码了,网站的其他代码当然由你自己写了,把下面的代码加在应该加的地方。
| 代码: |
<?php
include_once("FCKeditor/fckeditor.php"); //引用FCKeditor.php这个文件
$FCKeditor=new FCKeditor("myinfo"); //创建FCKeditor对象的实例
$FCKeditor->BasePath="FCKeditor/"; //FCKeditor所在的位置,这里它的位置就是"FCKeditor/";
$FCkeditor->ToolbarSet="Default"; //工具按钮设置
$FCKeditor->Width="100%"; //设置它的宽度
$FCKeditor->Height="300px"; //设置它的高度
$FCkeditor->Create();
?>
|
2:通过iframe调用创建
在你认为该加的地方加上
| 代码: |
<INPUT id=content style="DISPLAY: none" type=hidden name="myinfo">
<INPUT id=content___Config style="DISPLAY: none" type=hidden>
<IFRAME id=content___Frame src="FCKeditor/editor/fckeditor.html?InstanceName=myinfo&Toolbar=Default" frameBorder=0 width=100% scrolling=no height=300>
</IFRAME>
|
对上述两种方法的说明:
在上述两种方法中,你都看到了字符串"myinfo",你可能不知道是什么意思,现在我给你解释一下
如果你要将文本编辑器中的内容在另外一个页面显示或者要将在它保存在数据库,你可以用
$_POST["myinfo"]或者用$_GET["myinfo"]来获取文本编辑器中的内容,具体是用post还是用get那要看你用的是什么传递方法了
当然你也可以把myinfo改成你想要用的,如"content".
如果你还不知道什么是ajax,那么这一段话你就不用看了。
当你用ajax的来获得内容的时候是不是发现得不到内容,如:
<script>alert(document.form.content.value)</script>你会发现谈出的窗口没内容
那么我们可以通过下面的代码来获得它的内容:
function getContentValue()
{
var oEditor = FCKeditorAPI.GetInstance("content") ;
var acontent=oEditor.GetXHTML();
return acontent;
}
二:配置一些文件
1:fckconfig.js的配置
(1).工具按钮设置
查找FCKConfig.ToolbarSets["Default"],这里有很多按钮,下面我们将对他们详细介绍
EditSource 显示HTML源代码 StrikeThrough 删除线
Save 保存 Subscript 下标
NewPage 新建空白页面 Superscript 上标
Preview 预览 JustifyLeft 左对齐
Cut 剪切 JustifyCenter 居中对齐
Copy 复制 JustifyRight 右对齐
Paste 粘贴 JustifyFull 两端对齐
PasteText 纯文本粘贴 InsertOrderedList 自动编号
PasteWord 来自Word的粘贴 InsertUnorderedList 项目符号
Print 打印 Outdent 减少缩进
SpellCheck 拼写检查 Indent 增加缩进
Find 查找 ShowTableBorders 显示表格线
Replace 替换 ShowDetails 显示明细
Undo 撤销 Form 添加Form动作
Redo 还原 Checkbox 复选框
SelectAll 全选 Radio 单选按钮
RemoveFormat 去除格式 Input 单行文本框
Link 插入/编辑 链接 Textarea 滚动文本框
RemoveLink 去除连接 Select 下拉菜单
Anchor 锚点 Button 按钮
Image 插入/编辑 图片 ImageButton 图片按钮
Table 插入/编辑 表格 Hidden 隐藏
Rule 插入水平线 Zoom 显示比例
SpecialChar 插入特殊字符 FontStyleAdv 系统字体
UniversalKey 软键盘 FontStyle 字体样式
Smiley 插入表情符号 FontFormat 字体格式
About 关于 Font 字体
Bold 粗体 FontSize 字体大小
Italic 斜体 TextColor 文字颜色
Underline 下划线 BGColor 背景色
这个默认的是包含了所有的工具按钮,不过到我们具体要用的时候,有的按钮并不需要,而且还影响速度。那么我们可以将我们不需要的按钮给删了。下面是我的配置,给大家一个参考,当然你可以根据你的喜好。
FCKconfig.ToolbarSets["Default"] = [
["EditSource","Save","NewPage","Preview","-","Cut","Copy","Paste","PasteText","-","Find","Replace","-","Undo","Redo","-","SelectAll","-","Link","RemoveLink","-","Image","Table","Rule","SpecialChar","Smiley"] ,
["Bold","Italic","Underline","-","JustifyLeft","JustifyCenter","JustifyRight","-","InsertOrderedList","InsertUnorderedList","-","Form","Checkbox","Radio","Input","Textarea","Select","Button","-","FontStyleAdv","TextColor"] ] ;
如果在前台给用户回复一写帖子的话,还是没必要要上面的,这时你可以在加一个:
FCKConfig.ToolbarSets["Basic"] = [
["Bold","Italic","-","OrderedList","UnorderedList","-","Link","Unlink","-","About"]
] ;
这样的话,你在前台调用的时候就要用$FCKeditor->ToolbarSet="Basic",不能在为"Default"了。
(2):语言的配置
查找FCKConfig.DefaultLanguage将它设置为"zh-cn".
(3):脚本语言的设置
查找var _FileBrowserLanguage和var _QuickUploadLanguage将他们设置为"php", 默认是"asp",如果这里不设置的话,图片将不能上传,这点很重要。当时我在用FCKeditor由于没配置这个,不能上传图片,而我同寝室的用asp能上传图片,让我烦恼了好多天,最后终于找到是这个原因。
2:图片上传的配置
打开文件FCKeditor/editor/filemanager/browser/default/connectors/php/config.php
查找$Config["Enabled"],将它设置为"true"
查找$Config["UserFilesPath"],将它设置图片的目录,这个目录是相对于主目录的 //例如:我写了一个blog,就可以设置为/blog/upload/
打开文件FCKeditor/editor/filemanager/upload/php/config.php
查找$Config["Enabled"],将它设置为"true"
查找$Config["UseFileType"],将它设置上传文件的目录,最好与上面的图片目录相同
好了,现在所有的配置都已经完成了,现在你要做的只是删除一些不必要的文件了
只要包含"_"的目录名和文件名都可以删除,当然你用的是php,其他语言的一些目录也都可以删除,这样就减小了文件的大小.
网站|PHP学习 | 评论:1
| Trackbacks:0
| 阅读:1813