WordPress程序采集文章并设置特色图片

WordPress的采集插件挺多, 功能也很强大。但是如果要折腾,还是自己写 :D

下面是我的采集插件里的几个关键函数:

匹配函数(经测试效率最好的一个)

/**
 * 获取第一个匹配的内容
 *
 * @author        Copyright (c) <//sjolzy.cn>
 * @param        string    $str    内容
 * @param        string    $start    起始匹配
 * @param        string    $end    中止匹配
 * @return        string
 */
private function strCut($str, $start, $end){
    $content = strstr( $str, $start );
    $content = substr( $content, strlen( $start ), strpos( $content, $end ) - strlen( $start ) );
    return $content;
}

取出所有匹配的内容

/**
 * 获取所有匹配的内容
 *
 * @author        Copyright (c) <//sjolzy.cn>
 * @param        string    $str    内容
 * @param        string    $start    起始匹配
 * @param        string    $end    中止匹配
 * @return        array
 */
private function strCutAll($str,$start,$end){
    $content    = explode($start,$str);
    $matchs        = array();
    $sum        = count($content);
    for( $i = 1;$i < $sum;$i++ ){
        $tmp = explode($end,$content[$i]);
        $matchs[] = $tmp[0];
        unset($tmp);
    }
    return $matchs;
}

通过上面两个函数, 在使用preg_match_all配合正则表达式, 想要的网页内容基本都能采集到.

效率相对比较高的一个采集网页的函数

/**
 * 根据URL采集网页内容
 *
 * @author        Copyright (c) <//sjolzy.cn>
 * @param        string    $url    链接地址
 * @return        string
 */
private function fetch($url){
    $handle = fopen($url, 'r');
    $content = '';
    while (!feof($handle)){
        $content .= fgets($handle, 10000);
    }
    return $content?$this->utf8_iconv($content):'';
}
//这里的utf8_iconv函数是把GB2312转成UTF-8编码

上面是我的采集插件里的主要函数, 内容采集到手后, 就是各种入库.

WordPress程序采集分类并自动入库

//添加目录
private function addCat($name,$slug,$parent=0,$desc=''){
    $cat = array(
            'cat_name'                => $name,
            'category_description'    => $desc,
            'category_nicename'        => $slug,
            'category_parent'        => $parent
        );
    return wp_insert_category
($cat);
}

WordPress程序采集并保存文章

 

//添加日志
private function addPost($title,$content,$slug='',$cats=array()){
    $post = array(
        'post_title'        => $title,
        'post_name'            => $slug,
        'post_content'        => $content,
        'post_status'        => 'publish',
        'post_author'        => 1,
        'post_category'        => $cats
    );
    return wp_insert_post
( $post );
}

自动设置文章的特色图片

$img    = '网络图片地址';
$p1    = '文章ID';//addPost返回
$attachment_id    = $this->addAttachment($img,$p1);
add_post_meta($p1, '_thumbnail_id', $attachment_id, true);

综上, 可见WordPress程序采集文章并不难..

Magento - 添加订单退货模块

参考水水兄的文章:http://blog.csdn.net/shuishui8310/archive/2010/04/27/5532992.aspx

ps, 水水兄高人风范,,很多地方都一语带过, 下午应朋友需求增加订单退货模块,跟着做了一下.. 略微详细记录过程。

无图,图片党边参照水水兄的文章。

1./app/code/core/Mage/Sales/etc/config.xml
搜索statuses,加入<refunding translate="label"><label>On Refunding
</label></refunding> 
再在下面的states加入
    <refunding>
        <statuses>
            <refunding/>
        </statuses>
    </refunding>

2./app/locale/en_US/Mage_Sales.csv 打开这个语言文件 >> 其他语言包的自己翻译相应加入
搜索Payment Review,换个行加入"On Refunding","On Refunding",到这步骤在后台就能看到On Refunding这个退货的订单状态了(清下缓存)

3.在前台http://domain.com/customer/account/index/,新增可供客户点击的“退货”链接
app/design/frontend/base/default/template/sales/order/recent.phtml搜索View Order在大概65行加入
<?php if ($_order->getStatus()=='complete') : ?>
    <span class="separator">|</span> <a href="#" class="link-reorder"><?php echo $this->__('On Refunding') ?></a>
<?php endif ?>
自己下个订单测试,改成完成状态后便可以有退货的链接。

4.在app/code/core/Mage/Sales/controllers/OrderController.php里加个函数
    /*将客户完成的订单的订单状态改退货中*/
    public function refundingAction(){
        $orderId = (int) $this->getRequest()->getParam('order_id');
        if (!$orderId) {
            $this->_forward('noRoute');
            return false;
        }
        $order = Mage::getModel('sales/order')->loadByIncrementId($orderId);
        if ($this->_canViewOrder($order)&&$order->getStatus()=='complete') {    // 验证符合
            $order->setData('status','refunding');
            $order->save();
        }
    $this->_redirect('*/*/history');    // 这里提示的 相应再自己修改
    }
这时候通过访问:http://www.chaussay.com/sales/order/refunding/order_id/100000002
就可以把该客户的完成的订单改变成退货中。

至此Magento增加订单退货的整个流程结束。。

备忘

GROUP_CONCAT :SELECT GROUP_CONCAT( access.amid ) AS mid FROM wms.access WHERE access.agid=0

以下代码可以取某个范围内的列名,下例中是取5到10列的列名。
select * from INFORMATION_SCHEMA.COLUMNS where table_name='HX' and ordinal_position between 5 and 10

js 数字
<input name="end_price" id="end_price" type="text" size="5" onkeyup="value=value.replace(/[^\d]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" >


SELECT GROUP_CONCAT(mname) from webinfo.mod


批量替换
UPDATE article(表) SET
content = replace(content, ’解决’, ’解放’)
WHERE ID<5000;

查找字段的字符
SELECT a.products_name FROM nikefed.products_description a WHERE a.products_name like '%#%'

大写变小写
strtolower

<fieldset>
    <legend><span>fieldset</span></legend>
<form></form>
</fieldset>

图片与文字水平对齐
图片加:align="absmiddle"

图片hack:margin-bottom:-3px;

<div id="output" style="border:1px solid gray;width:95%;height:400;overflow-y:scroll"></div>


CREATE VIEW qd
AS
(SELECT a.aid, b.bid,b.bfield,c.cvalue
    FROM (a, b ) 
    LEFT JOIN c 
    ON (a.aid = c.aid AND b.bid = c.bid) 
    ORDER BY a.aid ASC, b.bid ASC
);
SELECT a.* FROM qd a
LEFT JOIN
(
SELECT a.aid,a.ma,COUNT(b.aid) AS dd FROM (SELECT aid,MAX(cvalue) AS ma FROM qd GROUP BY aid) a
LEFT JOIN (SELECT aid,MAX(cvalue) AS ma FROM qd GROUP BY aid) b
ON a.ma>=b.ma
GROUP BY a.aid,a.ma
ORDER BY COUNT(b.aid)) d
ON a.aid=d.aid
ORDER BY d.dd;


301
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.nkfed.com/");


Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 6144 bytes)  修改php.ini 的memory_limit的值更大点。

桌面url快捷方式  命名为**.url
[DEFAULT]
BASEURL=http://i.hudong.com/home.do
[InternetShortcut]
URL=http://i.hudong.com/home.do
IDList=
[{000214A0-0000-0000-C000-000000000046}]
Prop3=19,2


js操作换行
<script type="text/javascript">
// <![CDATA[
function toBreakWord(intLen){
    var obj=document.getElementsByName("ff");
    for(var i=0;i<obj.length;i++){
        var strContent=obj[i].innerHTML; 
        var strTemp="";
        while(strContent.length>intLen){
        strTemp+=strContent.substr(0,intLen)+"&#10;"; 
        strContent=strContent.substr(intLen,strContent.length); 
        }
        strTemp+="&#10;"+strContent;
        obj[i].innerHTML=strTemp;
    }
}
if(document.getElementById  &&  !document.all)  toBreakWord(37);
// ]]>
</script>


错误调试
//使用html格式的错误输出内容,比较重要,否则在页面上就乱了
ini_set('html_errors', 1);
//打开所有的错误级别
ini_set('error_reporting', E_ALL);
//显示错误
ini_set('display_errors', 1);
//显示启动错误 推荐在各个业务的入php文件中设置,而不要在php.ini中设置。
ini_set('display_startup_errors', 1);


取分类的头几条记录
Select   *   From   表   A
Where   (Select   Count(*)   From   表   Where   type   =   A.type   And   value   <   A.value)   <   2
Order   By   type,   value



    function get_Curr_Domain() {
        $HTTP_HOST = PMA_getenv('HTTP_HOST');echo $HTTP_HOST.'<br>';
        $HTTP_HOST = strrev($HTTP_HOST);echo $HTTP_HOST.'<br>';
        $HTTP_HOST = explode('.',$HTTP_HOST,3);dump($HTTP_HOST);
        $curr_Domain = htmlspecialchars(strrev($HTTP_HOST[0].'.'.$HTTP_HOST[1]));
        return  $curr_Domain;
    }


linux打包
 tar -cvfz /var/www/html/gamestore8-6.tar.gz /var/www/html/gamestore.com

zip –q –r html.zip html

  $ cp - i exam1.c /usr/wang/shiyan1.c
  该命令将文件exam1.c拷贝到/usr/wang 这个目录下,并改名为 shiyan1.c。若不希望重新命名,可以使用下面的命令:
  $ cp exam1.c /usr/ wang/
  $ cp - r /usr/xu/ /usr/liu/ 将/usr/xu目录中的所有文件及其子目录拷贝到目录/usr/liu中

select组
<select>
    <optgroup label="<5" >
        <option>0</option>
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
    </optgroup>
    <optgroup label=">4" >
        <option>5</option>
        <option>6</option>
        <option>7</option>
        <option>8</option>
        <option>9</option>
    </optgroup>
</select>

chmod g+ order_doc

启动apache
service httpd start
启动FTP
service vsftpd restart
启动mysql
service mysqld restart

手型
style="cursor: pointer" mce_style="cursor: pointer"

MSN:   <a href="msnim:chat?contact=sales_support@hotmail.com">sales_support@hotmail.com</a>
EMAIL: <a href="mailto:support@tiffanyouth.co.uk">support@tiffanyouth.co.uk</a>

//编码转换:         内容    to     from
mb_convert_encoding($data,'utf-8','gbk')

$  USD   美元
£ GBP   英镑
€  EUR   欧元

监听回车
<script language="javascript">
 function keypress(e)
  {
    var currKey=0,e=e||event;
      if(e.keyCode==13)document.myform.submit();
  }
 document.onkeypress=keypress;
  </script>

  addslashes<==>stripcslashes

jquery查找和替换
t:要查找替换的字符串 
$.each(t, function(k, v) {
    /^[A-Za-z0-9]$/.exec(v) || (t=t.replace(t[k],'-'));
});

select下拉框的第二个元素为当前选中值
$('#select_id')[0].selectedIndex = 1;

radio单选组的第二个元素为当前选中值
$('input[@name=items]').get(1).checked = true;

获取select被选中项的文本
var item = $("#gp_pid option:selected").text();
var item = $("select[@name=items] option[@selected]").text();

$("#sel").attr("value",'-sel3');//设置value=-sel3的项目为当前选中项

单选组radio: $("input[@type=radio]").attr("checked",'2');//设置value=2的项目为当前选中项

$("#select_id").attr("value",'test');//设置value=test的项目为当前选中项

js获取时间
new Date().getTime()
Math.random();

//随机输出
if(!flag){
    var words=[
        {image:0,head:"msg1",body:"cnt1"},
        {image:1,head:"msg2",body:"cnt2"},
        {image:2,head:"msg3",body:"cnt3"},
        {image:"mini",head:"",body:""}];
    var rand = new Date().getTime() % 3;
    var content =
    '<div>'.words[rand].image+'.jpg'+
        '<h2>'+words[rand].head+'</h2>'+
        '<p>'+words[rand].body+'</p>'+
    '</div>';
    document.write(content);
}

//js加载块内容的方式
<div class="login_inner">
<script type="text/javascript">
    document.write('<iframe id="login_iframe" style="height:300px;width:366px;" class="loginIframe" frameborder="no" scrolling="no" src="#"></iframe>');
</script>
</div>

js设置样式
if ( is_IE ){
document.getElementById(controlID).className = controlCssClass ;
}
else if ( is_NN ){
document.getElementById(controlID).setAttribute("class", controlCssClass) ;
}

jquery 验证email
 var search_str = /^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/;
 var email_val = $("#Email").val();
 if(!search_str.test(email_val)){      
 alert("please input right email !");
 $('#Email').focus();
 return false;
 }

四种 PHP验证码

<?php

//checkNum.php
session_start();
function random($len)
{
$srcstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
mt_srand();//配置乱数种子
$strs="";
for($i=0;$i <$len;$i++){
$strs.=$srcstr[mt_rand(0,35)];
}

return strtoupper($strs);
}
$str=random(4); //随机生成的字符串" title="字符串" >字符
$width = 50; //验证码图片的宽度
$height = 25; //验证码图片的高度

@header("Content-Type:image/png");
$_SESSION["code"] = $str;
//echo $str;
$im=imagecreate($width,$height);
//背景色
$back=imagecolorallocate($im,0xFF,0xFF,0xFF);
//模糊点颜色
$pix=imagecolorallocate($im,187,230,247);
//字体色
$font=imagecolorallocate($im,41,163,238);
//绘模糊作用的点
mt_srand();
for($i=0;$i <1000;$i++)
{
imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);
}
imagestring($im, 5, 7, 5,$str, $font);
imagerectangle($im,0,0,$width-1,$height-1,$font);
imagepng($im);
imagedestroy($im);
$_SESSION["code"] = $str;

session_destroy();
?>


<?php
//checkNum.php
session_start();
function random($len)
{
$srcstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
mt_srand();//配置乱数种子
$strs="";
for($i=0;$i <$len;$i++){
$strs.=$srcstr[mt_rand(0,35)];
}

return strtoupper($strs);
}
$str=random(4); //随机生成的字符串" title="字符串" >字符
$width = 50; //验证码图片的宽度
$height = 25; //验证码图片的高度

@header("Content-Type:image/png");
$_SESSION["code"] = $str;
//echo $str;
$im=imagecreate($width,$height);
//背景色
$back=imagecolorallocate($im,0xFF,0xFF,0xFF);
//模糊点颜色
$pix=imagecolorallocate($im,187,230,247);
//字体色
$font=imagecolorallocate($im,41,163,238);
//绘模糊作用的点
mt_srand();
for($i=0;$i <1000;$i++)
{
imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);
}
imagestring($im, 5, 7, 5,$str, $font);
imagerectangle($im,0,0,$width-1,$height-1,$font);
imagepng($im);
imagedestroy($im);
$_SESSION["code"] = $str;

session_destroy();

?>

<?php
session_start();
$authnum=random(6);//验证码字符.
$_SESSION['yan']=$authnum;
//生成验证码图片
Header("Content-type: image/PNG");
$im = imagecreate(55,18); //imagecreate() 新建图像,大小为 x_size 和 y_size 的空白图像
$red = ImageColorAllocate($im, 153,51,0); //设置背景颜色
$white = ImageColorAllocate($im, 255,204,0);//设置文字颜色
$gray = ImageColorAllocate($im, 102,102,0); //设置杂点颜色


 

 

 

imagefill($im,55,18,$red);

for ($i = 0; $i < strlen($authnum); $i++)
{
// $i%2 == 0?$top = -1:$top = 3;

imagestring($im, 6, 13*$i+4, 1, substr($authnum,$i,1), $white);
//int imagestring ( resource image, int font, int x, int y, string s, int col)
//imagestring() 用 col 颜色字符串" title="字符串" >字符串 s 画到 image 所代表的图像的 x,y 座标处(图像的左上角为 0, 0)。如果 font 是 1,2,3,4 或 5,则使用内置字体。
}
for($i=0;$i<100;$i++) //加入干扰象素
{
imagesetpixel($im, rand()%55 , rand()%18 , $gray);
//int imagesetpixel ( resource image, int x, int y, int color)
//imagesetpixel() 在 image 图像中用 color 颜色在 x, y 坐标(图像左上角为 0, 0)上画一个点。
}
ImagePNG($im); //以 PNG 格式图像输出浏览器文件
ImageDestroy($im);//销毁一图像

//产生随机数函数
function random($length) {
$hash = '';
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';

$max = strlen($chars) - 1;

for($i = 0; $i < $length; $i++) {
$hash .= $chars[mt_rand(0, $max)];
}
return $hash;

}
?>

 


<?php

session_start();

//生成验证码图片

Header("Content-type: image/PNG");

srand((double)microtime()*1000000);

$im = imagecreate(62,20);

$black = ImageColorAllocate($im, 0,0,0);

$white = ImageColorAllocate($im, 255,255,255);

$gray = ImageColorAllocate($im, 200,200,200);

imagefill($im,68,30,$gray);

while(($authnum=rand()%100000)<10000);

//将四位整数验证码绘入图片

imagestring($im, 5, 10, 3, $authnum, $white);

for($i=0;$i<200;$i++) //加入干扰象素

{

$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));

imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);

}
ImagePNG($im);
ImageDestroy($im);
$_SESSION['SESSION_VALIDATE_CODE'] = $authnum.'';

?>

 

php使用jquery.imgareaselect插件上传图片

在开发中难免碰到图片上传问题图片上传问题很好解决,而上传服务器上的图片尺寸大小不一,使表现无法使用统一的规格显示被上传图片。 
那么被上传图片的 等比例缩 与等比率放 还有等比率截图 可能会给我们的开发带来障碍! 
使用 jquery.imgareaselect图片处理插件完全可以解决方面问题; 

jquery.imgareaselect 官方网站:http://odyniec.net/projects/imgareaselect

导入jquery和jquery.imgareaselect

 

例1.

$(window).load(function () {  

  $('#myimg').imgAreaSelect({ selectionColor: 'blue', selectionOpacity: 0.2,  

    borderWidth: 2 });  

});  

注释
myimg:需要处理的图片 
selectionColor:选择区域颜色 
selectionOpacity:选择区域透明度 
borderWidth:选择边框大小 
如果使用selectionColor参数  就必须设置selectionOpacity(透明度) 

 

例2.等比率选择设置选择区域最大宽高

$(window).load(function () {  

  $('#myimg').imgAreaSelect({aspectRatio: '4:3', maxWidth: 400, maxHeight: 300});  

}); 

注释
myimg:需要处理的图片 
aspectRatio:选择框宽高比率 
maxWidth:选择区域透宽最大值 
maxHeight:选择区域透高最大值 

 

例3:默认选择区域设置 与 键盘支持 

$(window).load(function () {  

  $('#myimg').imgAreaSelect({ x1: 0, y1: 0, x2: 400, y2: 300,keys: { arrows: 15, shift: 5 } });  

});  

注释
myimg:需要处理的图片 
x1:右上角x轴坐标 
y1:右上角y轴坐标 
x2:右下角x轴坐标 
y2:右下角y轴坐标 
key:开启键盘支持 

 

例4:最关键的一个 等比率缩放 

实现原理 需要两个图片 第一图是原图 第二个图是选择区域后显示的图 

         用第一个图上的选择坐标+css控制 产生第二个图 实际上两个图是一样的 只不过通   

         过css控制了第二张图的显示区域与缩放比率 如果需要实现真正截图功能必须使用 

         服务器支持。 例如php  asp aspx jsp ...... 

function preview(img, selection)  

{  

  var scaleX = 100 / (selection.width || 1);  

  var scaleY = 100 / (selection.height || 1);  

  $('#myimg + div > img').css({  

    width: Math.round(scaleX * 400) + 'px',  

    height: Math.round(scaleY * 300) + 'px',  

    marginLeft: '-' + Math.round(scaleX * selection.x1) + 'px',  

    marginTop: '-' + Math.round(scaleY * selection.y1) + 'px'  

  });  

}    

$(document).ready(function () {  

  $('<div><img src="myimg.jpg" style="position: relative;" /></div>')  

    .css({  

      float: 'left',  

      position: 'relative',  

      overflow: 'hidden',  

      width: '100px',  

      height: '100px'  

    })  

    .insertAfter($('#myimg'));  

});  

$(window).load(function () {  

  $('#myimg').imgAreaSelect({ aspectRatio: '1:1', onSelectChange: preview });  

});  

注释

myimg:需要处理的图片 

onSelectChange:选择区域发生变化的时候回调处理 

function preview(img, selection):回调函数 

var scaleX = 100 / (selection.width || 1); 100->新图的宽 

var scaleY = 100 / (selection.height || 1);100->新图的高 

width: Math.round(scaleX * 400) + 'px', 400->原图的宽 

height: Math.round(scaleY * 300) + 'px', 300->原图的高 

$('<div><img src="myimg.jpg" style="position: relative;" /></div>') 

    .css({ 

      float: 'left', 

      position: 'relative', 

      overflow: 'hidden', 

      width: '100px', 

      height: '100px' 

    }) 

100px 是选择后新图显示区域的宽和高 

值得注意的是: 

   回调函数中实际图的宽高  回调函数中新图的宽高 

   这些参数必须设置正确、否则会出现 选择偏差 须设置正确、否则会出现 选择偏差 

 

接下来是php服务端如何处理:

 

$x = $_GET['x'];//客户端选择区域左上角x轴坐标  

$y = $_GET['y'];//客户端选择区域左上角y轴坐标  

$w = $_GET['w'];//客户端选择区 的宽  

$h = $_GET['h'];//客户端选择区 的高  

$lename" title="filename" >filename = "c:/myimg";//图片路径  

$im = imagecreatefromjpeg($lename" title="filename" >filename);// 读取需要处理的图片  

$newim = imagecreatetruecolor(100, 100);//产生新图片 100 100 为新图片的宽和高  

imagecopyresampled($newim, $im, 0, 0, $x, $y, 100, 100, $w, $h);  

//                  [1]    [2] [3][4] [5] [6] [7]  [8]  [9] [10]  

//[5]  客户端选择区域左上角x轴坐标  

//[6]  客户端选择区域左上角y轴坐标  

//[7]  生成新图片的宽  

//[8]  生成新图片的高  

//[9]  客户端选择区 的宽  

//[10] 客户端选择区 的高            

imagejpeg($newim, $lename" title="filename" >filename);  

imagedestroy($im);  

imagedestroy($newim);  

使用jquery过滤上传文件的类型和限制文件的大小

 

<script type="text/javascript"> 

$(document).ready(function(){ 

$("#form0").submit(function() {

var filepath=$("input[name='myFile']").val(); 

        var extStart=filepath.lastIndexOf("."); 

        var ext=filepath.substring(extStart,filepath.length).toUpperCase(); 

        if(ext!=".BMP"&&ext!=".PNG"&&ext!=".GIF"&&ext!=".JPG"&&ext!=".JPEG"){ 

        alert("图片限于bmp,png,gif,jpeg,jpg格式"); 

        return false; 

        } 

        

   var img=new Image(); 

   img.src=filepath;   

while(true){ 

   if(img.fileSize>0){ 

   if(img.fileSize>3*1024){       

alert("图片不大于300KB。"); 

return false; 

   } 

       break; 

   } 

   return true;      

}); 

}); 

</script>

标签: script, var, return, 图片, ext