Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
У меня вышесказанная проблема. Все сделала по инструкции, оплачивала через интеркассу и через Я.Деньги. Письмо на почту не приходит, а сам ключ создается. Все перепроверила и делала неск.раз, ничего не приходит. При оплате через интеркассу выходит ошибка, что платеж уже оплачен или не сущ. А при оплате через Я.Деньги ошибку не выдает.
У меня вышесказанная проблема. Все сделала по инструкции, оплачивала через интеркассу и через Я.Деньги. Письмо на почту не приходит, а сам ключ создается. Все перепроверила и делала неск.раз, ничего не приходит. При оплате через интеркассу выходит ошибка, что платеж уже оплачен или не сущ. А при оплате через Я.Деньги ошибку не выдает.
Сегодня могу написать мини туториал, того как это сделал. @сапсан, в будующем будет добавлена возможность создавать свои типы без вмешательства в php,js,html код?
Сегодня могу написать мини туториал, того как это сделал. @сапсан, в будующем будет добавлена возможность создавать свои типы без вмешательства в php,js,html код?
Задача:
- Добавить новые типы ключей на серверную часть;
- Добавить новые типы ключей в web-часть.
План:
- Написать небольшой модуль для Ядро плагина - [Keys] Core
- Понять как реализованы имеющиеся типы ключей в web-части
- Добавить необходимые части кода, для отображения и обработки новых типов ключей
От плана к действиям:
0) Для начала был сделан модуль для Ядро плагина - [Keys] Core , за основу просто взял готовый и переделал под свои нужды.
1) С первого взгляда все было плохо, но как оказалось не все так плохо :)
- Найти где прописаны имеющиеся типы ключей (Продажа привилегии, Продление привилегии, Продажа кредитов Shop) было не сложно. Они прописаны в файле:
- Далее необходимо найти обработку выбора типа ключа, чтобы не нужные поля скрывались, а другие переименовывались. Она находится в этом же файле, чуть ниже на строках 193-209:
if(empty($post['editcfgNameGroup']) && $group[0]['key_type'] != 3 && $group[0]['key_type'] != 2)
$this->message('Укажите наименование привилегии как в groups.ini.','err');
PHP:
if(empty($post['editcfgNameGroup']) && $group[0]['key_type'] != 3 && $group[0]['key_type'] != 2)
$this->message('Укажите наименование привилегии как в groups.ini.','err');
PHP:
case 1:
if(!empty($post['time'])){
if(!preg_match('/^[\d-;]+$/i', $post['time']))
$this->message('Не верно введен срок.Если несколько то через ";". Пример: 7;30;0','err');
$this->time = $post['time'];
}else $this->time = 0;
if(empty($post['price']))
$this->message('Укажите стоимость. Если несколько то через ";". Пример: 10;20;100;1000','err');
$CountTime = COUNT(explode(';',$this->time));
$CountPrice = COUNT(explode(';',$post['price']));
if($CountTime != $CountPrice)
$this->message('Указанное количество срока не равно указанному количеству суммы!','err');
$this->type = 'vip_add';
break;
case 2:
if(!empty($post['time'])){
if(!preg_match('/^[\d-;]+$/i', $post['time']))
$this->message('Не верно введен срок.Если несколько то через ";". Пример: 7;30;0','err');
$this->time = $post['time'];
}else $this->time = 0;
if(empty($post['price']))
$this->message('Укажите стоимость. Если несколько то через ";". Пример: 10;20;100;1000','err');
$CountTime = COUNT(explode(';',$this->time));
$CountPrice = COUNT(explode(';',$post['price']));
if($CountTime != $CountPrice)
$this->message('Указанное количество срока не равно указанному количеству суммы!','err');
$this->type = 'vip_exp';
break;
case 3:
if(empty($post['time']))
$this->message('Укажите количество кредитов. Если несколько то через ";". Пример: 100;1000;5000;100000','err');
$this->time = $post['time'];
if(empty($post['price']))
$this->message('Укажите стоимость кредитов. Если несколько то через ";". Пример: 1;10;50;100','err');
$CountTime = COUNT(explode(';',$this->time));
$CountPrice = COUNT(explode(';',$post['price']));
if($CountTime != $CountPrice)
$this->message('Указанное количество срока не равно указанному количеству суммы!','err');
$this->type = 'shop_credits';
break;
Стоит заметить, что value у всех свой, это важно!
- Еще необходимо скрыть не нужное и переименовать нужное поле, это делает js код. И вот уже здесь необходим тот самый value. И так, я добавил 2 поля Кредитов и уровней, поэтому поле "Наименование группы из group.ini" мне не нужно, а поле "Срок" должно иметь другое название. Вот что получилось:
PHP:
<script type="text/javascript">
function setTypуKey(){
var typKey = $('#typeKey').val();
if(typKey == 1){
$('#idGr').attr({style:'display:block;'});
$('#lable').html('Срок');
}
else if(typKey == 2){
$('#idGr').attr({style:'display:none;'});
$('#lable').html('На сколько продлить дней');
}
else if(typKey == 3){
$('#idGr').attr({style:'display:none;'});
$('#lable').html('Количество кредитов');
}
else if(typKey == 4){ /* RPG Кредиты, value="4" */
$('#idGr').attr({style:'display:none;'});// Скрываем поле "Наименование группы из group.ini"
$('#lable').html('Количество кредитов'); // Меняем текст в поле "Срок"
}
else if(typKey == 5){ /* RPG Уровни, value="5" */
$('#idGr').attr({style:'display:none;'});// Скрываем поле "Наименование группы из group.ini"
$('#lable').html('Количество уровней'); // Меняем текст в поле "Срок"
}
}
</script>
- Теперь можно посмотреть результат:
3) Все работает отлично, переходим к PHP коду, тут сложнее.
- Начнем с файла Admins.php. В нем есть два блока, которые необходимо отредактировать.
Первый, т.к. я добавил 2 новых типа, и в них мне не нужно поле с названием группы VIP, то мне необходимо отключить его проверку и в PHP коде, это уже сделано для типов 2 и 3. Вот что у меня получилось:
PHP:
elseif(empty($post['cfgNameGroup']) && $post['typeKey'] == 1) // Строки 409 и 457
$this->message('Укажите наименование привилегии как в groups.ini.','err');
Я сделал так, т.к. это нужно только для типа 1.
- Теперь более сложная часть этого файла, необходимо добавить обработку новых типов в функцию typePrivige($post) . Находим блок case 3: .... break; На его примере будут сделаны блоки для двух новых типов, стоит обратить внимание на строку
Вместо shop_credits должно быть wcs_gold / wcs_bank_lvl или другой тип указанный в при создании модуля. У меня это rpg_credits и rpg_levels. Просто продублировав блок case 3: .. break; и изменив shop_credits на свое значение, мы завершаем работу с этим файлом. Значение после case необходимо изменить на указанное ранее в value.
Вот код, который я получил при изменении функции typePrivige($post):
PHP:
protected function typePrivige($post){
switch ($post['typeKey']){
case 1:
if(!empty($post['time'])){
if(!preg_match('/^[\d-;]+$/i', $post['time']))
$this->message('Не верно введен срок.Если несколько то через ";". Пример: 7;30;0','err');
$this->time = $post['time'];
}else $this->time = 0;
if(empty($post['price']))
$this->message('Укажите стоимость. Если несколько то через ";". Пример: 10;20;100;1000','err');
$CountTime = COUNT(explode(';',$this->time));
$CountPrice = COUNT(explode(';',$post['price']));
if($CountTime != $CountPrice)
$this->message('Указанное количество срока не равно указанному количеству суммы!','err');
$this->type = 'vip_add';
break;
case 2:
if(!empty($post['time'])){
if(!preg_match('/^[\d-;]+$/i', $post['time']))
$this->message('Не верно введен срок.Если несколько то через ";". Пример: 7;30;0','err');
$this->time = $post['time'];
}else $this->time = 0;
if(empty($post['price']))
$this->message('Укажите стоимость. Если несколько то через ";". Пример: 10;20;100;1000','err');
$CountTime = COUNT(explode(';',$this->time));
$CountPrice = COUNT(explode(';',$post['price']));
if($CountTime != $CountPrice)
$this->message('Указанное количество срока не равно указанному количеству суммы!','err');
$this->type = 'vip_exp';
break;
case 3:
if(empty($post['time']))
$this->message('Укажите количество кредитов. Если несколько то через ";". Пример: 100;1000;5000;100000','err');
$this->time = $post['time'];
if(empty($post['price']))
$this->message('Укажите стоимость кредитов. Если несколько то через ";". Пример: 1;10;50;100','err');
$CountTime = COUNT(explode(';',$this->time));
$CountPrice = COUNT(explode(';',$post['price']));
if($CountTime != $CountPrice)
$this->message('Указанное количество срока не равно указанному количеству суммы!','err');
$this->type = 'shop_credits';
break;
case 4: /* rpg_credits */
if(empty($post['time']))
$this->message('Укажите количество кредитов. Если несколько то через ";". Пример: 100;1000;5000;100000','err');
$this->time = $post['time'];
if(empty($post['price']))
$this->message('Укажите стоимость кредитов. Если несколько то через ";". Пример: 1;10;50;100','err');
$CountTime = COUNT(explode(';',$this->time));
$CountPrice = COUNT(explode(';',$post['price']));
if($CountTime != $CountPrice)
$this->message('Указанное количество срока не равно указанному количеству суммы!','err');
$this->type = 'rpg_credits'; // Изменен на свое значение!
break;
case 5: /* rpg_levels */
if(empty($post['time']))
$this->message('Укажите количество уровней. Если несколько то через ";". Пример: 100;1000;5000;100000','err');
$this->time = $post['time'];
if(empty($post['price']))
$this->message('Укажите стоимость уровней. Если несколько то через ";". Пример: 1;10;50;100','err');
$CountTime = COUNT(explode(';',$this->time));
$CountPrice = COUNT(explode(';',$post['price']));
if($CountTime != $CountPrice)
$this->message('Указанное количество срока не равно указанному количеству суммы!','err');
$this->type = 'rpg_levels'; // Изменен на свое значение!
break;
default: $this->message('Ошибка', 'err');break;
}
}
4) Остался последний файл - Main.php. В нем необходимо изменить всего пару строк.
- Т.к. я добавлял 2 типа, это кредиты и уровни, то мне необходимо сделать чтобы тип 4 при покупке выводился как кредиты, для этого необходимо изменить условие на 87 и 92 строках, чтобы было так:
PHP:
if($name[0]['key_type'] == 3 or $name[0]['key_type'] == 4)
Остается тип 5 - уровни. Для них придется добавить новое условие:
И новую функцию Levels($time). Функцию Levels можно сделать на основе функции Credits, поэтому дублируем функции Credits, меняем название и текст, получаем такой код:
PHP:
protected function Levels($count){
$abs = abs($count) % 100;
if ($abs > 19) {
$abs = $count % 10;
}
switch ($abs) {
case 1: {
return($count.' уровоень');
}
case 2: case 3: case 4: {
return($count.' уровня');
}
default: {
return($count.' уровней');
}
}
}
5) На этом все, можно идти проверять.
Первый раз взаимодействовал с данным web, возможно что-то упустил, думаю автор меня поправит, если что-то не так.
Всем удачи, и хорошего онлайна!:ab: --- Добавлено позже ---
Так же прикреплю получившиеся файлы.
@сапсан, ты указал в требования версию php 5.4, а с этой версией сообщения на почту не отправляются, только с версией выше (от 5.5). Можно как-то исправить эту проблему?
Привет! Отличный веб модуль, только хотелось бы заменить логотип "KeyShop". Попробовал поменять картинку в pub/img/logo; logo1, но по какой-то причине лого не меняется. Подскажешь что с этим делать?
@сапсан, добрый день,вы сказали что поможете решить проблему тем у кого версия php 5.4 (при покупке не отправляются письма на указанный мэил) от вас ждать вестей ?
@сапсан, ты поможешь решить проблему с робокассой? --- Добавлено позже ---
Люди поделитесь таблицей по генерации ключей, у меня её вообще нет, написали сами но не правильно!
@сапсан, добрый день,вы сказали что поможете решить проблему тем у кого версия php 5.4 (при покупке не отправляются письма на указанный мэил) от вас ждать вестей ?
добрый день,в админ панели в настройках нужно что то менять ,обновил все файлы,но письмо на почту так и не идёт ,зараза,и нужно ли по новой импортировать sql запрос в базу данных ?
добрый день,в админ панели в настройках нужно что то менять ,обновил все файлы,но письмо на почту так и не идёт ,зараза,и нужно ли по новой импортировать sql запрос в базу данных ?