Тех.статья: Использование глобальных переменных и обычных в зенопостере для плагина

lutic

Client
Регистрация
20.01.2024
Сообщения
31
Благодарностей
26
Баллы
18
Здравствуйте!
Работая над плагином для зеннопостера/zennoposter, далее по тексту излюбленный термин на форуме - зенка, имеет возможность использовать глобальные переменные.
Как пришла идея создать плагин, предложили работу, работа оказалась интересной. В итоге в плагине сейчас не так много, но достаточно переменных через которые функционирование плагина позволяет быть очень приятным. Но почему они стали необходимы, существуют такие проблемы как отсутствие настроек у клиентов что запускают плагин, а работать с ним не получается из за пустого окна

125665

Особенно проблема встречается у win11 , например https://zenno.club/discussion/threads/novyj-vid-kapchi.121877/post-812181

При использовании глобальных переменных есть пространство имен и имя, для меня пространство имен это название самого плагина, например testplug, и имя например key, получается двухмерный массив как будто, var["testplug"]["key"] -, возможно кому то будет легче это принять, я же используют точку в скрипте для разделение массива, например testplug.key в уже готовом коде
Код для
125667

C#:
void info(string word){  project.SendInfoToLog(word.ToString(), "[CapGuru][Start]", true);  }

var d = new Ev(project);

var keyo = d.getS("key");

if(string.IsNullOrWhiteSpace(keyo)){
    info("Данные c интерфейса бота пустые, пробуем получить данные с глобальной переменной");
    keyo = d.getS("testplug.key");
    if(!string.IsNullOrWhiteSpace(keyo)){
        info("Данные успешно полученны с глобальной переменной: "+ keyo);
    }else{
        info("Данных нет в интерфейсе бота и в глобальной переменной");
    }
}else{
    info("Данные успешны полученые с переменной key, тектового поля интерфейса бота: "+ keyo);
}
Код для
125668

C#:
public class Ev{
        IZennoPosterProjectModel project;
       
        public Ev(IZennoPosterProjectModel project){
              this.project = project;
        }
        public void info(string word ){
            this.project.SendInfoToLog(word.ToString(), "[CapGuru][C#]", true);
        }
        public string getS(string name) {

            try {
                if(name.Contains(".")){
                    string[] parts = name.Split('.');
                    return this.project.GlobalVariables[parts[0],parts[1]].Value.ToString();
                }else{
                    return this.project.Variables[name].Value;
                }
            } catch (Exception  ex) {
                 this.info("Cant get parament: "+name);
            }
            return "";
        }

        public int getI(string name) {
            try {
                string kl = this.getS(name);
                return Int32.Parse(kl);
            } catch (Exception  ex) {
                this.info("Cant convert to int parament: "+name);
            }
            return 0;        

        }

        public void setS(string name, string val) {

            try {
                if(name.Contains(".")){
                    string[] parts = name.Split('.');
                    this.project.GlobalVariables[parts[0],parts[1]].Value = val;
                }else{
                    this.project.Variables[name].Value = val;
                }
            } catch (Exception  ex) {
                this.info("Cant set parament: "+name);
            }
        }
      
    public  void creatN(string s){
            object obj =  this.project.Variables;
            if (!this.project.Variables.Keys.Contains(s)){
                   obj.GetType().GetMethod("QuickCreateVariable").Invoke(obj,new Object[]{s});
                project.Variables[s].Value = "";
            }
        }
    }
Этот тестовый пример который я использую в шаблонах и плагинах, для меня очень удобен.

Видео как вставлять код и принцип работы кода


Бывает моменты что необходимо создать переменную, я использую все тот же класс
C#:
var d = new Ev(project);
d.creatN("key2"); //создаст пустую переменную key2 внутри проекта

Спасибо за внимание
 
Последнее редактирование:

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 732
Благодарностей
1 401
Баллы
113
Вообще нечего не понял... Старею наверное...
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 219
Благодарностей
660
Баллы
113

lutic

Client
Регистрация
20.01.2024
Сообщения
31
Благодарностей
26
Баллы
18

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 732
Благодарностей
1 401
Баллы
113
Если простыми словами, передача данных через глобальные переменные от основного шаблона в плагин
Через контекст делал, и вообще не каких проблем с передачей в плагин и обратно не было. В много потоке работало. Зачем изобретать велосипед с глобалками?
 

lutic

Client
Регистрация
20.01.2024
Сообщения
31
Благодарностей
26
Баллы
18

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)