- Регистрация
- 24.05.2016
- Сообщения
- 213
- Реакции
- 432
- Баллы
- 63
Порой при работе необходимо оперировать кучей различных акков с одного профиля. Например в сеоспринт, где необходимо под один аккаунт сеоспринта иметь множество акков в различных соц.сетях Инстаграм, Гугл, ВК, ОК, ФБ, почта и т.д. Или с одного профиля Марфы Прошкиной размещать посты в разных соц.сетях. Держать всю эту инфу в списках и таблицах - не удобно. Связываться с базами данных многие боятся и не всегда это необходимо. Поэтому сохранять эту информацию в профили, которые у нас и так имеются - самое оно.
Сохранение информации в профили zpprofile пользователи просят уже давно. Была начата работа в нужном направлении http://zennolab.com/discussion/thre...dartnyx-profilej-zpprofile.34908/#post-261645 , но до нужного пока как раз-таки и не добрались:
А решение данной задачи на мой взгляд элементарно!

Поняли к чему я веду? Мы можем записать в это поле любую информацию и забирать её от туда штатными средствами зенки в многопотоке без всяких сбоев!
Я бы предпочел размещать информацию в Interset

Но разработчики зенки где-то что-то не доглядели:

И обратиться к интересам мы не можем, но и не больно то и хотелось...
Кликаем правой кнопкой мыши на панельке и добавляем директивы:

Далее открываем общий код:

Добавляем в общий код:
В каждом снипете, где будем обращаться к дополнительным полям первой строчкой пишем:
Чтобы добавить значение в профиль используем метод:
Первый параметр vk_phone - это некий маркер (название поля).
Второй параметр - project.Variables["cfg_vk_phone"].Value - ваша стандартная переменная в Зеннопостере с именем cfg_vk_phone

Т.е. мы добавляем в поле project.Profile.SecretQuestionAnswer2 свои данные в виде:
[vk_phone/]79999999999[/vk_phone][vk_pass/]old_pass_vk[/vk_pass][ok_phone/]74444444444[/ok_phone][ok_pass/]old_pass_ok[/ok_pass]
и получаем некое подобие JSON или XML. Это общепринятый язык разметки под названием DTG (DoorwayTemplateGenerator).

После того как мы напихали всю эту порнографию в наш практически девственный SecretQuestionAnswer2 с этим надо как-то работать.
И забирать мы нужные нам данные будем методом
А для тех кто совсем не понимает, что с этим дальше делать, то даю готовую строку:
Строкой выше мы забираем из профиля в поле vk_phone ([vk_phone/]79999999999[/vk_phone]) нужные данные (79999999999) и помещаем их в переменную Зеннопостера project.Variables["cfg_vk_phone"].Value с именем cfg_vk_phone

Если вы хотите сделать определенные действия основываясь на наличие/отсутствие данных в профиле, то проверьте это поле на пустоту.
Например вы хотите зарегистрировать для профиля аккаунты ФБ, Твиттер, Инстаграм постепенно и не вести списки где уже зарегали, а где нет.
Данный снипет проверит есть ли запись в fb_phone и если её нет, то перейдет к следующему кубику для регистрации аккаунта. Если же в поле будут данные (не пустые), то снипет сработает по красной ветке
Проверка на регу в фб:

Отработало по зеленой, т.е. нужно регать аккаунт.
Проверка на регу в вк:

Отработали по красной ветке. Т.е акк на вк для данного профиля уже зареган, а значит завершаем выполнение данного потока.
После внесения изменений в профиле не забываем сохранить профиль в файл! Можете делать это данной строкой:
Или своим любимым кубиком.
Советую снипет загрузки данных из профиля размещать в самом начале работы шаблона, раскидав все данные по переменным Зеннопостера. И в последствии уже с ними и работать.
А снипет записи данных в профиль размещаете соответственно там где это необходимо.
Видео будет позже
Сохранение информации в профили zpprofile пользователи просят уже давно. Была начата работа в нужном направлении http://zennolab.com/discussion/thre...dartnyx-profilej-zpprofile.34908/#post-261645 , но до нужного пока как раз-таки и не добрались:
Не говоря уже о не очень большом желании подключать лишние библиотеки, в том числе и из-за вопросов со стабильностью их работы.PS: есть мысль - добавить функционал сохранения переменных в профиль (project.Variables[имя_переменной]), чтобы после загрузки профиля - восстановить значения из них.
Нужно/полезно? Отпишитесь плиз.
А решение данной задачи на мой взгляд элементарно!

Поняли к чему я веду? Мы можем записать в это поле любую информацию и забирать её от туда штатными средствами зенки в многопотоке без всяких сбоев!
Я бы предпочел размещать информацию в Interset

Но разработчики зенки где-то что-то не доглядели:

И обратиться к интересам мы не можем, но и не больно то и хотелось...
Кликаем правой кнопкой мыши на панельке и добавляем директивы:

Далее открываем общий код:

Добавляем в общий код:
Код:
namespace my
{
public class Profile {
private IZennoPosterProjectModel Project;
private Instance Instance;
public Profile (IZennoPosterProjectModel project, Instance instance)
{
Project = project;
Instance = instance;
}
public void AddToProfile(string tag, string value)
{
string advParam = this.Project.Profile.SecretQuestionAnswer2;
string settings = Regex.Match(advParam, string.Format(@"\[{0}/].*\[/{0}]", tag)).Value;
if(!string.IsNullOrEmpty(settings))
{
this.Project.Profile.SecretQuestionAnswer2 = advParam.Replace(settings, string.Format("[{1}/]{0}[/{1}]", value, tag));
this.Project.SendInfoToLog(string.Format("Для поля {0} обновили значение {1}", tag, value), true);
}
else
{
this.Project.Profile.SecretQuestionAnswer2 = advParam+string.Format("[{1}/]{0}[/{1}]", value, tag);
this.Project.SendInfoToLog(string.Format("Добавили поле {0} со значением {1}", tag, value), true);
}
}
public string GetFromProfile(string tag)
{
return Regex.Match(this.Project.Profile.SecretQuestionAnswer2, string.Format(@"(?<=\[{0}/]).*?(?=\[/{0}])", tag)).Value;
}
}
}
В каждом снипете, где будем обращаться к дополнительным полям первой строчкой пишем:
Код:
my.Profile profile = new my.Profile(project, instance);
Чтобы добавить значение в профиль используем метод:
Код:
profile.AddToProfile("vk_phone", project.Variables["cfg_vk_phone"].Value);
Второй параметр - project.Variables["cfg_vk_phone"].Value - ваша стандартная переменная в Зеннопостере с именем cfg_vk_phone

Т.е. мы добавляем в поле project.Profile.SecretQuestionAnswer2 свои данные в виде:
[vk_phone/]79999999999[/vk_phone][vk_pass/]old_pass_vk[/vk_pass][ok_phone/]74444444444[/ok_phone][ok_pass/]old_pass_ok[/ok_pass]
и получаем некое подобие JSON или XML. Это общепринятый язык разметки под названием DTG (DoorwayTemplateGenerator).

После того как мы напихали всю эту порнографию в наш практически девственный SecretQuestionAnswer2 с этим надо как-то работать.
И забирать мы нужные нам данные будем методом
Код:
profile.GetFromProfile("vk_phone")
Код:
project.Variables["cfg_vk_phone"].Value = profile.GetFromProfile("vk_phone");

Если вы хотите сделать определенные действия основываясь на наличие/отсутствие данных в профиле, то проверьте это поле на пустоту.
Например вы хотите зарегистрировать для профиля аккаунты ФБ, Твиттер, Инстаграм постепенно и не вести списки где уже зарегали, а где нет.
Код:
my.Profile profile = new my.Profile(project, instance);
if(!string.IsNullOrEmpty(profile.GetFromProfile("fb_phone")))
{
return null;
}
Проверка на регу в фб:

Отработало по зеленой, т.е. нужно регать аккаунт.
Проверка на регу в вк:

Отработали по красной ветке. Т.е акк на вк для данного профиля уже зареган, а значит завершаем выполнение данного потока.
После внесения изменений в профиле не забываем сохранить профиль в файл! Можете делать это данной строкой:
Код:
project.Profile.Save(project.Directory + @"\profile.zpprofile", true, true, true, false, false, false, true, true, false);
Советую снипет загрузки данных из профиля размещать в самом начале работы шаблона, раскидав все данные по переменным Зеннопостера. И в последствии уже с ними и работать.
А снипет записи данных в профиль размещаете соответственно там где это необходимо.
Видео будет позже
- Номер конкурса статей
- Девятый конкурс статей
- Тема статьи
- Другое
Вложения
Последнее редактирование:





