SEO基础

SEO基础

Products

当前位置:首页 > SEO基础 >

如何调整WordPress网站以生成更小尺寸的缩略图?

96SEO 2026-02-20 05:38 14


已经习惯了用Validator控件来验证我们在表单的输入#xff0c;并通过ValidationSummary来输出我们为Validator控件设置的Error

如何调整WordPress网站以生成更小尺寸的缩略图?

message。

不知道大家有没想过进一步改进一下我们的Validation来改…一

我想对于ASP.NET的Validator控件已经熟悉的不能再熟悉了。

我们

已经习惯了用Validator控件来验证我们在表单的输入并通过ValidationSummary来输出我们为Validator控件设置的Error

message。

不知道大家有没想过进一步改进一下我们的Validation来改善我们的User

Experience。

比如在ValidationSummary输出一个Link连接到对应的控件而不是显示单纯的Error

比如在上图中是一个典型的Login的Page。

我们有两个必填的字段User

name和Password。

为此我定义两个RequiredFieldValidator。

他们的Error

message分别为”User

Message被显示在ValidationSummary上面。

不过和传统的Error

message不同显示在ValidationSummary上的实际上是两个链接Click对应的Error

message光标会设置到对应的Textbox上。

比如上图所示Click

”User

现在我们来简单叙述上面的效果是如果实现的在开始之前我想说的是方法非常简单—或许你已经猜到了

Page

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

html

a:hover{}{text-decoration:underline}

style

document.getElementById(control);

script

shot之后再看看上面的Html结构清晰得一目了然。

所以我就不再进一步解释了。

在这里我只需要提提定义在aspx的一段javascript

functionsetFocus。

通过它把focus设置到指定的控件。

script

document.getElementById(control);

script

System.Web.UI.WebControls.WebParts;

using

this.MakeClickableErrorMessage();

private

this.FindControl(validator.ControlToValidate).ClientID;

string

/javascript:setFocus({0});/{1}/a,

clientID,

ctmUserName_ServerValidate(object

source,

Code也简单得一塌糊涂除了MakeClickableErrorMessage这个Method其他的都不值一提。

private

this.FindControl(validator.ControlToValidate).ClientID;

string

/javascript:setFocus({0});/{1}/a,

clientID,

显示在ValidationSummary中原本简单的literal

error

message就是通过上面的这个MakeClickableErrorMessage转变成hyperlink的。

在上面的code中我遍历page中的每个Validator

control有对应ControlToValidate对于一个Validator

control来说ControlToValidate并非一个必需的property如果没有指定该property其值为空字符串直接进入下一个循环。

然后我把原来只是弹出的文本转变成一个a/a然后再将其重新赋值给对应的Validator

比如对于rqfUserName

RequiredFieldValidator来说原来的Error

name

上面只是一个简单的小窍门我们以这个Sample为例来进一步介绍ASP.NET如何尽心Validation的。

为了简单起见在这里我没法讨论所有的Validator

control。

只介绍RequiredFieldValidator和CustomValidator这两种Validator

1Client

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd

html

xmlnshttp://www.w3.org/1999/xhtml

head

a:hover{}{text-decoration:underline}

/style

document.getElementById(control);

/script

value/wEPDwUKMTg3OTM1NTM2MA9kFgICAw9kFgYCBQ8PFgIeDEVycm9yTWVzc2FnZQVKPGEgaHJlZj0gImphdmFzY3JpcHQ6c2V0Rm9jdXMoJ3R4dFVzZXJOYW1lJyk7Ij5Vc2VyIG5hbWUgaXMgbWFuZGF0b3J5ITwvYT5kZAIHDw8WAh8ABVI8YSBocmVmPSAiamF2YXNjcmlwdDpzZXRGb2N1cygndHh0VXNlck5hbWUnKTsiPlN1Y2ggYSB1c2VyIGhhcyBub3QgcmVnaXN0ZXJlZCE8L2EZGQCCw8PFgIfAAVJPGEgaHJlZj0gImphdmFzY3JpcHQ6c2V0Rm9jdXMoJ3R4dFBhc3N3b3JkJyk7Ij5QYXNzd29yZCBpcyBtYW5kYXRvcnkhPC9hPmRkZLFuksmAaQN5sw8KrkFk3GqgSn

/div

src/Artech.ClickableValidationSummary/WebResource.axd?d07ZNXubMk-rxUjn0jMywXg2amp;t632969324944906146

script

src/Artech.ClickableValidationSummary/WebResource.axd?d5q3WmDnqxzNvEfUc_QbMe5qdQO1LUQ4P7mwuv6CrIMk1amp;t632969324944906146

script

stylecolor:Red;display:none;/span

span

stylecolor:Red;display:none;/span

/td

stylecolor:Red;display:none;/span

/td

onclickjavascript:WebForm_DoPostBackWithOptions(new

WebForm_PostBackOptions(quot;btnSignInquot;,

quot;quot;,

Array(document.getElementById(vldLogin));

var

Array(document.getElementById(rqfUserName),

document.getElementById(ctmUserName),

document.getElementById(rqfPassword));

/script

document.getElementById(rqfUserName);

txtUserName;

/javascript:setFocus(/txtUserName/);/User

name

RequiredFieldValidatorEvaluateIsValid;

var

document.getElementById(ctmUserName);

txtUserName;

/javascript:setFocus(/txtUserName/);/Such

user

CustomValidatorEvaluateIsValid;

var

document.getElementById(rqfPassword);

txtPassword;

/javascript:setFocus(/txtPassword/);/Password

mandatory!/a;

RequiredFieldValidatorEvaluateIsValid;

/script

value/wEWBQL7uOMiAqXVsrMJArWptJELAsP3i5QHAv23gdwNI0m2v8hOJGGPTPLYqDLAkZE0nKU

/div

/Artech.ClickableValidationSummary/WebResource.axd?d07ZNXubMk-rxUjn0jMywXg2amp;t632969324944906146

type

/Artech.ClickableValidationSummary/WebResource.axd?d5q3WmDnqxzNvEfUc_QbMe5qdQO1LUQ4P7mwuv6CrIMk1amp;t632969324944906146

type

这两个JavaScript由ASP.NET生成。

尤其内容较多在这里先不列出他们的内容等下面真正要使用到其中定义的JavaScript

在列出来。

我们现在姑且称它们为JavaScript1和JavaScript2。

control定义了3个Client端的对象对象的名称和控件名称同名并设置相关的属性controltovalidateerrormessagedisplayevaluationfunction。

其中evaluationfunction为进行Validation的function的名称.

script

document.getElementById(rqfUserName);

txtUserName;

/javascript:setFocus(/txtUserName/);/User

name

RequiredFieldValidatorEvaluateIsValid;

var

document.getElementById(ctmUserName);

txtUserName;

/javascript:setFocus(/txtUserName/);/Such

user

CustomValidatorEvaluateIsValid;

var

document.getElementById(rqfPassword);

txtPassword;

/javascript:setFocus(/txtPassword/);/Password

mandatory!/a;

RequiredFieldValidatorEvaluateIsValid;

script

我们还发现通过Javascript定义了两个Array对象Page_ValidationSummaries和Page_Validators。

这两个Array用于保存Page中的所有的ValidationSummary和Validator

script

Array(document.getElementById(vldLogin));

var

Array(document.getElementById(rqfUserName),

document.getElementById(ctmUserName),

document.getElementById(rqfPassword));

script

javascript:WebForm_DoPostBackWithOptions(new

WebForm_PostBackOptions(quot;btnSignInquot;,

quot;quot;,

通过onclick事件我们可以看到一个命名为WebForm_DoPostBackWithOptions的javascript

function被调用该function接收一个称为WebForm_PostBackOptions类型的对象。

该类型被定一个在JavaScript1中还记得JavaScript1指的是什么吗

function

WebForm_PostBackOptions(eventTarget,

eventArgument,

validation是否进行Validation当前为true。

2.0的新特性当当前为””,因为我没有设置btnSignIn的ValidationGroup的property。

actionUrl表单被提交的Url就像asp中Form的action一样。

ASP.NET

1.x不提供cross-page的提交在2.0中提供了此功能当前为””,

我们再来看看WebForm_DoPostBackWithOptions像WebForm_PostBackOptions一样该function同样被定义在JavaScript1中。

function

WebForm_DoPostBackWithOptions(options)

var

Page_ClientValidate(options.validationGroup);

(validationResult)

(typeof(document.activeElement)

undefined)

__doPostBack(options.eventTarget,

在开始的时候调用Page_ClientValidate进行Client端的Validation。

在这里执行所有的Client端的Validation。

我们来着重分析上面的javascript看看具体的流程。

Page_ClientValidate被定义在Javascript2中。

function

Page_ClientValidate(validationGroup)

null;

ValidatorValidate(Page_Validators[i],

validationGroup,

ValidationSummaryOnSubmit(validationGroup);

Page_BlockSubmit

上面的code中首先通过Page_Validators判断是否Page中定义了Validator

control。

我们在预先定义了Page_Validators

Array还记得我们之前介绍的两个Array——Page_ValidationSummaries和Page_Validators吗。

虽有遍历所有的Validator

control并调用ValidatorValidate方法执行每个Validator

control的Client端的Validation。

我们进一步看看ValidatorValidate又是如何定义的ValidatorValidate定义在Javascript2中

function

(typeof(val.evaluationfunction)

function)

首先通过IsValidationGroupMatch判断Validator

control的ValidationGroup是否和触发Postaback的Control对应的ValidationGroup相互匹配。

因为只有在匹配的前提下才进行相关Validator

control的validation。

然后调用validator

function来进行validation。

通过前面的分析我们知道RequiredFieldValidator的evaluationfunction为RequiredFieldValidatorEvaluateIsValid而CustomValidator的evaluationfunction为CustomValidatorEvaluateIsValid。

我们来看看这两个function是如何定义的。

他们都定义在Javascript2中。

RequiredFieldValidatorEvaluateIsValid通过正则表达式验证是否填入了由意义的值。

function

RequiredFieldValidatorEvaluateIsValid(val)

return

(ValidatorTrim(ValidatorGetValue(val.controltovalidate))

ValidatorTrim(val.initialvalue))

function

ValidatorGetValueRecursive(control);

function

ValidatorGetValueRecursive(control)

string

ValidatorGetValueRecursive(control.childNodes[i]);

(val

s.match(/^/s*(/S(/s/S)*)/s*$/);

return

CustomValidatorEvaluateIsValid实际上就是调用我们为CustomValidator设置的ClientValidationFunction。

function

CustomValidatorEvaluateIsValid(val)

var

ValidatorGetValue(val.controltovalidate);

((typeof(val.validateemptytext)

string)

(typeof(val.clientvalidationfunction)

string)

eval(val.clientvalidationfunction

(val,

在ValidatorValidate中当我们通过调用各个Validator

control的evaluationfunction来进行Client端的验证后对于没有通过验证的Validator

control通过调用ValidatorSetFocus设置相应控件的焦点。

在这里就不在深入探讨了。

接着通过调用ValidatorUpdateDisplay来根据我们制定的Display和不同浏览器来设置Error

function

((navigator.userAgent.indexOf(Mac)

-1)

(navigator.userAgent.indexOf(MSIE)

-1))

实际上到现在为止所有的Validation工作已经完成。

我们来看看Error

message是如何显示的。

所以我们要看看ValidatorUpdateDisplay的定义了。

分析完ValidatorValidate我们在回到Page_ClientValidate上面。

现在我们接着分析一下的执行流程。

通过调用ValidatorValidate执行完各个Validator

control的验证后接着调用的是ValidatorUpdateIsValid()和ValidationSummaryOnSubmit(validationGroup)。

ValidatorUpdateIsValid通过遍历每个Validator

control来查看他们是否通过验证最终确定这个Page是否通过验证。

ValidationSummaryOnSubmit通过拼接字符串的形式在ValidationSummary显示对应的Error

function

AllValidatorsValid(Page_Validators);

function

ValidationSummaryOnSubmit(validationGroup)

(typeof(Page_ValidationSummaries)

undefined)

Page_ValidationSummaries.length;

sums)

Page_ValidationSummaries[sums];

none;

IsValidationGroupMatch(summary,

validationGroup))

typeof(Page_Validators[i].errormessage)

string)

Page_Validators[i].errormessage

post;

typeof(Page_Validators[i].errormessage)

string)

Page_Validators[i].errormessage;

lastValIndex)

Page_Validators[i].errormessage;

lastValIndex)

Page_Validators[i].errormessage

break;

前面我们花了很大的篇幅介绍了Client端的Validation通过介绍我们知道了Client端的validation和Error

message的显示均由Javascript来完成。

现在我们来简单看看Server

端__doPostBack被调用实现向Server端的Postback。

具体的Postback可以参考我的文章浅谈ASP.NET的Postback。

Validator

Contro

比如下面是一段CustomValidator的Validation。

protected

如果上面的Validation没有通过最终render在client段的将有下面一段Html。



SEO优化服务概述

作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。

百度官方合作伙伴 白帽SEO技术 数据驱动优化 效果长期稳定

SEO优化核心服务

网站技术SEO

  • 网站结构优化 - 提升网站爬虫可访问性
  • 页面速度优化 - 缩短加载时间,提高用户体验
  • 移动端适配 - 确保移动设备友好性
  • HTTPS安全协议 - 提升网站安全性与信任度
  • 结构化数据标记 - 增强搜索结果显示效果

内容优化服务

  • 关键词研究与布局 - 精准定位目标关键词
  • 高质量内容创作 - 原创、专业、有价值的内容
  • Meta标签优化 - 提升点击率和相关性
  • 内容更新策略 - 保持网站内容新鲜度
  • 多媒体内容优化 - 图片、视频SEO优化

外链建设策略

  • 高质量外链获取 - 权威网站链接建设
  • 品牌提及监控 - 追踪品牌在线曝光
  • 行业目录提交 - 提升网站基础权威
  • 社交媒体整合 - 增强内容传播力
  • 链接质量分析 - 避免低质量链接风险

SEO服务方案对比

服务项目 基础套餐 标准套餐 高级定制
关键词优化数量 10-20个核心词 30-50个核心词+长尾词 80-150个全方位覆盖
内容优化 基础页面优化 全站内容优化+每月5篇原创 个性化内容策略+每月15篇原创
技术SEO 基本技术检查 全面技术优化+移动适配 深度技术重构+性能优化
外链建设 每月5-10条 每月20-30条高质量外链 每月50+条多渠道外链
数据报告 月度基础报告 双周详细报告+分析 每周深度报告+策略调整
效果保障 3-6个月见效 2-4个月见效 1-3个月快速见效

SEO优化实施流程

我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:

1

网站诊断分析

全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。

2

关键词策略制定

基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。

3

技术优化实施

解决网站技术问题,优化网站结构,提升页面速度和移动端体验。

4

内容优化建设

创作高质量原创内容,优化现有页面,建立内容更新机制。

5

外链建设推广

获取高质量外部链接,建立品牌在线影响力,提升网站权威度。

6

数据监控调整

持续监控排名、流量和转化数据,根据效果调整优化策略。

SEO优化常见问题

SEO优化一般需要多长时间才能看到效果?
SEO是一个渐进的过程,通常需要3-6个月才能看到明显效果。具体时间取决于网站现状、竞争程度和优化强度。我们的标准套餐一般在2-4个月内开始显现效果,高级定制方案可能在1-3个月内就能看到初步成果。
你们使用白帽SEO技术还是黑帽技术?
我们始终坚持使用白帽SEO技术,遵循搜索引擎的官方指南。我们的优化策略注重长期效果和可持续性,绝不使用任何可能导致网站被惩罚的违规手段。作为百度官方合作伙伴,我们承诺提供安全、合规的SEO服务。
SEO优化后效果能持续多久?
通过我们的白帽SEO策略获得的排名和流量具有长期稳定性。一旦网站达到理想排名,只需适当的维护和更新,效果可以持续数年。我们提供优化后维护服务,确保您的网站长期保持竞争优势。
你们提供SEO优化效果保障吗?
我们提供基于数据的SEO效果承诺。根据服务套餐不同,我们承诺在约定时间内将核心关键词优化到指定排名位置,或实现约定的自然流量增长目标。所有承诺都会在服务合同中明确约定,并提供详细的KPI衡量标准。

SEO优化效果数据

基于我们服务的客户数据统计,平均优化效果如下:

+85%
自然搜索流量提升
+120%
关键词排名数量
+60%
网站转化率提升
3-6月
平均见效周期

行业案例 - 制造业

  • 优化前:日均自然流量120,核心词无排名
  • 优化6个月后:日均自然流量950,15个核心词首页排名
  • 效果提升:流量增长692%,询盘量增加320%

行业案例 - 电商

  • 优化前:月均自然订单50单,转化率1.2%
  • 优化4个月后:月均自然订单210单,转化率2.8%
  • 效果提升:订单增长320%,转化率提升133%

行业案例 - 教育

  • 优化前:月均咨询量35个,主要依赖付费广告
  • 优化5个月后:月均咨询量180个,自然流量占比65%
  • 效果提升:咨询量增长414%,营销成本降低57%

为什么选择我们的SEO服务

专业团队

  • 10年以上SEO经验专家带队
  • 百度、Google认证工程师
  • 内容创作、技术开发、数据分析多领域团队
  • 持续培训保持技术领先

数据驱动

  • 自主研发SEO分析工具
  • 实时排名监控系统
  • 竞争对手深度分析
  • 效果可视化报告

透明合作

  • 清晰的服务内容和价格
  • 定期进展汇报和沟通
  • 效果数据实时可查
  • 灵活的合同条款

我们的SEO服务理念

我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。

提交需求或反馈

Demand feedback