
小程序研发需要多少钱?贵不贵呢
随着小程序红利的渐渐显现,越来越多的商家、企业开始研发属于自己的小程序。当然他们会首先询问微信小程序开发公司关于:小程序研发需要多少钱?这是每一个企业在研发小程序之前都会问到的问题,今天咱们就从小程序的研发周期、成本等问题来分析研发一个小程序到底需要多少钱,这样企业投资者就知道自己投资开发小程序划不划算了。
其实小程序研发到底需要多少钱,这个不好说。因为小程序的研发费用要取决于你想要实现的小程序的功能,总的来说就是功能越多越复杂研发费用也就越多!
小程序研发费用
1、第三方平台研发
如果是寻求第三方平台研发定制,首先从制作周期上来说要比较节省时间,直接交给第三方开发公司,把你需要实现功能告诉他们然后约定个时间到时直接验收就可以了。
从费用上来看,主要看你开发的小程序是什么类型的。若是企业型的费用会便宜点一般会在3000左右;若是电商类或者功能比较全面型的小程序费用基本都在20000元左右。
2、自主研发
如果选择自主研发,从周期、费用上来说需要花费较长的时间与费用。因为自主研发首先就需要组建一个研发团队,
从目前市场来看小程序的研发费用与功能是成正比关系,功能越全费用也就越高,反之费用也就越低!
本文由专业的微信小程序开发公司燚轩科技整理发布,如需转载请注明出处!
随着小程序红利的渐渐显现,越来越多的商家、企业开始研发属于自己的小程序。当然他们会首先询问微信小程序开发公司关于:小程序研发需要多少钱?这是每一个企业在研发小程序之前都会问到的问题,今天咱们就从小程序的研发周期、成本等问题来分析研发一个小程序到底需要多少钱,这样企业投资者就知道自己投资开发小程序划不划算了。
其实小程序研发到底需要多少钱,这个不好说。因为小程序的研发费用要取决于你想要实现的小程序的功能,总的来说就是功能越多越复杂研发费用也就越多!
小程序研发费用
1、第三方平台研发
如果是寻求第三方平台研发定制,首先从制作周期上来说要比较节省时间,直接交给第三方开发公司,把你需要实现功能告诉他们然后约定个时间到时直接验收就可以了。
从费用上来看,主要看你开发的小程序是什么类型的。若是企业型的费用会便宜点一般会在3000左右;若是电商类或者功能比较全面型的小程序费用基本都在20000元左右。
2、自主研发
如果选择自主研发,从周期、费用上来说需要花费较长的时间与费用。因为自主研发首先就需要组建一个研发团队,
从目前市场来看小程序的研发费用与功能是成正比关系,功能越全费用也就越高,反之费用也就越低!
本文由专业的微信小程序开发公司燚轩科技整理发布,如需转载请注明出处!

打包问题:manifest.plus.distribute.splashscreen.ios.iphone.default;
几分钟前打包正常,麻烦看一下。。
manifest.plus.distribute.splashscreen.ios.iphone.default;
BuildConfigure Failed 31007 无法导入p12证书plus->distribute->apple->p12
BuildConfigure Failed 31007 无法导入p12证书plus->distribute->apple->p12
几分钟前打包正常,麻烦看一下。。
manifest.plus.distribute.splashscreen.ios.iphone.default;
BuildConfigure Failed 31007 无法导入p12证书plus->distribute->apple->p12
BuildConfigure Failed 31007 无法导入p12证书plus->distribute->apple->p12
收起阅读 »
微信支付 -100 错误 -1错误解决分析与办法
我下载的是官方的支付demo V3版本php服务端..
今天在写H5+的时候 遇到一个-100的问题.
核对了包名
app签名
appid 等数据都无误
一直报-100错误.
最后发现官方服务端demo中
WxPay.Api.php 文件63行 var_dump($response);exit;
造成的输出格式与app需求不符,所以产生的报错.
这个句估计是官方大神们测试的语句. 忘记注释了.
所以大家把这句删掉或者注释掉就正常了.
提醒大家,切记 包名 APP签名 等信息 一定要跟再微信开发平台上设置的一致才行.
我下载的是官方的支付demo V3版本php服务端..
今天在写H5+的时候 遇到一个-100的问题.
核对了包名
app签名
appid 等数据都无误
一直报-100错误.
最后发现官方服务端demo中
WxPay.Api.php 文件63行 var_dump($response);exit;
造成的输出格式与app需求不符,所以产生的报错.
这个句估计是官方大神们测试的语句. 忘记注释了.
所以大家把这句删掉或者注释掉就正常了.
提醒大家,切记 包名 APP签名 等信息 一定要跟再微信开发平台上设置的一致才行.
收起阅读 »
php编程之小程序支付所需规避的问题
对于开发一款小程序来说,经常是需要做支付功能的,但是大家在做这个功能的时候,往往会发现遇到很多自己无法解决的问题,那么对于这个问题,下面就跟大家详细来分析解答一下吧。
重点代码部分:
/*
- A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
- Digest Algorithm, as defined in RFC 1321.
- Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
- Code also contributed by Greg Holt
- See http://pajhome.org.uk/site/legal.html for details.
*/
/*
- Add integers, wrapping at 2^32. This uses 16-bit operations internally
- to work around bugs in some JS interpreters.
*/
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF)
var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
return (msw << 16) | (lsw & 0xFFFF)
}
/*
- Bitwise rotate a 32-bit number to the left.
*/
function rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt))
}
/*
- These functions implement the four basic operations the algorithm uses.
*/
function cmn(q, a, b, x, s, t) {
return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}
function ff(a, b, c, d, x, s, t) {
return cmn((b & c) | ((~b) & d), a, b, x, s, t)
}
function gg(a, b, c, d, x, s, t) {
return cmn((b & d) | (c & (~d)), a, b, x, s, t)
}
function hh(a, b, c, d, x, s, t) {
return cmn(b ^ c ^ d, a, b, x, s, t)
}
function ii(a, b, c, d, x, s, t) {
return cmn(c ^ (b | (~d)), a, b, x, s, t)
}
/*
- Calculate the MD5 of an array of little-endian words, producing an array
- of little-endian words.
*/
function coreMD5(x) {
var a = 1732584193
var b = -271733879
var c = -1732584194
var d = 271733878
for (var i = 0; i < x.length; i += 16) {
var olda = a
var oldb = b
var oldc = c
var oldd = d
a = ff(a, b, c, d, x[i + 0], 7, -680876936)
d = ff(d, a, b, c, x[i + 1], 12, -389564586)
c = ff(c, d, a, b, x[i + 2], 17, 606105819)
b = ff(b, c, d, a, x[i + 3], 22, -1044525330)
a = ff(a, b, c, d, x[i + 4], 7, -176418897)
d = ff(d, a, b, c, x[i + 5], 12, 1200080426)
c = ff(c, d, a, b, x[i + 6], 17, -1473231341)
b = ff(b, c, d, a, x[i + 7], 22, -45705983)
a = ff(a, b, c, d, x[i + 8], 7, 1770035416)
d = ff(d, a, b, c, x[i + 9], 12, -1958414417)
c = ff(c, d, a, b, x[i + 10], 17, -42063)
b = ff(b, c, d, a, x[i + 11], 22, -1990404162)
a = ff(a, b, c, d, x[i + 12], 7, 1804603682)
d = ff(d, a, b, c, x[i + 13], 12, -40341101)
c = ff(c, d, a, b, x[i + 14], 17, -1502002290)
b = ff(b, c, d, a, x[i + 15], 22, 1236535329)
a = gg(a, b, c, d, x[i + 1], 5, -165796510)
d = gg(d, a, b, c, x[i + 6], 9, -1069501632)
c = gg(c, d, a, b, x[i + 11], 14, 643717713)
b = gg(b, c, d, a, x[i + 0], 20, -373897302)
a = gg(a, b, c, d, x[i + 5], 5, -701558691)
d = gg(d, a, b, c, x[i + 10], 9, 38016083)
c = gg(c, d, a, b, x[i + 15], 14, -660478335)
b = gg(b, c, d, a, x[i + 4], 20, -405537848)
a = gg(a, b, c, d, x[i + 9], 5, 568446438)
d = gg(d, a, b, c, x[i + 14], 9, -1019803690)
c = gg(c, d, a, b, x[i + 3], 14, -187363961)
b = gg(b, c, d, a, x[i + 8], 20, 1163531501)
a = gg(a, b, c, d, x[i + 13], 5, -1444681467)
d = gg(d, a, b, c, x[i + 2], 9, -51403784)
c = gg(c, d, a, b, x[i + 7], 14, 1735328473)
b = gg(b, c, d, a, x[i + 12], 20, -1926607734)
a = hh(a, b, c, d, x[i + 5], 4, -378558)
d = hh(d, a, b, c, x[i + 8], 11, -2022574463)
c = hh(c, d, a, b, x[i + 11], 16, 1839030562)
b = hh(b, c, d, a, x[i + 14], 23, -35309556)
a = hh(a, b, c, d, x[i + 1], 4, -1530992060)
d = hh(d, a, b, c, x[i + 4], 11, 1272893353)
c = hh(c, d, a, b, x[i + 7], 16, -155497632)
b = hh(b, c, d, a, x[i + 10], 23, -1094730640)
a = hh(a, b, c, d, x[i + 13], 4, 681279174)
d = hh(d, a, b, c, x[i + 0], 11, -358537222)
c = hh(c, d, a, b, x[i + 3], 16, -722521979)
b = hh(b, c, d, a, x[i + 6], 23, 76029189)
a = hh(a, b, c, d, x[i + 9], 4, -640364487)
d = hh(d, a, b, c, x[i + 12], 11, -421815835)
c = hh(c, d, a, b, x[i + 15], 16, 530742520)
b = hh(b, c, d, a, x[i + 2], 23, -995338651)
a = ii(a, b, c, d, x[i + 0], 6, -198630844)
d = ii(d, a, b, c, x[i + 7], 10, 1126891415)
c = ii(c, d, a, b, x[i + 14], 15, -1416354905)
b = ii(b, c, d, a, x[i + 5], 21, -57434055)
a = ii(a, b, c, d, x[i + 12], 6, 1700485571)
d = ii(d, a, b, c, x[i + 3], 10, -1894986606)
c = ii(c, d, a, b, x[i + 10], 15, -1051523)
b = ii(b, c, d, a, x[i + 1], 21, -2054922799)
a = ii(a, b, c, d, x[i + 8], 6, 1873313359)
d = ii(d, a, b, c, x[i + 15], 10, -30611744)
c = ii(c, d, a, b, x[i + 6], 15, -1560198380)
b = ii(b, c, d, a, x[i + 13], 21, 1309151649)
a = ii(a, b, c, d, x[i + 4], 6, -145523070)
d = ii(d, a, b, c, x[i + 11], 10, -1120210379)
c = ii(c, d, a, b, x[i + 2], 15, 718787259)
b = ii(b, c, d, a, x[i + 9], 21, -343485551)
a = safe_add(a, olda)
b = safe_add(b, oldb)
c = safe_add(c, oldc)
d = safe_add(d, oldd)
}
return [a, b, c, d]
}
/*
- Convert an array of little-endian words to a hex string.
/
function binl2hex(binarray) {
var hex_tab = "0123456789abcdef"
var str = ""
for (var i = 0; i < binarray.length 4; i++) {
str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) 8 + 4)) & 0xF) +
hex_tab.charAt((binarray[i >> 2] >> ((i % 4) 8)) & 0xF)
}
return str
}
/*
- Convert an array of little-endian words to a base64 encoded string.
/
function binl2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
var str = ""
for (var i = 0; i < binarray.length 32; i += 6) {
str += tab.charAt(((binarray[i >> 5] << (i % 32)) & 0x3F) |
((binarray[i >> 5 + 1] >> (32 - i % 32)) & 0x3F))
}
return str
}
/*
- Convert an 8-bit character string to a sequence of 16-word blocks, stored
- as an array, and append appropriate padding for MD4/5 calculation.
- If any of the characters are >255, the high byte is silently ignored.
/
function str2binl(str) {
var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
var blks = new Array(nblk 16)
for (var i = 0; i < nblk 16; i++) blks[i] = 0
for (var i = 0; i < str.length; i++)
blks[i >> 2] |= (str.charCodeAt(i) & 0xFF) << ((i % 4) 8)
blks[i >> 2] |= 0x80 << ((i % 4) 8)
blks[nblk 16 - 2] = str.length * 8
return blks
}
/*
- Convert a wide-character string to a sequence of 16-word blocks, stored as
- an array, and append appropriate padding for MD4/5 calculation.
/
function strw2binl(str) {
var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
var blks = new Array(nblk 16)
for (var i = 0; i < nblk 16; i++) blks[i] = 0
for (var i = 0; i < str.length; i++)
blks[i >> 1] |= str.charCodeAt(i) << ((i % 2) 16)
blks[i >> 1] |= 0x80 << ((i % 2) 16)
blks[nblk 16 - 2] = str.length * 16
return blks
}
/*
- External interface
/
function hexMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
function b64MD5(str) { return binl2b64(coreMD5(str2binl(str))) }
function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
/ Backward compatibility */
function calcMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
module.exports = {
hexMD5: hexMD5
}
然后在js中引入
至此参数都有了就可以调用:wx.requestPayment
之后就是回调函数;回调方法接收统一下单方法返回的值,可以这样做,在xcxpay方法里是用&链接的,现在用&分割就可以得到想要的数据,再做处理就Ok!
告诉微信你已经接到过通知 返回”success”;至此小程序微信支付就搞定了,现在大家通过学习已经知道要规避哪些问题了吧,也知道具体出错在哪里了吧,那么如果还存在有疑问的,可以留言咨询。
本文由专业的微信小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处。
对于开发一款小程序来说,经常是需要做支付功能的,但是大家在做这个功能的时候,往往会发现遇到很多自己无法解决的问题,那么对于这个问题,下面就跟大家详细来分析解答一下吧。
重点代码部分:
/*
- A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
- Digest Algorithm, as defined in RFC 1321.
- Version 1.1 Copyright (C) Paul Johnston 1999 - 2002.
- Code also contributed by Greg Holt
- See http://pajhome.org.uk/site/legal.html for details.
*/
/*
- Add integers, wrapping at 2^32. This uses 16-bit operations internally
- to work around bugs in some JS interpreters.
*/
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF)
var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
return (msw << 16) | (lsw & 0xFFFF)
}
/*
- Bitwise rotate a 32-bit number to the left.
*/
function rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt))
}
/*
- These functions implement the four basic operations the algorithm uses.
*/
function cmn(q, a, b, x, s, t) {
return safe_add(rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
}
function ff(a, b, c, d, x, s, t) {
return cmn((b & c) | ((~b) & d), a, b, x, s, t)
}
function gg(a, b, c, d, x, s, t) {
return cmn((b & d) | (c & (~d)), a, b, x, s, t)
}
function hh(a, b, c, d, x, s, t) {
return cmn(b ^ c ^ d, a, b, x, s, t)
}
function ii(a, b, c, d, x, s, t) {
return cmn(c ^ (b | (~d)), a, b, x, s, t)
}
/*
- Calculate the MD5 of an array of little-endian words, producing an array
- of little-endian words.
*/
function coreMD5(x) {
var a = 1732584193
var b = -271733879
var c = -1732584194
var d = 271733878
for (var i = 0; i < x.length; i += 16) {
var olda = a
var oldb = b
var oldc = c
var oldd = d
a = ff(a, b, c, d, x[i + 0], 7, -680876936)
d = ff(d, a, b, c, x[i + 1], 12, -389564586)
c = ff(c, d, a, b, x[i + 2], 17, 606105819)
b = ff(b, c, d, a, x[i + 3], 22, -1044525330)
a = ff(a, b, c, d, x[i + 4], 7, -176418897)
d = ff(d, a, b, c, x[i + 5], 12, 1200080426)
c = ff(c, d, a, b, x[i + 6], 17, -1473231341)
b = ff(b, c, d, a, x[i + 7], 22, -45705983)
a = ff(a, b, c, d, x[i + 8], 7, 1770035416)
d = ff(d, a, b, c, x[i + 9], 12, -1958414417)
c = ff(c, d, a, b, x[i + 10], 17, -42063)
b = ff(b, c, d, a, x[i + 11], 22, -1990404162)
a = ff(a, b, c, d, x[i + 12], 7, 1804603682)
d = ff(d, a, b, c, x[i + 13], 12, -40341101)
c = ff(c, d, a, b, x[i + 14], 17, -1502002290)
b = ff(b, c, d, a, x[i + 15], 22, 1236535329)
a = gg(a, b, c, d, x[i + 1], 5, -165796510)
d = gg(d, a, b, c, x[i + 6], 9, -1069501632)
c = gg(c, d, a, b, x[i + 11], 14, 643717713)
b = gg(b, c, d, a, x[i + 0], 20, -373897302)
a = gg(a, b, c, d, x[i + 5], 5, -701558691)
d = gg(d, a, b, c, x[i + 10], 9, 38016083)
c = gg(c, d, a, b, x[i + 15], 14, -660478335)
b = gg(b, c, d, a, x[i + 4], 20, -405537848)
a = gg(a, b, c, d, x[i + 9], 5, 568446438)
d = gg(d, a, b, c, x[i + 14], 9, -1019803690)
c = gg(c, d, a, b, x[i + 3], 14, -187363961)
b = gg(b, c, d, a, x[i + 8], 20, 1163531501)
a = gg(a, b, c, d, x[i + 13], 5, -1444681467)
d = gg(d, a, b, c, x[i + 2], 9, -51403784)
c = gg(c, d, a, b, x[i + 7], 14, 1735328473)
b = gg(b, c, d, a, x[i + 12], 20, -1926607734)
a = hh(a, b, c, d, x[i + 5], 4, -378558)
d = hh(d, a, b, c, x[i + 8], 11, -2022574463)
c = hh(c, d, a, b, x[i + 11], 16, 1839030562)
b = hh(b, c, d, a, x[i + 14], 23, -35309556)
a = hh(a, b, c, d, x[i + 1], 4, -1530992060)
d = hh(d, a, b, c, x[i + 4], 11, 1272893353)
c = hh(c, d, a, b, x[i + 7], 16, -155497632)
b = hh(b, c, d, a, x[i + 10], 23, -1094730640)
a = hh(a, b, c, d, x[i + 13], 4, 681279174)
d = hh(d, a, b, c, x[i + 0], 11, -358537222)
c = hh(c, d, a, b, x[i + 3], 16, -722521979)
b = hh(b, c, d, a, x[i + 6], 23, 76029189)
a = hh(a, b, c, d, x[i + 9], 4, -640364487)
d = hh(d, a, b, c, x[i + 12], 11, -421815835)
c = hh(c, d, a, b, x[i + 15], 16, 530742520)
b = hh(b, c, d, a, x[i + 2], 23, -995338651)
a = ii(a, b, c, d, x[i + 0], 6, -198630844)
d = ii(d, a, b, c, x[i + 7], 10, 1126891415)
c = ii(c, d, a, b, x[i + 14], 15, -1416354905)
b = ii(b, c, d, a, x[i + 5], 21, -57434055)
a = ii(a, b, c, d, x[i + 12], 6, 1700485571)
d = ii(d, a, b, c, x[i + 3], 10, -1894986606)
c = ii(c, d, a, b, x[i + 10], 15, -1051523)
b = ii(b, c, d, a, x[i + 1], 21, -2054922799)
a = ii(a, b, c, d, x[i + 8], 6, 1873313359)
d = ii(d, a, b, c, x[i + 15], 10, -30611744)
c = ii(c, d, a, b, x[i + 6], 15, -1560198380)
b = ii(b, c, d, a, x[i + 13], 21, 1309151649)
a = ii(a, b, c, d, x[i + 4], 6, -145523070)
d = ii(d, a, b, c, x[i + 11], 10, -1120210379)
c = ii(c, d, a, b, x[i + 2], 15, 718787259)
b = ii(b, c, d, a, x[i + 9], 21, -343485551)
a = safe_add(a, olda)
b = safe_add(b, oldb)
c = safe_add(c, oldc)
d = safe_add(d, oldd)
}
return [a, b, c, d]
}
/*
- Convert an array of little-endian words to a hex string.
/
function binl2hex(binarray) {
var hex_tab = "0123456789abcdef"
var str = ""
for (var i = 0; i < binarray.length 4; i++) {
str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) 8 + 4)) & 0xF) +
hex_tab.charAt((binarray[i >> 2] >> ((i % 4) 8)) & 0xF)
}
return str
}
/*
- Convert an array of little-endian words to a base64 encoded string.
/
function binl2b64(binarray) {
var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
var str = ""
for (var i = 0; i < binarray.length 32; i += 6) {
str += tab.charAt(((binarray[i >> 5] << (i % 32)) & 0x3F) |
((binarray[i >> 5 + 1] >> (32 - i % 32)) & 0x3F))
}
return str
}
/*
- Convert an 8-bit character string to a sequence of 16-word blocks, stored
- as an array, and append appropriate padding for MD4/5 calculation.
- If any of the characters are >255, the high byte is silently ignored.
/
function str2binl(str) {
var nblk = ((str.length + 8) >> 6) + 1 // number of 16-word blocks
var blks = new Array(nblk 16)
for (var i = 0; i < nblk 16; i++) blks[i] = 0
for (var i = 0; i < str.length; i++)
blks[i >> 2] |= (str.charCodeAt(i) & 0xFF) << ((i % 4) 8)
blks[i >> 2] |= 0x80 << ((i % 4) 8)
blks[nblk 16 - 2] = str.length * 8
return blks
}
/*
- Convert a wide-character string to a sequence of 16-word blocks, stored as
- an array, and append appropriate padding for MD4/5 calculation.
/
function strw2binl(str) {
var nblk = ((str.length + 4) >> 5) + 1 // number of 16-word blocks
var blks = new Array(nblk 16)
for (var i = 0; i < nblk 16; i++) blks[i] = 0
for (var i = 0; i < str.length; i++)
blks[i >> 1] |= str.charCodeAt(i) << ((i % 2) 16)
blks[i >> 1] |= 0x80 << ((i % 2) 16)
blks[nblk 16 - 2] = str.length * 16
return blks
}
/*
- External interface
/
function hexMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
function hexMD5w(str) { return binl2hex(coreMD5(strw2binl(str))) }
function b64MD5(str) { return binl2b64(coreMD5(str2binl(str))) }
function b64MD5w(str) { return binl2b64(coreMD5(strw2binl(str))) }
/ Backward compatibility */
function calcMD5(str) { return binl2hex(coreMD5(str2binl(str))) }
module.exports = {
hexMD5: hexMD5
}
然后在js中引入
至此参数都有了就可以调用:wx.requestPayment
之后就是回调函数;回调方法接收统一下单方法返回的值,可以这样做,在xcxpay方法里是用&链接的,现在用&分割就可以得到想要的数据,再做处理就Ok!
告诉微信你已经接到过通知 返回”success”;至此小程序微信支付就搞定了,现在大家通过学习已经知道要规避哪些问题了吧,也知道具体出错在哪里了吧,那么如果还存在有疑问的,可以留言咨询。
本文由专业的微信小程序开发公司燚轩科技整理发布,原创不易,如需转载请注明出处。
收起阅读 »
【分享】合理地利用入口页初始化应用的信息
开发 5+ App 时,『页面入口』通常会配置为应用的首页。这种配置方式,也存在着一些不方便的地方:
- 首页比较特殊,一些配置需要在 manifest.json 中填写。比如 titleNView、subNViews 等。
- 登录状态或者环境语言等信息,可能需要在应用启动的时候尽可能早的获取。这些状态也会影响到首页的信息,修改操作不是很方便。
其实可以换一个思路,利用『页面入口』作为一个初始化的页面。这个页面不显示出来,登录状态或者语言等信息的处理在这里完成。
调整页面
依旧使用 index.html 作为入口,同时调整 splash 为手动关闭。新建一个 home.html 作为实际的首页,id 约定为 home。
index.html
因为这个页面没有实际的内容,因此前面需要将 splash 调整为手动关闭,防止白屏。
在这个页面完成的工作有:
- 获取登录状态
- 获取当前系统语言信息
- 监听 backbutton
获取完相关信息后,打开实际的首页窗口。如果需要用到 titleNView 或者 subNViews,那么在 js 中完成配置或绘制,相较于在 json 中配置会更加灵活。
var url = 'home.html';
var login = $login.getValue();
var lang = $lang.getValue();
var webview = null;
url += '?login=' + login + '&lang=' + lang;
webview = plus.webview.create(url, 'home', {
titleNView: {
backgroundColor: '#ff3333',
titleText: '首页',
titleColor: '#ffffff',
},
});
webview.show('none');
注意这里未使用动画效果,一来节省开销,二来动画也看不到。
home.html
这是真正的首页,在这个页面要完成的工作主要有:
- 获取入口页传递过来的参数信息。
- 根据参数信息,初始化相应的内容。
- 在合理的时机选择关闭 splash。
登录
未登录状态下,其实有两种引导用户登录的方式。
- 弹框提示用户去登录。
- 直接打开登录页,并且登录页点击 back 触发退出的逻辑。
如果选择直接打开登录页,就可以理解为应用是强制需要登录的,那么登录页 back 需要走退出的逻辑。并且 splash 的关闭也应当在登录页完成。
语言
语言信息的初始化,建议两种方式。
- 应用本地 js 中存储配置读取。
- 联网从服务器拉取。
无论选择哪种方式,都应当在渲染语言信息相关的内容后,再选择关闭 splash。
结束
实际开发中,需要根据业务场景灵活掌握,而非一成不变。附件中有一个简单的示例项目,下载后直接拖到 HBuilder/HBuilderX 中真机运行即可预览效果。
注意:这是 5+ App 是移动应用,不要再问为什么浏览器中没有效果这种问题了。
开发 5+ App 时,『页面入口』通常会配置为应用的首页。这种配置方式,也存在着一些不方便的地方:
- 首页比较特殊,一些配置需要在 manifest.json 中填写。比如 titleNView、subNViews 等。
- 登录状态或者环境语言等信息,可能需要在应用启动的时候尽可能早的获取。这些状态也会影响到首页的信息,修改操作不是很方便。
其实可以换一个思路,利用『页面入口』作为一个初始化的页面。这个页面不显示出来,登录状态或者语言等信息的处理在这里完成。
调整页面
依旧使用 index.html 作为入口,同时调整 splash 为手动关闭。新建一个 home.html 作为实际的首页,id 约定为 home。
index.html
因为这个页面没有实际的内容,因此前面需要将 splash 调整为手动关闭,防止白屏。
在这个页面完成的工作有:
- 获取登录状态
- 获取当前系统语言信息
- 监听 backbutton
获取完相关信息后,打开实际的首页窗口。如果需要用到 titleNView 或者 subNViews,那么在 js 中完成配置或绘制,相较于在 json 中配置会更加灵活。
var url = 'home.html';
var login = $login.getValue();
var lang = $lang.getValue();
var webview = null;
url += '?login=' + login + '&lang=' + lang;
webview = plus.webview.create(url, 'home', {
titleNView: {
backgroundColor: '#ff3333',
titleText: '首页',
titleColor: '#ffffff',
},
});
webview.show('none');
注意这里未使用动画效果,一来节省开销,二来动画也看不到。
home.html
这是真正的首页,在这个页面要完成的工作主要有:
- 获取入口页传递过来的参数信息。
- 根据参数信息,初始化相应的内容。
- 在合理的时机选择关闭 splash。
登录
未登录状态下,其实有两种引导用户登录的方式。
- 弹框提示用户去登录。
- 直接打开登录页,并且登录页点击 back 触发退出的逻辑。
如果选择直接打开登录页,就可以理解为应用是强制需要登录的,那么登录页 back 需要走退出的逻辑。并且 splash 的关闭也应当在登录页完成。
语言
语言信息的初始化,建议两种方式。
- 应用本地 js 中存储配置读取。
- 联网从服务器拉取。
无论选择哪种方式,都应当在渲染语言信息相关的内容后,再选择关闭 splash。
结束
实际开发中,需要根据业务场景灵活掌握,而非一成不变。附件中有一个简单的示例项目,下载后直接拖到 HBuilder/HBuilderX 中真机运行即可预览效果。
注意:这是 5+ App 是移动应用,不要再问为什么浏览器中没有效果这种问题了。
收起阅读 »
为什么我要用GoEasy替代WebSocket
最近一个紧急项目里,出于考虑节约开发成本和缩短开发周期的目的,我选择用GoEasy来替代自己搭建WebSocket,当然我也考虑过workerman和融云等同类型的产品。最后选择GoEasy的原因只有2点,极简、稳定。
我可以来说一下我在项目里从GoEasy得到了哪些实质性的帮助,这里敲黑板,可能其中的一到两条就是你想要的。
uniapp websocket体验demo:https://ext.dcloud.net.cn/plugin?id=1334
1 简单
我是写Java的,GoEasy里有自己的依赖包,我从注册到获取APP key,到自己写好代码到跑通推送不到30分钟,在我看来这是目前能最大程度减少开发成本和缩短开发周期的三方WebSocket的产品。从GoEasy这边所需要获取的也只有1个APP key和1个地址。
2 稳定
因为简单心里肯定会充满不确定性,担心稳定性不高,看官网所说的多集群和可靠容灾,因为我购买的消息数量不多,测了1W条,从开始到完成0.67S,没有漏发,还是很稳定的。
3 兼容性
从浏览器到代码类型,GoEasy兼容性做的可以说是很完善了,我从IE6开始测,目前没有发现不支持的浏览器。同时官网上的快速入门可以看到,可以支持任何开发语言。
4 安全
我这个项目消息推送数量不多,但是并发连接数量会比较多一点,所以我付了费增加并发数量,同时也体验了一下GoEasy所谓的独创的OTP技术,在app key和推送消息隐私方面做的很不错,具体的不多说,有兴趣可以去自己去了解一下。
5 应用范围
可以说GoEasy 的应用范围非常广泛了,整个WebScoket这一块完全不用你管,我觉得可以适用于任何web项目中。
这是我从用GoEasy得到的总结,当然可能没有说的很完整,如果你现在需求WebSocket而没有太多的时间去做这一块的话,可以去试试GoEasy的免费版。推荐原因很简单,因为真的很简单。(www.goeasy.io)
最近一个紧急项目里,出于考虑节约开发成本和缩短开发周期的目的,我选择用GoEasy来替代自己搭建WebSocket,当然我也考虑过workerman和融云等同类型的产品。最后选择GoEasy的原因只有2点,极简、稳定。
我可以来说一下我在项目里从GoEasy得到了哪些实质性的帮助,这里敲黑板,可能其中的一到两条就是你想要的。
uniapp websocket体验demo:https://ext.dcloud.net.cn/plugin?id=1334
1 简单
我是写Java的,GoEasy里有自己的依赖包,我从注册到获取APP key,到自己写好代码到跑通推送不到30分钟,在我看来这是目前能最大程度减少开发成本和缩短开发周期的三方WebSocket的产品。从GoEasy这边所需要获取的也只有1个APP key和1个地址。
2 稳定
因为简单心里肯定会充满不确定性,担心稳定性不高,看官网所说的多集群和可靠容灾,因为我购买的消息数量不多,测了1W条,从开始到完成0.67S,没有漏发,还是很稳定的。
3 兼容性
从浏览器到代码类型,GoEasy兼容性做的可以说是很完善了,我从IE6开始测,目前没有发现不支持的浏览器。同时官网上的快速入门可以看到,可以支持任何开发语言。
4 安全
我这个项目消息推送数量不多,但是并发连接数量会比较多一点,所以我付了费增加并发数量,同时也体验了一下GoEasy所谓的独创的OTP技术,在app key和推送消息隐私方面做的很不错,具体的不多说,有兴趣可以去自己去了解一下。
5 应用范围
可以说GoEasy 的应用范围非常广泛了,整个WebScoket这一块完全不用你管,我觉得可以适用于任何web项目中。
这是我从用GoEasy得到的总结,当然可能没有说的很完整,如果你现在需求WebSocket而没有太多的时间去做这一块的话,可以去试试GoEasy的免费版。推荐原因很简单,因为真的很简单。(www.goeasy.io)
收起阅读 »
开发app是找专业的开发公司好还是自主研发好呢
做app开发是找专业的郑州app开发公司好,还是自己组建团队好呢?其实对于这样的选择,很多人都不知道有什么区别,因此在选择的时候比较犯难,那么对于这样的问题,下面就为大家分析解答一下吧。
一、专业的APP开发公司制作
1、app开发分为部分外包和全部外包。部分外包是指发包者自己完成一部分工作比如企划、美工或者其他一部分技术,剩下的其他部分由app开发公司的专业工程师完成,这样发包者公司是主导者,外包公司或者外包团队只负责配合工作。
2、沟通。外包项目最需要的就是沟通,不管是部分外包还是全部外包,都是需要相互沟通的,只是部分外包要比全部外包的沟通少一些。全部外包是指发包者提供功能需求,从原型图、UI设计到程序开发全部交由专业的外包公司来完成,这是行业里最常见的一种方式,但是全部外包需要事情进行充分的沟通,不然极易引发矛盾,做出的APP项目和客户想象中的差别大,再改动的话耗时耗力,错失了进入市场的时机,那对于双方来说得不偿失。
3、金钱成本。不管是部分外包还是全部外包,外包公司都是根据功能需求和工期进行报价的,这样的话发包者只需要拿出这些成本即可,一般来说要比自己组建团队要节省不少。
二、自主研发APP
1、创建团队。自己创建开发团队进行APP开发的话,至少要包括产品经理、项目经理、UI设计师、后台技术员、安卓技术员、IOS技术员、测试人员,这样才能算是一个完整的开发团队。
2、时间。对于刚组建的开发团队,一切要从零开始,招聘员工需要一定的时间,团队人员相互磨合写作需要时间,这样的话,估计需要两三个月的时间才能组建成功。
3、金钱成本。按照现在的工资每个部门一个人来算,产品经理、项目经理大概在6000~8000左右,技术人员工资大概在10000左右,再加上办公室租金、物业费、水电费等等一些环境成本,还有时间成本,想要开发出一个高质量的APP项目,成本花费至少在50万以上。
以上就是小编总结的关于APP开发是自主研发还是找专业的app软件开发公司,这就要根据自身情况来决定,对于没有团队而经费又不多的创业者来说,APP开发就像一道没有答案的选择题,到底选择哪种开发方式,需要自己慎重考虑,谨慎选择。本文由专业的郑州app开发公司燚轩科技整理发布,如需转载请注明出处。
做app开发是找专业的郑州app开发公司好,还是自己组建团队好呢?其实对于这样的选择,很多人都不知道有什么区别,因此在选择的时候比较犯难,那么对于这样的问题,下面就为大家分析解答一下吧。
一、专业的APP开发公司制作
1、app开发分为部分外包和全部外包。部分外包是指发包者自己完成一部分工作比如企划、美工或者其他一部分技术,剩下的其他部分由app开发公司的专业工程师完成,这样发包者公司是主导者,外包公司或者外包团队只负责配合工作。
2、沟通。外包项目最需要的就是沟通,不管是部分外包还是全部外包,都是需要相互沟通的,只是部分外包要比全部外包的沟通少一些。全部外包是指发包者提供功能需求,从原型图、UI设计到程序开发全部交由专业的外包公司来完成,这是行业里最常见的一种方式,但是全部外包需要事情进行充分的沟通,不然极易引发矛盾,做出的APP项目和客户想象中的差别大,再改动的话耗时耗力,错失了进入市场的时机,那对于双方来说得不偿失。
3、金钱成本。不管是部分外包还是全部外包,外包公司都是根据功能需求和工期进行报价的,这样的话发包者只需要拿出这些成本即可,一般来说要比自己组建团队要节省不少。
二、自主研发APP
1、创建团队。自己创建开发团队进行APP开发的话,至少要包括产品经理、项目经理、UI设计师、后台技术员、安卓技术员、IOS技术员、测试人员,这样才能算是一个完整的开发团队。
2、时间。对于刚组建的开发团队,一切要从零开始,招聘员工需要一定的时间,团队人员相互磨合写作需要时间,这样的话,估计需要两三个月的时间才能组建成功。
3、金钱成本。按照现在的工资每个部门一个人来算,产品经理、项目经理大概在6000~8000左右,技术人员工资大概在10000左右,再加上办公室租金、物业费、水电费等等一些环境成本,还有时间成本,想要开发出一个高质量的APP项目,成本花费至少在50万以上。
以上就是小编总结的关于APP开发是自主研发还是找专业的app软件开发公司,这就要根据自身情况来决定,对于没有团队而经费又不多的创业者来说,APP开发就像一道没有答案的选择题,到底选择哪种开发方式,需要自己慎重考虑,谨慎选择。本文由专业的郑州app开发公司燚轩科技整理发布,如需转载请注明出处。
收起阅读 »
实操:商品列表三级分类的实现方法
对于分类来说,一般包括一级分类,二级分类,三级分类,一般2级分类是比较好做的,大部分网站都是左边点击二级分类,右边显示相对应商品,这就要用到jquery技术了。下面就来为大家详细分析一下该如何实现吧。
首先把二级分类给全部遍历出来,Html代码如下:
<volist name='cate' id='vo'>
<li <if condition="$Think.get.name eq $vo['name']">class="active"</if> onclick="funbrand('{$vo.name}','{$vo.id}')" ">
<span style="font-weight: 600;font-size: 13px;height: 45px; display: flex;justify-content: center;align-items: center;padding: 0;border-right: 5px solid white;" data="{$vo.id}" name="cateid" title="">{$vo.name}</span>
</li>
</volist>
根据需求添加点击事件,写jquery:
jquery代码如下:
function funbrand(id,obj){
debugger;
$(obj).addClass('active');
$(obj).siblings('a').removeClass('active');
cateid=$("span[name='cateid']").attr('data');
$('.all').removeClass('active');
var test=$('.all').attr('title');
var goodscateid = id;
cate_id=$("input[name='cateid1']").val();
$('#id').val(goodscateid);
var types = $('#type').val();
$.ajax({
url:"{:U('Mobile/goods1')}",
data:{goodscateid:goodscateid,types:types,cate_id:cate_id},
dataType:"json",
type:"post",
success:function(data){
alert(data.v);
str = '';
$('.good_list').empty();
if (data.status==1) {
$.each(data.shops,function(index,obj){
str+='<dl class="clearfix">';
if(test=='套餐'){
str+='<dt class="col-sm-5 col-xs-5" style="text-align: center;margin-bottom:25px;margin-top:25px">';
str+='<a style="color:#000;width:200px;overflow:hidden;" href="{:U("Mobile/good_detail")}?gid='+obj.gid+'">';
str+='<em><img src="/Public/Admin/kindeditor-4.1.10/attached/image'+obj.thumb+'" style="width:80%;margin-top:1rem;" class="img-responsive center-block"></em>';
str+='<dd class="col-sm-7 col-xs-7" style="height:14rem;padding-top: 10px;"><div style="height:50px; overflow:hidden;"><h4 style="height: 30px; line-height: 10px; color:#000; ">'+obj.gname+'</h4></div><p style=" font-size:18px;"> .... </p><br/> <p class="money" style="margin-top:0px; margin-bottom:-10px; "><i>¥</i>'+obj.price+'</p><br>';
}else{
str+='<dt class="col-sm-5 col-xs-5" style="text-align: center;margin-bottom:8px;margin-top:8px">';
str+='<a style="color:#000;width:200px;overflow:hidden;" href="{:U("Mobile/good_detail")}?gid='+obj.gid+'">';
str+='<em><img src="/Public/Admin/kindeditor-4.1.10/attached/image'+obj.thumb+'" style="width:80%;margin-top:1rem;" class="img-responsive center-block"></em>';
str+='<span>'+obj.norms+'/'+obj.unity+'</span></a></dt>';
str+='<dd class="col-sm-7 col-xs-7" style="height:14rem;padding-top: 10px;"> <h4 style="height: 30px; line-height: 15px; color:#000; ">'+obj.gname+'</h4> <p class="money" style="margin-top:30px; margin-bottom:-10px; "><i>¥</i>'+obj.price+'</p><br>';
}
if (obj.quota!='0') {
str+=' <span style="border: 1px solid #c63731; padding:2px; color:#c63731;border-radius: 8px; font-size: 10px;">'
str+='限购'+obj.quota+ obj.unity;
str+='</span>';
}
if (obj.repertor==0) {
if(test=='套餐'){
str+=' <em title="'+obj.gid+'" class="addcar" att="'+obj.addnum+'" style="position:absolute;bottom:-15px;right:0px;">';
str+='<img src="/Public/Mobile/images/add_cart.png" class="img-responsive" width="30" /></em>';
}else{
str+=' <em title="'+obj.gid+'" class="addcar" att="'+obj.addnum+'" style="position:absolute;bottom:5px;right:0px;">';
str+='<img src="/Public/Mobile/images/add_cart.png" class="img-responsive" width="30" /></em>';
}
}else{
str+='<em>补货中</em>'
}
str+=' </dd></dl>';
})
$('.good_list').append(str);
$('.good_list').html(str).ready(function(){
$(".addcar").click(function(){
// debugger;
var uid = $('#uid').val();
var gid = $(this).attr('title');
// var cnum = $(this).parent().find("input[class*=num_val]").val();
// alert(uid);
var cnum=$(this).attr('att');
if (uid=='') {
alert('请先登陆');
location="{:U('Mobile/login')}";
return false;
}
$.ajax({
url:"{:U('Mobile/goods_info')}",
data:{gid:gid},
dataType:"json",
type:"post",
success:function(data){
// alert(data);
// alert(data.thumb);
// $(".img").src('/Public/Admin/kindeditor-4.1.10/attached/image'+data.thumb);
var thumb=data.thumb;
var tep='/Public/Admin/kindeditor-4.1.10/attached/image'+thumb;
$("#shopping_img").attr('src', src=tep) ;
$('.mo_shopping_quota').text(data.quota);
$('.mo_shopping_gid').text(data.gid);
$(".title").text(data.gname);
$(".shopping_gui").text(data.norms+'/'+data.unity);
$('.shopping_money').text(data.price);
$('.shelflife').text(data.shelflife);
$('.mo_shopping_gid').text(data.gid);
$('.mo_shopping_addnum').text(data.addnum);
$(".mo_shopping").css("display","block");
$('.num').val(data.addnum);
}
})
})
});
}
},
})
}
Php查询并输出,代码如下:
public function goods1(){
$goodscateid=I('goodscateid');
$cate_id=I('cate_id');
$where['brandid']=array('exp',"regexp '(,|^)" .'$cate_id'."(,|$)'");
// $where['bid']=$goodscateid;
// $info=M("brandlist")->where("bid=$goodscateid")->find();
$info=M("brandlist")->where($where)->select();
foreach ($info as $key => $value) {
$bname=$value['bname'];
$shops[] = M('goodsinfo')->where("brandlist='$bname'")->order("gid desc")->find();
}
foreach ($shops as $key => $value) {
$pic=explode(",",substr($value['thumb'],1,strlen($value['thumb'])));
$shops[$key]['thumb']=$pic[0];
}
if ($shops) {
$returnValue['status']=1;
$returnValue['shops']=$shops;
}else{
$returnValue['status']=2;
}
$this->ajaxReturn($returnValue);
}
好了,现在大家已经知道该怎么做了吧,那么如果还存在有疑问的,可以留言咨询,我们可以共同讨论,一起学习进步。
本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明原文作者及出处!
对于分类来说,一般包括一级分类,二级分类,三级分类,一般2级分类是比较好做的,大部分网站都是左边点击二级分类,右边显示相对应商品,这就要用到jquery技术了。下面就来为大家详细分析一下该如何实现吧。
首先把二级分类给全部遍历出来,Html代码如下:
<volist name='cate' id='vo'>
<li <if condition="$Think.get.name eq $vo['name']">class="active"</if> onclick="funbrand('{$vo.name}','{$vo.id}')" ">
<span style="font-weight: 600;font-size: 13px;height: 45px; display: flex;justify-content: center;align-items: center;padding: 0;border-right: 5px solid white;" data="{$vo.id}" name="cateid" title="">{$vo.name}</span>
</li>
</volist>
根据需求添加点击事件,写jquery:
jquery代码如下:
function funbrand(id,obj){
debugger;
$(obj).addClass('active');
$(obj).siblings('a').removeClass('active');
cateid=$("span[name='cateid']").attr('data');
$('.all').removeClass('active');
var test=$('.all').attr('title');
var goodscateid = id;
cate_id=$("input[name='cateid1']").val();
$('#id').val(goodscateid);
var types = $('#type').val();
$.ajax({
url:"{:U('Mobile/goods1')}",
data:{goodscateid:goodscateid,types:types,cate_id:cate_id},
dataType:"json",
type:"post",
success:function(data){
alert(data.v);
str = '';
$('.good_list').empty();
if (data.status==1) {
$.each(data.shops,function(index,obj){
str+='<dl class="clearfix">';
if(test=='套餐'){
str+='<dt class="col-sm-5 col-xs-5" style="text-align: center;margin-bottom:25px;margin-top:25px">';
str+='<a style="color:#000;width:200px;overflow:hidden;" href="{:U("Mobile/good_detail")}?gid='+obj.gid+'">';
str+='<em><img src="/Public/Admin/kindeditor-4.1.10/attached/image'+obj.thumb+'" style="width:80%;margin-top:1rem;" class="img-responsive center-block"></em>';
str+='<dd class="col-sm-7 col-xs-7" style="height:14rem;padding-top: 10px;"><div style="height:50px; overflow:hidden;"><h4 style="height: 30px; line-height: 10px; color:#000; ">'+obj.gname+'</h4></div><p style=" font-size:18px;"> .... </p><br/> <p class="money" style="margin-top:0px; margin-bottom:-10px; "><i>¥</i>'+obj.price+'</p><br>';
}else{
str+='<dt class="col-sm-5 col-xs-5" style="text-align: center;margin-bottom:8px;margin-top:8px">';
str+='<a style="color:#000;width:200px;overflow:hidden;" href="{:U("Mobile/good_detail")}?gid='+obj.gid+'">';
str+='<em><img src="/Public/Admin/kindeditor-4.1.10/attached/image'+obj.thumb+'" style="width:80%;margin-top:1rem;" class="img-responsive center-block"></em>';
str+='<span>'+obj.norms+'/'+obj.unity+'</span></a></dt>';
str+='<dd class="col-sm-7 col-xs-7" style="height:14rem;padding-top: 10px;"> <h4 style="height: 30px; line-height: 15px; color:#000; ">'+obj.gname+'</h4> <p class="money" style="margin-top:30px; margin-bottom:-10px; "><i>¥</i>'+obj.price+'</p><br>';
}
if (obj.quota!='0') {
str+=' <span style="border: 1px solid #c63731; padding:2px; color:#c63731;border-radius: 8px; font-size: 10px;">'
str+='限购'+obj.quota+ obj.unity;
str+='</span>';
}
if (obj.repertor==0) {
if(test=='套餐'){
str+=' <em title="'+obj.gid+'" class="addcar" att="'+obj.addnum+'" style="position:absolute;bottom:-15px;right:0px;">';
str+='<img src="/Public/Mobile/images/add_cart.png" class="img-responsive" width="30" /></em>';
}else{
str+=' <em title="'+obj.gid+'" class="addcar" att="'+obj.addnum+'" style="position:absolute;bottom:5px;right:0px;">';
str+='<img src="/Public/Mobile/images/add_cart.png" class="img-responsive" width="30" /></em>';
}
}else{
str+='<em>补货中</em>'
}
str+=' </dd></dl>';
})
$('.good_list').append(str);
$('.good_list').html(str).ready(function(){
$(".addcar").click(function(){
// debugger;
var uid = $('#uid').val();
var gid = $(this).attr('title');
// var cnum = $(this).parent().find("input[class*=num_val]").val();
// alert(uid);
var cnum=$(this).attr('att');
if (uid=='') {
alert('请先登陆');
location="{:U('Mobile/login')}";
return false;
}
$.ajax({
url:"{:U('Mobile/goods_info')}",
data:{gid:gid},
dataType:"json",
type:"post",
success:function(data){
// alert(data);
// alert(data.thumb);
// $(".img").src('/Public/Admin/kindeditor-4.1.10/attached/image'+data.thumb);
var thumb=data.thumb;
var tep='/Public/Admin/kindeditor-4.1.10/attached/image'+thumb;
$("#shopping_img").attr('src', src=tep) ;
$('.mo_shopping_quota').text(data.quota);
$('.mo_shopping_gid').text(data.gid);
$(".title").text(data.gname);
$(".shopping_gui").text(data.norms+'/'+data.unity);
$('.shopping_money').text(data.price);
$('.shelflife').text(data.shelflife);
$('.mo_shopping_gid').text(data.gid);
$('.mo_shopping_addnum').text(data.addnum);
$(".mo_shopping").css("display","block");
$('.num').val(data.addnum);
}
})
})
});
}
},
})
}
Php查询并输出,代码如下:
public function goods1(){
$goodscateid=I('goodscateid');
$cate_id=I('cate_id');
$where['brandid']=array('exp',"regexp '(,|^)" .'$cate_id'."(,|$)'");
// $where['bid']=$goodscateid;
// $info=M("brandlist")->where("bid=$goodscateid")->find();
$info=M("brandlist")->where($where)->select();
foreach ($info as $key => $value) {
$bname=$value['bname'];
$shops[] = M('goodsinfo')->where("brandlist='$bname'")->order("gid desc")->find();
}
foreach ($shops as $key => $value) {
$pic=explode(",",substr($value['thumb'],1,strlen($value['thumb'])));
$shops[$key]['thumb']=$pic[0];
}
if ($shops) {
$returnValue['status']=1;
$returnValue['shops']=$shops;
}else{
$returnValue['status']=2;
}
$this->ajaxReturn($returnValue);
}
好了,现在大家已经知道该怎么做了吧,那么如果还存在有疑问的,可以留言咨询,我们可以共同讨论,一起学习进步。
本文由专业的郑州app开发公司燚轩科技整理发布,原创不易,如需转载请注明原文作者及出处!
收起阅读 »
创建一个uniApp小组织!欢迎大家一起来交流采坑!
以前一直用Dcloud和api开发混合app,最近官方推出一个uniApp 总要一起采坑吧,欢迎大家进群一起交流或者分享经验。
QQ群:854873282。
以前一直用Dcloud和api开发混合app,最近官方推出一个uniApp 总要一起采坑吧,欢迎大家进群一起交流或者分享经验。
QQ群:854873282。

app开发容易吗,最快的开发制作时间是多久
开发一个app多少钱?开发一个app需要多长的时间?这是很多的客户都会问到的一个问题。根据客户的开发的app的类型,开发的需求,不同的app开发都会有范围内的变化。但是一般的app开发的周期在3到6个月,如果需要开发的app功能比较的复杂,或者很特别,有或者有很多新的创意元素,其开发的周期也会相应的延长。如果想要知道具体的app开发的时间需要多久的话,那么下面就跟大家讲解一下app开发中各阶段所花费的大概时间。
想要了解开发一款app需要多长时间,需要先知道影响一个app开发的周期的因素有什么呢?除了是选择开发方案的定制还是选择模板以外,还有其他因素影响,这里以定制开发的方案,根据开发方案上的要求,定制开发,满足所有的功能需求。开发的流程中各个阶段需要花费的大概时间。
1、数据整合:允许用户访问数据,向第三方展示数据。所花费时间大致为2-3天;
2、数据储存:建立本地的app板块,也就是后端进行实现数据储存。所花时间大致为3-5天;
3、用户账号管理:创建用户账号的管理,接入管理系统。几分钟时间就可以搞定,不计入总开发时间内;
4、框架设计:根据开发的要求,设计app的框架,进行用户的体验和交互。所花时间大致为1-2天;
5、UI设计:根据app的特点设计良好的用户体验UI,保持界面的良好的交互性。所花时间大致为7-10天左右;
7、UI开发;把UI的模块转变成可以运行的代码,功能界面。所花时间大致为1-2天;
8、程序语言开发:根据app开发的功能等各方面的要求,开发出可运行的程序语言,变成可实现功能的app。所花时间大致为2-3个月;
9、app测试:测试app的功能性、交互性。站在用户的角度测试app的各方面的内容,包括是bug修复。所花时间大致为3-5天;
10、反复的测试app,不断的完善app功能,交互,实现开发方案的所有的需求。所花时间大致为2-3天。
影响一个app的开发的周期时间的因素有前端设计、用户界面、 后端整合、用户管理、身份验证等。一个专业的app开发公司能够根据多年来的开发经验,尽量的缩短开发的时间长度,满足客户的要求。信息来由郑州app开发公司燚轩科技整理发布。
开发一个app多少钱?开发一个app需要多长的时间?这是很多的客户都会问到的一个问题。根据客户的开发的app的类型,开发的需求,不同的app开发都会有范围内的变化。但是一般的app开发的周期在3到6个月,如果需要开发的app功能比较的复杂,或者很特别,有或者有很多新的创意元素,其开发的周期也会相应的延长。如果想要知道具体的app开发的时间需要多久的话,那么下面就跟大家讲解一下app开发中各阶段所花费的大概时间。
想要了解开发一款app需要多长时间,需要先知道影响一个app开发的周期的因素有什么呢?除了是选择开发方案的定制还是选择模板以外,还有其他因素影响,这里以定制开发的方案,根据开发方案上的要求,定制开发,满足所有的功能需求。开发的流程中各个阶段需要花费的大概时间。
1、数据整合:允许用户访问数据,向第三方展示数据。所花费时间大致为2-3天;
2、数据储存:建立本地的app板块,也就是后端进行实现数据储存。所花时间大致为3-5天;
3、用户账号管理:创建用户账号的管理,接入管理系统。几分钟时间就可以搞定,不计入总开发时间内;
4、框架设计:根据开发的要求,设计app的框架,进行用户的体验和交互。所花时间大致为1-2天;
5、UI设计:根据app的特点设计良好的用户体验UI,保持界面的良好的交互性。所花时间大致为7-10天左右;
7、UI开发;把UI的模块转变成可以运行的代码,功能界面。所花时间大致为1-2天;
8、程序语言开发:根据app开发的功能等各方面的要求,开发出可运行的程序语言,变成可实现功能的app。所花时间大致为2-3个月;
9、app测试:测试app的功能性、交互性。站在用户的角度测试app的各方面的内容,包括是bug修复。所花时间大致为3-5天;
10、反复的测试app,不断的完善app功能,交互,实现开发方案的所有的需求。所花时间大致为2-3天。
影响一个app的开发的周期时间的因素有前端设计、用户界面、 后端整合、用户管理、身份验证等。一个专业的app开发公司能够根据多年来的开发经验,尽量的缩短开发的时间长度,满足客户的要求。信息来由郑州app开发公司燚轩科技整理发布。
收起阅读 »
[uni-app/H5+/MUI]学习讨论群组: 418967623
uni-app
H5+
MUI
有问题找组织
学习讨论群组: 418967623
-------------
uni-app
H5+
MUI
有问题找组织
学习讨论群组: 418967623
-------------