string bookTitle = project.Variables["bookTitle"].Value, originalTitle=project.Variables["originalTitle"].Value, authorName=project.Variables["authorName"].Value, isbn10=project.Variables["isbn10"].Value, isbn13=project.Variables["isbn13"].Value, numberOfPages=project.Variables["numberOfPages"].Value, firstPublished=project.Variables["firstPublished"].Value, characters=project.Variables["characters"].Value, place=project.Variables["place"].Value, award=project.Variables["award"].Value, coverImage=project.Variables["coverImage"].Value, bookDescription=project.Variables["bookDescription"].Value; string result_article = String.Empty; // формируем html ссылку слива string sliv = "\"Download

\r\n"; // проверяем данные на пустоту, если параметр книги не пустой, то добавляем его на страницу. if (coverImage != String.Empty && coverImage != "none" && coverImage != null){ result_article += "\""+bookTitle+"\"
\r\n"; } if (authorName != String.Empty && authorName != "none" && authorName != null){ result_article += "author name: "+authorName+"
\r\n"; } result_article += "available formats: PDF, EPUB, MOBI, ODF and others

\r\n"+sliv; if (originalTitle != bookTitle && originalTitle != String.Empty && originalTitle != "none" && originalTitle != null){ result_article += "original title: \""+originalTitle+"\"
\r\n"; } if (isbn10 != String.Empty && isbn10 != "none" && isbn10 != null){ if (isbn13 != String.Empty && isbn13 != "none" && isbn13 != null){ isbn13 = " (ISBN13: "+isbn13+")
\r\n"; } else { isbn13 = "
\r\n"; } result_article += "ISBN: "+isbn10+isbn13; } if (numberOfPages != String.Empty && numberOfPages != "none" && numberOfPages != null && numberOfPages != "0"){ result_article += "pages: "+numberOfPages+"
\r\n"; } if (firstPublished != String.Empty && firstPublished != "none" && firstPublished != null){ result_article += "first published: "+firstPublished+"
\r\n"; } if (characters != String.Empty && characters != "none" && characters != null){ result_article += "characters: "+characters.Substring(0, characters.Length-2)+"
\r\n"; } if (place != String.Empty && place != "none" && place != null){ result_article += "setting: "+place.Substring(0, place.Length-5)+"
\r\n"; } if (award != String.Empty && award != "none" && award != null){ result_article += "literary awards: "+award.Substring(0, award.Length-2)+"
\r\n"; } if (bookDescription != String.Empty && bookDescription != "none" && bookDescription != null){ result_article += "
"+bookDescription+"

\r\n"+sliv; } // выводим перелинковку Random rnd = new Random(); // создаем рандом // обворачиваем в try, чтобы в случае ошибки, например, когда в списке нет ничего, программа не завершилась. try { var links = project.Lists["links"]; // получаем список с ссылками int rndLinksNumber = new Random().Next(4, 13); // cколько ссылок выводить List Links2 = new List(); // создаем список Random rndList = new Random(); // создаем рандом int countStrList = links.Count; // получаем к-во строк в списке for(int i=0; i < rndLinksNumber; i++){ string input = links[rnd.Next(countStrList)]; Match match = Regex.Match(input, @"\[url\=([^\]]+)\](.+)\[/url\]"); Links2.Add(""+match.Groups[2].Value+""); } result_article += "See also:
\r\n"+String.Join("
\r\n", Links2.ToArray()); // join список в строку с разделитем и добавляем на страницу. } catch (Exception){} // ничего не делаем в случае исключения, просто продолжаем выполнять код дальше. // выводим случайные ключевики var searchTagsList = project.Lists["search tags"]; // получаем список с ключами int randSearchTags = new Random().Next(7, 16); // cколько ключей выводить List SearchTags = new List(); // создаем список int countStrList2 = searchTagsList.Count; // получаем к-во строк в списке for(int i=0; i < randSearchTags; i++){ SearchTags.Add(searchTagsList[rnd.Next(countStrList2)]); // выбираем случайную строку из списка и add в список } result_article += "

Search tags:
\r\n"+String.Join(", ", SearchTags.ToArray()); // join список в строку с разделитем и добавляем на страницу. /* lock(SyncObjects.ListSyncer){тут операции со списоком} - если список синхронизирован с файлом, то нужно операции с ним лочить, иначе можно получить ошибку, во время выполнения в многопотоке. */ return result_article;