19 2011

PHP移除指定HTML标签的方法

Category: Snippetslixiphp @ 2011-04-19 21:03:58

PHP默认的函数有移除指定html标签,名称为strip_tags,在某些场合非常有用。

strip_tags

(PHP 3 >= 3.0.8, PHP 4, PHP 5)

strip_tags — Strip HTML and PHP tags from a string

string strip_tags ( string str [, string allowable_tags] )

弊端 :

  • 这个函数只能保留想要的html标签,就是参数string allowable_tags。

在yizero的评论中我知道了这个函数的参数allowable_tags的其他的用法。

strip_tags($source, ”); 去掉所以的html标签。

strip_tags($source, ‘<div><img><em>’); 保留字符串中的div、img、em标签。

如果想去掉的html的指定标签。那么这个函数就不能满足需求了。于是乎我用到了这个函数。

移除多个指定的html标签

/**
 * Removes specific  tags.
 */
function strip_only_tags($str, $tags, $stripContent = FALSE) {
  $content = '';

  if (!is_array($tags)) {
    $tags = (strpos($str, '>') !== false ? explode('>', str_replace('<', '', $tags)) : array($tags));
    if (end($tags) == '') {
      array_pop($tags);
    }
  }

  foreach($tags as $tag) {
    if ($stripContent) {
      $content = '(.+<!--'.$tag.'(-->|\s[^>]*>)|)';
    }

    $str = preg_replace('#<!--?'.$tag.'(-->|\s[^>]*>)'.$content.'#is', '', $str);
  }

  return $str;
}

参数说明

$str  — 是指需要过滤的一段字符串,比如div、p、em、img等html标签。
$tags — 是指想要移除指定的html标签,比如a、img、p等。
$stripContent = FALSE  — 移除标签内的内容,比如将整个链接删除等,默认为False,即不删除标签内的内容。

使用说明

$target = strip_only_tags($source, array(‘a’,'em’,'b’));

移除$source字符串内的a、em、b标签。
阅读更多>>

标签: , , , , ,


20 2011

一个艰难的决定-腾讯微博推出开放平台API

Category: APIlixiphp @ 2011-01-20 23:06:11

腾讯微博推出开放平台API logo

腾讯微博推出开放平台API:http://open.t.qq.com/

什么是腾讯微博开放平台?

腾讯微博开放平台,为广大开发者提供通过开放接口,可构建丰富多样的应用。

你的应用能从微博获取海量资讯,或将信息传播到千万级用户的平台中,得到营销推广机会。

提供开放的数据分享和传播服务,加上你的智慧,将创造无穷的功能与乐趣。

微博开放平台可构建丰富多样的应用image

如何开发微博应用?

你只需要按照如下步骤操作:

第一步:填写你的开发者信息;

第二步:联系邮箱通过验证;(电子邮箱将作为我们联系你的重要方式,请提供常用邮箱地址)

第三步:填写要创建的应用信息。

就能马上获取到微博App Key和App Secret,调用微博API,进行应用开发。

取到微博App Key和App Secret image
阅读更多>>

标签: , , , , , ,


十二 26 2010

ECMall如何在后台添加模板编辑页

Category: ECMalllixiphp @ 2010-12-26 11:59:00

编辑文档admin\app\template.app.php。

获取ECMall编辑页面列表

    /**
     *    获取可以编辑的页面列表
     *
     *    @author    Garbin
     *    @param    none
     *    @return    void
     */
    function _get_editable_pages()
    {
        return array(
            'index' => SITE_URL . '/index.php',
            'gcategory' => SITE_URL . '/index.php?app=category',
            'miaosha' => SITE_URL . '/index.php?app=miaosha',
            'auction' => SITE_URL . '/index.php?module=auction',
        );
    }

注意:这里如果模板名称对应着这个页面的URL地址。请确保这个URL可以通过网络地址访问。

更新template app的语言包,位于\languages\sc-utf-8\admin\template.app.php,加入语言选项,’index’ ,’gcategory’ ,’miaosha’ ,’auction’

‘index’ => ‘首页’, ‘gcategory’ => ‘商品分类页’,'miaosha’ => ‘秒杀推广页’,'auction’ => ‘夺宝竞拍页’, 完成以上后,就会看到以下:

ecmall 模板编辑 image

ECMall模板标签

在模板的头部加入:

<!–<editmode></editmode>—>

注意:这个标签必须存在,不然无法加载控件。

<!–{widgets page=auction area=left}—>

注意:这里的page参数直接为你使用的那个模板编辑页面,有时搞了半天没有效果,可能就是页面参数没对~@@~。

阅读更多>>

标签: , , , ,


十二 17 2010

ECShop二次开发之电影播客系统

Category: ECShoplixiphp @ 2010-12-17 13:37:01

对ECShop研究之后找了个模板套上,实现了电影播客系统用ecshop做出来。部分功能还在完善之中,不过可以玩一玩。

开发思路

  1. 架构方面,对于电影播客系统而言就要有个强大的用户模块功能,考虑到ecshop是B2C,而我们的电影播客系统也是一种B2C,需要对注册用户进行实时跟踪。
  2. 订单处理方面,ECShop已经有了完备的过程,所以电影播客系统在处理用户点播时,就是一种购买的流程。也节省了很多流程去考虑。
  3. 程序方面,由于ECShop的程序是面向过程,再集成一些library类库,相对独立性比较高,耦合性低。加上ECShop的灵活性,二次开发难度简单。
  4. 理解方面,电影就是一种产品,可以免费也可以收费。这样理解的话,这个电影点播系统就这么一回事。

DEMO预览

该电影系统集成电影点播功能,在线购买,论坛,UCenter等功能,对于视频点播功能还有点欠缺,不过后台已经完成。

  • 电影点播系统,首页预览如下:

ECSHOP电影点播系统首页预览image

演示地址:http://demo.lixiphp.com/movie/

  • 后台管理界面如下:

ECSHOP电影点播系统后台管理预览image

阅读更多>>

标签: , , , , , ,


十二 15 2010

WordPress二次开发之如何布局?如何做主题?

Category: WordPresslixiphp @ 2010-12-15 13:01:18

本文主要讲解WordPress如何布局。Wordpress不仅是一个强大的博客,也是一个强大的CMS。

WordPress布局

一般body content区域可以在模板中控制,然后sidebar可以做成area去控制,我是这样理解WordPress的。

例如:我是三列布局,左、中、右三列。我是这样做的,Left Sidebar、Main Body、Right Sidebar。

我的functions.php中这样写一段代码:

/**
 * Register widgetized areas, including two sidebars and four widget-ready columns in the footer.
 *
 * To override lixiphp_theme_widgets_init() in a child theme, remove the action hook and add your own
 * function tied to the init hook.
 *
 * @uses register_sidebar
 */
function lixiphp_theme_widgets_init() {
	// Area 1, located at the left of the sidebar.
	register_sidebar( array(
		'name' => __( 'Left Sidebar', 'lixiphp_theme' ),
		'id' => 'left-widget-area',
		'description' => __( 'The left widget area', 'lixiphp_theme' ),
		'before_widget' => '<div id="%1$s" class="widget-container %2$s">',
		'after_widget' => '</div>',
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3>',
	) );

	// Area 2, located right of the sidebar.
	register_sidebar( array(
		'name' => __( 'Right Sidebar', 'lixiphp_theme' ),
		'id' => 'right-widget-area',
		'description' => __( 'The right widget area', 'lixiphp_theme' ),
		'before_widget' => '<div id="%1$s" class="widget-container %2$s">',
		'after_widget' => '</div>',
		'before_title' => '<h3 class="widget-title">',
		'after_title' => '</h3>',
	) );
}
/** Register sidebars by running lixiphp_theme_widgets_init() on the widgets_init hook. */
add_action( 'widgets_init', 'lixiphp_theme_widgets_init' );

注册两个area:Left Sidebar、Right Sidebar。在后台的widgets界面如下:

image

这里的显示的area完全有’widgets_init’ 控制。

WordPress模板对布局支持

WordPress的模板机制比较灵活,不管是博客还是cms都能很容易实现。

<?php get_header(); ?>
<?php get_sidebar(‘left’); ?>
<?php get_sidebar(‘right’); ?>
<?php get_footer(); ?>

对应的模板是:

header.php  调用头部模板
index.php  首页模板
footer.php  调用底部模板
sidebar-left.php  调用左半部模板
sidebar-right.php  调用右半部模板

阅读更多>>

标签: , , , , , ,


十二 12 2010

xcart二次开发之三自定义多语言变量

Category: PHP,xcartlixiphp @ 2010-12-12 02:33:12

前面我们讲解了实现xcart多语言商场的背景和后台操作方法,接着我们将继续讲解如何在xcart中自定义多语言变量,在后台通过翻译接口翻译各个语种。

xcart的语言翻译归类

  • Countries ,国家翻译归类,xcart支持很多国家,使用country_XX进行标示。
  • E-Mail, 邮件翻译归类,包括一些邮件模板,使用eml_XX进行标示。
  • Errors, 错误消息翻译归类,使用err_XX进行标示。
  • Label, 表单元素翻译归类,使用lbl_XX进行标示。
  • Labels,变量翻译归类,使用lbl_XX进行标示。
  • Languages, 语言翻译归类,使用language_XX进行标示。
  • Modules,模块语言翻译归类,使用module_XX进行标示。
  • Options,设置选项翻译归类,使用opt_XX进行标示。
  • Text, 文本信息翻译归类,使用txt_XX进行标示。

默认添加的归类是Labels,一般用于常用变量的翻译,其实选择那个归类无所谓都能实现,只不过把翻译归类了,可读性更高。

普通文字多语言切换及模板变量定义

例如要在前台实现翻译产品Products,操作过程如下:

在后台语言界面添加变量 lbl_products,然后再tpl模板中调用变量。注意:这里各个语种都要添加翻译,如果没有就会空白。

添加语言Add new entry image

模板调用时使用变量{$lng.lbl_products} 在切换语言时就是自动翻译。

图片多语言切换及模板变量定义

例如要在前台实现菜单(菜单为图片)的翻译,操作过程如下:

添加变量的方法同上普通文字变量定义一样,唯一不同的是,翻译是非英语语言的都翻译为英语,因为图片路径最好是英语,是其他字符有可能无法找到该路径。

一个英语时为english_products.png 翻译为法语是就会寻找french_products.png 的图片。

图片对照翻译

定于变量menu_products , 模板中使用{$lng.menu_products}.png,英语为english_products,法语为french_products,以此类推。

阅读更多>>

标签: , , , ,


十二 09 2010

xcart二次开发之二如何操作实现多语言商城

Category: PHPlixiphp @ 2010-12-09 21:09:20

既然是要要实现xcart多语言商城,当然就要在后台操作,现在市面上用的多的两个界面如下。是用的最多的吧~@~。x-cart-4.3.1-gold 和 x-cart-4.4.1-gold 版本。

x-cart-4.3.1-gold后台界面如下:

X-CART.-Powerful-PHP-shopping-cart-software

x-cart-4.4.1-gold界面如下:

X-CART-4.4.1.-Powerful-PHP-shopping-cart-software

翻译流程

需要翻译的就是产品分类、静态页面、产品

  • Static pages
  • Categories
  • Products

1。静态页面的翻译直观,在右上角有个切换语言,就可以找到相应语言下的页面。

image

后面的流程就是按照一般的添加页面,修改页面,删除页面之类的操作。

阅读更多>>

标签: , , , ,


十二 01 2010

XCART二次开发之实现多语言站点

Category: PHPlixiphp @ 2010-12-01 00:29:04

XCART是PHP最早开发的一款专业的电子商务及内置支持多国语言系统。

遗憾的是X-cart的东东都要收费,不过相信天上没有掉下来的馅饼。既然选择x-cart就要为之付出代价啊。。。

xcart LANGUAGE PACK image

这是一个xcart 法语语言包,居然就卖到了40英镑。详细请点击请入:xcart-language-packs.com/product.php?productid=2&cat=1&page=1

我在网上找了半天实在找不到,不过有时不需要我们去买,直接让客户去买就得了。

多语言实现如下:

image

语言包文件如下:

image

很久没有写文章了,这个月的第一篇。

标签: , , , , ,


十一 13 2010

Drupal theming模板技巧总结第一期[原创]

Category: Drupallixiphp @ 2010-11-13 17:40:32

Drupal对于初学者来说,难点就在不知道怎么做UI,其实Drupal是很灵活的,只要你找到思想。 Drupal思想很重要,只要不断去理解Drupal的思想,不断积累,才会真正理解Drupal的灵活。工作中积累不断与大家分享,这是总结的第一期。希望有时间和大家一起分享,帮你找到Drupal的满足感!

区块PHP Code控制显示(PHP block visibility settings)

  1. Show block on specific pages:
  2. Show on every page except the listed pages.
  3. Show on only the listed pages.
  4. Show if the following PHP code returns TRUE (PHP-mode, experts only).

这里我们只讨论PHP-mode, experts only,返回值为真,则显示。返回值为假,则不显示。

<?php
if (condition) {
 return TRUE;  // block will be shown
}
 return FALSE;
?>

调用返回值。


<?php return (condition); ?>
  • 是否显示在首页 drupal_is_front_page()
  • 是否限制登录用户 user_is_anonymous()

<?php
if ( (!user_is_anonymous() && drupal_is_front_page()) ){
return FALSE;
}else{
return TRUE;
}
?>
以上代码的含义是:登录用户首页的当前区块block 不显示。

更多的研究请查看Drupal官方。

CKEditor 中使用PHP Code问题

在Drupal中安装CKEditor模块和PHP Filter模块,但是当选择PHP code作为输入格式,然后编辑器任然是CKEditor,切换到文本框,Switch to plain text editor

输入PHP Code如下:

<?php global $user;echo $user->uid; ?>

CKEditor

&lt;!–{cke_protected}%3C%3Fphp%20global%20%24user%3Becho%20%24user-%3Euid%3B%20%3F%3E–&gt;

解决方法请参考:CKEditor and GeSHi filter

如何定义分类、标签模板theme taxonomy term

/*** Adding custom PHPTemplate suggestions on taxanomy pages.
  ** @param $vars *   A sequential array of variables to pass to theme template.
  */
function phptemplate_preprocess_node(&$vars) {
  if(arg(0) == 'taxonomy'){
    $suggestions = array('node-taxonomy'); //So, node-taxonomy.tpl.php will be known afterwards.
    $vars['template_files'] = array_merge($vars['template_files'], $suggestions);
  }
}

以上函数在template.php中定义复写函数,根据地址获取第一个参数,将模板值更改。

这样模板就为:node-taxonomy.tpl.php

阅读更多>>

标签: , , , , , , , ,


十一 08 2010

工作技巧总结mysql与drupal

Category: Drupal,MySQLlixiphp @ 2010-11-08 17:23:09

记录一下两个重要的技巧,可能一不小心你就会在日常应用中遇到。

MYSQL替换字符串

mysql中的replace函数直接替换mysql数据库中某字段中的特定字符串,不再需要自己写函数去替换,用起来非常的方便。

mysql 替换函数replace() 语法:

UPDATE `table_name` SET `field_name` = replace (`field_name`,’from_str’,'to_str’) WHERE `field_name` LIKE ‘%from_str%’

说明:

table_name — 表的名字
field_name — 字段名
from_str — 需要替换的字符串
to_str — 替换成的字符串

此方法在WordPress站点移植很有用,例如更新wp-options表使用以下的SQL语句:

UPDATE `wp-options` SET `option_values` = REPLACE(`option_values`, 'www.olddomain.com', 'www.newdomain.com');

如何隐藏和删除Drupal Tab 菜单标签

当你写一个定制的模块在自己新加的内容类型时,需要添加一个menu_local_task到node/x/edit路径,但它只有在编辑自定义内容类型时显示。

添加一个菜单本地任务(TAB)很容易,但是隐瞒其他内容类型中一个tab标签菜单事实证明是徒劳无功的。而且似乎很多人遇到类似的问题。

使用hook_menu_alter或hook_menu_link_alter在隐藏或者删除tab标签是很难实现的。

在经过考虑之后,我意识到我的问题很容易通过菜单的访问权限的回调函数去解决。所以这是为特定内容类型添加、编辑和删除菜单标签menu_local_task的代码:

<?php

/***  implementation of hook_menu()*/
function mymodule_menu() {

  $items = array();

  $items['node/%node/edit/attributes'] = array(    
    'title' => 'Attributes',    
    'page callback' => 'drupal_get_form',    
    'page arguments' => array('mymodule_attributes_form', 1),    
    'access callback' => 'mymodule_attributes_access',    
    'access arguments' => array(1),    
    'weight' => 10,    
    'type' => MENU_LOCAL_TASK,
  );

  return  $items;
}

/*** Access callback for node/%node/edit/attributes.*/
function mymodule_attributes_access($node) {  
  if ($node->type != 'mymodule') {
    return FALSE;
  }
  return TRUE; 
  // TRUE or you can user user_access() permissions as well
}

?>

Drupal会严格检查用户访问没有节点的权限,如果权限不够,则不会显示TAB菜单。这样我们就可以实现对TAB菜单的删除或者隐藏操作。

上面的函数mymodule_attributes_access,还可以加入对地址栏参数的检查,回调函数的参数应该在 ‘access arguments’ => array(1, 2, …) 里设置。注意这里的 1,2 … 是指 arg(1), arg(2) …以此类推。

阅读更多>>

标签: , , , , , ,


Page 1 of 6123456