PDA

View Full Version : چطور میشه تعداد مسیج ها رو شمارش کرد برای SMS و به کاربر تعداد مسیج ها رو به همراه هزینه نمایش داد



hamidhassas
شنبه 17 خرداد 1393, 08:23 صبح
من میخوام کاری کنم که وقتی کاربرشروع میکنه به تایپ در یک textarea میکنه به محض اینکه تعداد کارکترهای تایپ شده توسط اون به 49 رسید در کنار همون textarea نمایش داده بشه 1 مسیج و اگر کاربر ادامه داد به تایپ و اینبار به 68 کارکتر رسید نمایش بشه 2 مسیج و اگر به 86 کارکتر رسید نمایش داده بشه 3 مسیج و اگر به 102 کارکتر رسید نمایش داده بشه 4 مسیج به صورتی که مقدار خروجی نمایش داده شده عدد باشه که بشه اون مقدار رو در مبلغ هر مسیج ضرب و به کاربر نمایش داد

لطفا میشه کمک کنید


حل شد:


آقا از همه کمک هاتون ممنون فایل اسکریپتش رو تونستم گیر بیارم میزارم برا همه دوستان

پسورد: www.hassas-computer.com (http://www.hassas-computer.com/)

لینک دانلود: http://hassas-computer.com/download/script_code/SMS_Conter_www.hassas-computer.com.rar



function addSMSCounter(textarea) {

if (typeof(textarea) == 'string') {
textarea = document.getElementById(textarea);
}

var counterDiv = document.createElement('div');
var span = document.createElement('span');
span.innerHTML = 'تعداد کاراکتر باقیمانده: ';
span.style.fontSize= "11px";
span.style.color = "#666666";
counterDiv.appendChild(span);

var counterSpan = document.createElement('span');
counterSpan.innerHTML = '160(1)';
counterDiv.appendChild(counterSpan);

var dv = document.createElement('span');
dv.innerHTML = '      زبان: ';
dv.style.color = "#666666";
counterDiv.appendChild(dv);

var langSpan = document.createElement('span');
langSpan.innerHTML = 'انگلیسی';
langSpan.style.fontSize= "11px";
counterDiv.appendChild(langSpan);

textarea.style.direction = 'ltr';

if (textarea.nextSibling) {
textarea.parentNode.insertBefore(counterDiv, textarea.nextSibling);
} else textarea.parentNode.appendChild(counterDiv);

textarea.onkeypress = textarea.onkeyup = textarea.checkSMSLength = function(){
checkSMSLength(textarea, counterSpan, langSpan);
}

checkSMSLength(textarea, counterSpan, langSpan);
}
function checkSMSLength(textarea, counterSpan, langSpan) {
var text = textarea.value;
var ucs2 = text.search(/[^\x00-\x7E]/) != -1
if (!ucs2) text = text.replace(/([[\]{}~^|\\])/g, "\\$1");
text = text.replace(/\r\n/g, "\n");
var unitLength = ucs2 ? 70 : 160;

langSpan.innerHTML = ucs2 ? 'فارسی' : 'انگلیسی';
textarea.style.direction = text.match(/^[^a-z]*[^\x00-\x7E]/ig) ? 'rtl' : 'ltr';

if (text.length > unitLength) {
if (ucs2) unitLength = unitLength - 3;
else unitLength = unitLength - 7;
}

var count = Math.max(Math.ceil(text.length/unitLength), 1);
counterSpan.innerHTML = (unitLength * count - text.length) + '(' + count + ')';
}


<!-------------وارد نمودن عدد------>
<script type="text/javascript">
function isNumberKey(evt) {
var charCode = (evt.which) ? evt.which : event.keyCode
if (charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
</script>
<script>
function checkNumberValidate(data)
{

return data.match(/^((0)|(\+98)|(0098))?9[0-9]{9}$/i) || (!data.match(/^((\+98)|(0098))/i) && data.match(/^((\+)|(00))[1-9]+[0-9]+$/i)) || data.match(/^[1-3]000[0-9]*$/);
}
function validateForm() {
try{
var numbers = new Array();
var numbers = document.getElementById('textarea1').value.trim(). split(/\r\n?|\n/);
var message = document.getElementById('message').value;



//for(var i=0, l = numbers.length; i<l; i++)
//{
//number = numbers[i];

//if(number == '' || !checkNumberValidate(number)) {
//document.getElementById('textarea1').focus();
//alert('شماره گیرنده اشتباه است');
//return false;
//}
//}
if(message == '')
{
document.getElementById('message').focus();
alert('متن پیام نباید خالی باشد');
return false;
}



return true;
} catch(e) { alert(e);return false; }
}
</script>


<form action="SMS.php?code=<?= $Code_List ?>&list_number=<?= $list_number ?>" method="post" name="form2" onsubmit="return validateForm();">
<input type="hidden" value="sent" name="sent" />
<textarea name="textarea1" id="textarea1" cols="50" rows="10" onkeypress="return isNumberKey(event)" class="depth"></textarea>
<br>
<table border="0" class="CForm_ViewItesmGrid CForm_corner-bottom">
<thead>
<tr>
<th><?= $Massage ?></th>
</tr>
</thead>
<tr>
<td align="center"><textarea name="message" id="message" cols="60" rows="10" class="depth"></textarea><br><script type="text/javascript">addSMSCounter('message');</script><br><input type="submit" value="<?= $Sent_SMS ?>" class="CForm_normal_button" />
</table>
</form>

mehdi.mousavi
شنبه 17 خرداد 1393, 09:12 صبح
من میخوام کاری کنم که وقتی کاربرشروع میکنه به تایپ در یک textarea میکنه به محض اینکه تعداد کارکترهای تایپ شده توسط اون به 49 رسید در کنار همون textarea نمایش داده بشه 1 مسیج و اگر کاربر ادامه داد به تایپ و اینبار به 68 کارکتر رسید نمایش بشه 2 مسیج و اگر به 86 کارکتر رسید نمایش داده بشه 3 مسیج و اگر به 102 کارکتر رسید نمایش داده بشه 4 مسیج به صورتی که مقدار خروجی نمایش داده شده عدد باشه که بشه اون مقدار رو در مبلغ هر مسیج ضرب و به کاربر نمایش داد لطفا میشه کمک کنید

سلام.
مبنای اعدادی که دادید رو متوجه نشدم، اما می تونید بدین شکل عمل کنید:

var ranges = [49, 68, 86, 102];

var tb = document.getElementById('txt');
tb.onkeyup = function() {
var len = this.value.length;
for(var i = 0; i < ranges.length; i++) {
if(len < ranges[i]) {
console.log('message #' + (i + 1));
break;
}
}
};

اینجا خودتون باید یه فکری برای Message های بیش از 102 کاراکتر کنید (چون من نمیدونستم منطقتون چی هست، نتونستم کد رو کامل بنویسم). ضمنا فرض کردم textarea مورد نظرتون ID اش txt هست...

موفق باشید.

hamidhassas
شنبه 17 خرداد 1393, 09:36 صبح
ممنون فقط چند سوال دارم
1- منی که به کاربر نشون نمیده تعداد مسیج ها چند تا هست چطوری توی یک div نمایش بدم
2- متن های بیش از 102 کارکتر رو چطوری به کاربر تو یک div پیغام بدم شم اجازه نوشتن متن یک مسیج که بیش از 3 sms باشه رو ندارید
3- چطوری کاری میشه کاری کرد که اگر کاربر فارسی تایپ کرد مسیج ها به صورت 49, 68, 86, 102 و در صورت انگلیسی تایپ کردن مقدار ها به صورت 60, 80, 100, 120 باشه

mehdi.mousavi
شنبه 17 خرداد 1393, 11:13 صبح
ممنون فقط چند سوال دارم
1- منی که به کاربر نشون نمیده تعداد مسیج ها چند تا هست چطوری توی یک div نمایش بدم
2- متن های بیش از 102 کارکتر رو چطوری به کاربر تو یک div پیغام بدم شم اجازه نوشتن متن یک مسیج که بیش از 3 sms باشه رو ندارید
3- چطوری کاری میشه کاری کرد که اگر کاربر فارسی تایپ کرد مسیج ها به صورت 49, 68, 86, 102 و در صورت انگلیسی تایپ کردن مقدار ها به صورت 60, 80, 100, 120 باشه

سلام.
شما با JavaScript آشنایی دارید یا خیر؟ چون این سوالاتی که مطرح کردید رو با اضافه کردن چند خط کد به کدی که براتون نوشتم میشه پیاده سازی کرد. من در اینجا فقط به منطقش اشاره می کنم:



اونجایی که console.log رو نوشتم، شماره پیام رو دارم می نویسم. شما می تونید اونو در یک div نمایش بدید. برای Set کردن محتوای یک Element نیز میتونید از innerHTML استفاده کنید (در همین انجمن جستجو کنید).
کافیه (با نوشتن یک if) ببینید len بیش از 102 هست یا خیر، اگر بود، به کاربر پیام بدید.
شما باید ابتدا تشخیص بدید که متن وارد شده فارسی هست یا انگلیسی. این کارو چطوری میشه انجام داد؟ از روی تعداد کاراکترهای موجود در Unicode Range حروف فارسی میتونید متوجه تعداد حروف فارسی بشید. سپس اونو با تعداد حروف انگلیسی متن مقایسه می کنید. هر کدوم بیشتر بود، میتونید متن رو در اون زبان در نظر بگیرید. حالا که تایپش مشخص شد، کافیه تا آرایه دومی تعریف کنید و اعداد بازه انگلیسی مورد نظرتون رو در اون تعریف کنید. بر اساس Flag زبان SMS ای که در مرحله قبل پیدا کردید، میتونید حالا تصمیم بگیرید که از کدوم آرایه استفاده کنید.


موفق باشید.

hamidhassas
شنبه 17 خرداد 1393, 15:53 عصر
:متعجب::متعجب::عصبانی++:
من بعضی از چیزایی که گفتید رو متوجه شدم ولی برای تشخیص فارسی به انگلیسی نه من اصلا جاوا بلد نیستم به هم خاطر مزاحم همه دوستان شدم بعدش این کدر رو چطوری به کار بگیرم من اون رو کپی کردم و بجای txt اسم id که میخواستم نوشتم ولی وتی فایل رو اجرا میکنم چیزی نشون نمیده

اینجوری منظورتونه



<script type="text/javascript">
var ranges = [49, 68, 86, 102];
var tb = document.getElementById('textarea2');
tb.onkeyup = function()
{
var len = this.value.length;
if(var i > 103)
{
document.getElementById('error').innerHTML = 'متن پیامک بیش از حد مجاز میباشد';
}
for(var i = 0; i < ranges.length; i++)
{
if(len < ranges[i])
{
console.log('message #' + (i + 1));
break;
}
}
}
</script>
<div id="message"></div>


الان خروجی این کد چطوری یعنی وقتی کاربر داره تایپ میکنه تا مثلا اگر به 49 کارکتر رسید تو div مینوسه عدد 1 ؟

میشه یک کاری کرد که وقتی کاربر داره تایپ میکنه قبل از شروع به تایپ عدد 49 رو نمایش بده و تا کاربر هر کارکتری که وارد میکنه در کنار عدد 49 یک قسمتی شروع کنه به نشون دادن تعداد کارکتر هایی که وارد کرده تا 49 تا کارکتر وارد شد تو یک div بنویسه 1 و به همین صورت تا 3 تا مسیج

hamidhassas
شنبه 17 خرداد 1393, 17:21 عصر
آقا از همه کمک هاتون ممنون فایل اسکریپتش رو تونستم گیر بیارم میزارم برا همه دوستان

پسورد: www.hassas-computer.com

لینک دانلود: http://hassas-computer.com/download/script_code/SMS_Conter_www.hassas-computer.com.rar