Submitted by gouki on 2013, December 24, 9:37 PM
这年头,什么都不可靠。所幸,我还不需要用黄瓜。
在使用magento的时候,由于要使用ajax,但我又不想将这些链接加入到菜单里(加到菜单的链接会自动加入key参数),所以一直都是出现了自动跳转的问题。在这里面我要说一下。如果你使用原生的prototype.js,你用ajax的post功能时,即使不带key参数,也是可以正常处理的。如果是jquery..即使你带了key参数。也不能post,只能get。。。。苦逼
那么,如果在URL上加入key参数呢。大家都知道key参数是magento后台用来与前台分开的,里面带入了安全性的处理。可是怎么加上这个key呢?搜索了一下google居然没有一个文章是介绍这玩意的。当然也可能我的关键字不正确。
求人不如求已,打开代码,搜索key,很快就发现了Mage::getSingleton("adminhtml_url")这个玩意,里面有一个getUrl。。哇塞,可以直接生成带key的URL。看了一下。直接使用在程序里,确实生成了URL。并且可以通过浏览器访问。
记录一下
PHP | 评论:0
| 阅读:16859
Submitted by gouki on 2013, December 6, 2:01 PM
不多说,上代码。有几个要注意的(这段代码是我从我的系统里剥出来的。写了很久了,只是最近有人一直在问,我想,这也不是什么特别的代码,还是开源吧。)
1、请求微信菜单需要token,所以要事先生成。这个token其实可以用不少时间的,看官方接口(token调用生成,每天是有次数的,所以节约着用,能存本地就存本地吧,记录下过期时间即可)
2、子菜单的数组顺序就是微信的子菜单:从上至下的顺序 。这个不要搞错
3、子菜单是有数量限制的
4、主菜单是有字数限制的。不能超过4个中文字。
上代码吧:
PHP代码
- <?php
-
-
-
-
-
-
- $menudata = array(
- 'button' => array(
- array(
- 'name' => '菜单一',
- 'sub_button' => array(
- array(
- 'type' => 'click',
- 'name' => '最上方子菜单1',
- 'key' => 'R:4:1',
- ),
- array(
- 'type' => 'click',
- 'name' => '下方菜单',
- 'key' => 'R:3:1',
- ),
- )
- ),
- array(
- 'name' => '菜单2',
- 'sub_button' => array(
- array(
- 'type' => 'click',
- 'name' => '第一个',
- 'key' => 'R:2:1',
- ),
- array(
- 'type' => 'click',
- 'name' => '第二个',
- 'key' => 'R:8:1',
- ),
- array(
- 'type' => 'click',
- 'name' => '第三个',
- 'key' => 'R:9:1',
- ),
- array(
- 'type' => 'click',
- 'name' => '第四个',
- 'key' => 'R:10:1',
- ),
- )
- ),
- array(
- 'type' => 'click',
- 'name' => '菜单3',
- 'key' => 'M:7',
- ),
- )
- );
- $menujson = json_encode($menudata, JSON_UNESCAPED_UNICODE);
- define('APPKEY', '');
- define('SECRET', '');
- $getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s";
- $getTokenUrl = sprintf($getTokenUrl, APPKEY, SECRET);
- $result = json_decode(file_get_contents($getTokenUrl), true);
- $token = '';
- if (isset($result['access_token'])) {
- $token = $result['access_token'];
- }
- if (!$token) {
- throw new Exception('token can not empty');
- }
-
- $createMenuUrl = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' . $token;
- $opts = array(
- 'http' => array(
- 'method' => 'POST',
- 'header' => "Content-type: application/x-www-form-urlencodedContent-Length: " . strlen($menujson) . "" . "Connection: keep-alive" . "Keep-Alive: " . 300 . "",
- 'content' => $menujson,
- 'timeout' => 120,
- ),
- );
-
- $context = stream_context_create($opts);
- $response = json_decode(file_get_contents($createMenuUrl, false, $context),true);
-
- if(!$response['errcode'] ){
- echo "success";
- }else{
- echo $response['errmsg'];
- }
-
- echo "<pre>";
- print_r($response);
- echo "</pre>";
记得。如果返回成功,你又看不到效果,可以将公众号先取消关注,再加为关注,立刻就能看到效果了。
否则,你要等24小时左右 才能看到效果。
顺便,我也可以承接微信开发(请不要咨询我微信开发怎么做,网上教程很多。。。)
PHP | 评论:0
| 阅读:19793
Submitted by gouki on 2013, December 6, 10:30 AM
最近BTC和LTC很火啊。。但我又没有时间关注它,所以就写了个脚本,利用macosx 的notification来提醒。其实有很多办法,比如chrome的桌面提醒等。windows的messmage,邮件都OK
我这个只是最简单的版本,花了5分钟写完。。用了一些技术:
1、php
2、crontab
3、terminal-notifier (这个是ruby的,在mac下面安装也很简单,直接brew install terminal-notifier 就OK了)
上代码:
PHP代码
- if (count($argv) == 1) {
- echo "\nUse age:\n\n";
- echo "php okcoin.php --ltc=100 --btc=500 \n\n";
- echo "--ltc 代表参数,ltc和btc不分顺序\n\n";
- exit;
- }
- array_shift($argv);
- $params = array();
- foreach ($argv as $val) {
- if (strncasecmp($val, "--", 2) === 0) {
- $p = explode("=", substr($val, 2));
- if (!isset($p[1])) {
- continue;
- }
- $params[trim($p[0])] = trim($p[1]);
- }
- }
- if(!$params){
- exit("参数不正确");
- }
- $api = "https://www.okcoin.com/ticker.do?random=" . rand(1, 9);
- $data = @json_decode(file_get_contents($api), true);
-
- $warning = array(
- 'btc' => 5000,
- 'ltc' => 150,
- );
-
- if ($data) {
- $btcLast = $data['btcLast'];
- $ltcLast = $data['ltcLast'];
- if (isset($params['btc']) && $btcLast <= $params['btc']) {
- exec("terminal-notifier -message '关注一下BTC,价格在指定价位附近了' -title 'BTC 警告'");
- }
- if (isset($params['ltc']) && $ltcLast <= $params['ltc']) {
- exec("terminal-notifier -message '关注一下LTC,价格在指定价位附近了' -title 'LTC 警告'");
- }
- }
- exit;
自用,只是够用就好
Tags: ltc
PHP | 评论:0
| 阅读:14857
Submitted by gouki on 2013, December 3, 9:58 AM
搜索了一些网上的教程,发现网上对于自定义的判断,都是说加个字段或者基于prototype来进行判断就可以了。什么require-text代表必填 之类的。这段时间在对magento做处理的时候发现这样的判断好痛苦(好象,我是指基于产品的FORM的扩展),如果是自己做二次开发,自己写表单,当然这样就OK了
翻看了一下程序,我开始看到资料就是指require-text之类的扩展,那我想,我只要能够加入一个class属性,我就可以基于这个class属性进行判断了,不是吗?
于是我找到了模版的layout,重新定义了layout,表示我可以引入一个指定的js文件,或者引入了代码。
然后,我找到了dispatchEvent,发现有一个事件,但我看了下,在这个事件里我几乎没有什么事情可以做【不过,基于这个事件,我把SKU,日期等做成了自动生成,只是他对表单的验证并没有什么帮助】
找了半天,最后发现数据库有一个backend_model,原来可以为这些程序指定事件,发现SKU有一个事情,是判断 sku的长度不能超过N个字符的,于是对着这个model进行了测试,发现果然OK。添加了几个model,然后update一下数据库,一切就完成了
Tags: magento
PHP | 评论:0
| 阅读:14388
Submitted by gouki on 2013, November 27, 11:51 AM
magento的后台中在tag进行保存的时候做了一次处理,它原先的代码是:
PHP代码
- if (isset($postData['tag_assigned_products']) ) {
意思是如果form提交的时候,有tag_assigned_products字段的话,会进行处理。然而,如果你当时的tag是inactive的时候,在tag of administrator的列表 中是看不到有tag的。这个时候你点保存。那么原来那些tagof administrator的tag就会全部被删除 了。怎么办?
只要你点击那个状态条,看到列表的时候,这个字段就有值了。这时候只有两种处理方式:
1、刷新页面重做处理
2、修改程序。
所以我改成了:
PHP代码
- if (isset($postData['tag_assigned_products']) && $postData['tag_assigned_products']) {
OK,收工
PHP | 评论:0
| 阅读:13853