﻿
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>kosfiz.ru</title>
	<atom:link href="http://kosfiz.ru/feed/" rel="self" type="application/rss+xml" />
	<link>http://kosfiz.ru</link>
	<description>в двух словах о веб-программировании и других интересных вещах</description>
	<lastBuildDate>Fri, 30 Dec 2011 11:09:29 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Программное добавление твитта с изображением на C#</title>
		<link>http://kosfiz.ru/2011/12/30/post-to-twitter-with-media-file/</link>
		<comments>http://kosfiz.ru/2011/12/30/post-to-twitter-with-media-file/#comments</comments>
		<pubDate>Fri, 30 Dec 2011 11:09:02 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[твиттер]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=897</guid>
		<description><![CDATA[Понадобилось коллеге выполнить в рамках одной из задач добавление сообщения в twitter вместе с картинкой. Примеров не нашёл, но я после непродолжительного поиска нашёл данный исходный код. Добавил сюда, чтобы потом не искать больше.]]></description>
			<content:encoded><![CDATA[<p>Понадобилось коллеге выполнить в рамках одной из задач добавление сообщения в twitter вместе с картинкой. Примеров не нашёл, но я после непродолжительного поиска нашёл <a href='http://kosfiz.ru/2011/12/30/post-to-twitter-with-media-file/tweetit-2011oct14-fri-165309utc/' rel='attachment wp-att-896' title='Пример добавления сообщения в твиттер с картинкой'>данный исходный код</a>.<br />
Добавил сюда, чтобы потом не искать больше.</p>
]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/12/30/post-to-twitter-with-media-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sport Online: следим за результатами матчей с Windows Phone</title>
		<link>http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/</link>
		<comments>http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 13:00:58 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Проекты]]></category>
		<category><![CDATA[marketplace]]></category>
		<category><![CDATA[Windows Phone]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=872</guid>
		<description><![CDATA[Ни для кого не секрет, что количество футбольных болельщиков достаточно велико, но не всегда можно присутствовать на матче или в условиях просмотра теле- и видео трансляции. Тем не менее хочется следить за ходом матча или счётом. Это послужило идеей для создания приложения для смартфонов с windows phone, которое бы позволяло следить за счётом в матче [...]]]></description>
			<content:encoded><![CDATA[<p>Ни для кого не секрет, что количество футбольных болельщиков достаточно велико, но не всегда можно присутствовать на матче или в условиях просмотра теле- и видео трансляции. Тем не менее хочется следить за ходом матча или счётом. </p>
<p>Это послужило идеей для создания приложения для смартфонов с windows phone, которое бы позволяло следить за счётом в матче и ходом событий посредством текстовых и аудио трансляций. В ходе развития идеи добавился функционал добавления напоминаний на предстоящие матчи, для которых будут вестись трансляции.<br />
Причём напоминание устанавливается на время корректное именно для времени установленном на смартфоне, т.е. независимо от часового пояса напоминание сработает в нужное время.</p>
<p>Базой для приложения стал портал livetv.ru</p>
<p>В результате реализации описанных идей появилось приложение Sport Online.</p>
<p><a href="http://www.windowsphone.com/ru-RU/apps/072c2a7a-e481-43c7-8fe2-48d710be7c8b" title="скачать Sport Online для Windows Phone"><img src="/wp-content/images/Download-EN-Med.png" alt="скачать Sport Online для Windows Phone" align="center" /></a></p>

<a href='http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/screen-capture-9/' title='Sport Online - следить за ходом матчей с windows phone'><img width="150" height="150" src="http://kosfiz.ru/wp-content/uploads/2011/12/Screen-Capture-9-150x150.png" class="attachment-thumbnail" alt="Sport Online - следить за ходом матчей с windows phone" title="Sport Online - следить за ходом матчей с windows phone" /></a>
<a href='http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/screen-capture-8/' title='Sport Online - следить за ходом матчей с windows phone'><img width="150" height="150" src="http://kosfiz.ru/wp-content/uploads/2011/12/Screen-Capture-8-150x150.png" class="attachment-thumbnail" alt="Sport Online - следить за ходом матчей с windows phone" title="Sport Online - следить за ходом матчей с windows phone" /></a>
<a href='http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/screen-capture-7/' title='Sport Online - следить за ходом матчей с windows phone'><img width="150" height="150" src="http://kosfiz.ru/wp-content/uploads/2011/12/Screen-Capture-7-150x150.png" class="attachment-thumbnail" alt="Sport Online - следить за ходом матчей с windows phone" title="Sport Online - следить за ходом матчей с windows phone" /></a>
<a href='http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/screen-capture-6/' title='Sport Online - следить за ходом матчей с windows phone'><img width="150" height="150" src="http://kosfiz.ru/wp-content/uploads/2011/12/Screen-Capture-6-150x150.png" class="attachment-thumbnail" alt="Sport Online - следить за ходом матчей с windows phone" title="Sport Online - следить за ходом матчей с windows phone" /></a>
<a href='http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/screen-capture-5/' title='Sport Online - следить за ходом матчей с windows phone'><img width="150" height="150" src="http://kosfiz.ru/wp-content/uploads/2011/12/Screen-Capture-5-150x150.png" class="attachment-thumbnail" alt="Sport Online - следить за ходом матчей с windows phone" title="Sport Online - следить за ходом матчей с windows phone" /></a>
<a href='http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/screen-capture-4/' title='Sport Online - следить за ходом матчей с windows phone'><img width="150" height="150" src="http://kosfiz.ru/wp-content/uploads/2011/12/Screen-Capture-4-150x150.png" class="attachment-thumbnail" alt="Sport Online - следить за ходом матчей с windows phone" title="Sport Online - следить за ходом матчей с windows phone" /></a>
<a href='http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/screen-capture-2/' title='Sport Online - следить за ходом матчей с windows phone'><img width="150" height="150" src="http://kosfiz.ru/wp-content/uploads/2011/12/Screen-Capture-2-150x150.png" class="attachment-thumbnail" alt="Sport Online - следить за ходом матчей с windows phone" title="Sport Online - следить за ходом матчей с windows phone" /></a>
<a href='http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/screen-capture-10/' title='Sport Online - следить за ходом матчей с windows phone'><img width="150" height="150" src="http://kosfiz.ru/wp-content/uploads/2011/12/Screen-Capture-10-150x150.png" class="attachment-thumbnail" alt="Sport Online - следить за ходом матчей с windows phone" title="Sport Online - следить за ходом матчей с windows phone" /></a>

]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/12/25/sport-online-tracking-results-of-sport-matches-windows-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Разработчики vs менеджеры: инструкция для разработчиков</title>
		<link>http://kosfiz.ru/2011/12/24/developers-vs-pms-rules-for-developers/</link>
		<comments>http://kosfiz.ru/2011/12/24/developers-vs-pms-rules-for-developers/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 12:35:58 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Разное]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=860</guid>
		<description><![CDATA[Итак, ни для кого, наверное, не новость, что бывают случаи, когда к разработчикам появляется ряд вопросов, например: Почему не уложились в сроки? Почему это сделано так, а не как в ТЗ? Чем ты занимался? и т.д.. Причиной этих вопросов и многих подобных может быть &#171;неправильное&#187; взаимодействие с менеджером или менеджерами, над задачами которых вы работаете. [...]]]></description>
			<content:encoded><![CDATA[<p>Итак, ни для кого, наверное, не новость, что бывают случаи, когда к разработчикам появляется ряд вопросов, например:</p>
<ul>
<li>Почему не уложились в сроки?</li>
<li>Почему это сделано так, а не как в ТЗ?</li>
<li>Чем ты занимался?</li>
</ul>
<p>и т.д..</p>
<p>Причиной этих вопросов и многих подобных может быть &laquo;неправильное&raquo; взаимодействие с менеджером или менеджерами, над задачами которых вы работаете.</p>
<p>Чтобы таких вопросов не возникало и для того, чтобы вам всегда было что ответить, нужно к таким случаям всегда быть готовым и готовиться нужно заранее, выполняя дальнейшие инструкции, которые, на мой взгляд, помогут в дальнейшем избежать или отвести от вас удар.</p>
<p>Итак, несколько правил, которые всегда необходимо выполнять:</p>
<ul>
<li>Всегда на проектную задачу должно быть ТЗ, сделанное менеджером проекта. Я думаю смысл вполне ясен, но всё же:
<ul>
<li>данный документ упростит вам разработку, </li>
<li>вам не надо будет объяснять тестировщикам, что и как должно работать,</li>
<li>вы сможете ответить на вопрос почему вы сделали так, а не иначе</li>
</ul>
<p>Проектная задача без ТЗ &#8211; самоубийство: в любой момент вам могут сказать, что вы сделали не так как надо и вам нечем будет прикрыться.
</li>
<li>
Если проектная задача находится в процессе активной разработки, а менеджер просит отклониться от ТЗ, то обязательно убедитесь, что данные отклонения попали в ТЗ. Если вы уже сделали ту часть работы, которую затрагивают изменения, то просите менеджера поставить отдельную задачу в системе учёта и постановки задач и выделить на неё дополнительное время.</p>
<p>Не соблюдение правила грозит тем, что вы возможно затратите времени больше положенного и опять же не сможете в последующем объяснить почему сделано так, а не как в ТЗ.
</li>
<li>Каждая задача (проектная, суппортная) должна быть поставлена не устно, а в системе постановки и учёта задач. Если такая система не используется, то должно быть письмо по корпоративной почте.
<p>Не соблюдение правила грозит тем, что вы не сможете подтвердить то, что конкретные ваши действия были вызваны не вашими собственными побуждениями и не сможете подтвердить, что вообще работали в это время, например, при заполнении каких-нибудь отчётов.
</li>
<li>Любая переписка будь то корпоративная почта или сообщения в клиентах мгновенных сообщения наподобие ICQ, Mai.ru Agent, Yahoo и т.п. должна сохраняться на продолжительное время. Год как минимум.
</li>
<li>Никогда не делайте задачу, если её должны делать не вы. Например, если вы веб-разработчик, то конечно обладаете базовыми знаниями вёрстки, но в случае, если требуются даже малейшие правки по вёрстке, просите для этих задач верстальщика.
<p>Это позволит сократить время вашей работы и уложиться в срок.
</li>
<li>Любой функционал перед показом клиенту должен быть протестирован и должно быть добро от тестировщиков. Если менеджер настаивает на том, чтобы не дожидаться результатов тестирования, то обязательно получите от него подтверждение о том, что ответственность за возможные последствия по предоставления непротестированного продукта он берёт на себя.
</li>
<li>В случае овертаймов по просьбе менеджера обязательно требуйте письменного подтверждения от менеджера.
</li>
<li>Не соглашайтесь делать доработки по задаче пока не закрыты баги по ней и она не принята клиентом.
<p>Вполне возможно, что при внесении доработок может пострадать основной функционал, относящийся к задаче и выйдет так, что вы не сделали основную задачу.
</li>
<li>Ни в коем случае напрямую не соглашайтесь общаться с клиентом. Да, да, есть такие менеджеры, которые просят разработчиков самостоятельно узнать ответы на все интересующие их вопросы.
<p>Несоблюдение правила грозит тратой времени, ну и вообще не стоит делать за других их работу.
</li>
<li>Если по казалось бы небольшой части задачи у вас возникло более 5 вопросов, значит вы читали не ТЗ. Просите ТЗ.
</li>
<li>Никогда не работайте по оценке сделанной другим разработчиков или менеджером. Работать нужно только по своей оценке.
<p>Несоблюдение правила грозит &laquo;растратой&raquo; часов. Случается, когда оценивал задачу старший или ведущий разработчик, а реализовывать её отдали простому или младшему разработчику не знакомому с проектом.
</li>
<li>Не ведитесь на фразы типа &laquo;некогда&raquo;, &laquo;потом&raquo; и т.д..
</li>
</ul>
<p>Эти правила не являются абсолютными и объективными, выработаны на основе собственного опыта и честно говоря я их почти не применяю.<br />
Правда к команде разработки, в которую вхожу я, по причине не применения подобных правил по одному из проектов претензии предъявили спустя год после сдачи в суппорт.<br />
А ко мне и коллеге по другому проекту сейчас, когда он должен быть закончен, но мы не укладываемся в сроки, потому что работаем по чужой оценке.</p>
]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/12/24/developers-vs-pms-rules-for-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress + IIS: 404 ошибки на ссылках с русскими буквами в адресе и при скачивании файлов</title>
		<link>http://kosfiz.ru/2011/12/20/wordpress-iis-404-errors/</link>
		<comments>http://kosfiz.ru/2011/12/20/wordpress-iis-404-errors/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 18:29:05 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[IIS]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=854</guid>
		<description><![CDATA[После переезда блога на хостинг с IIS появились 404 ошибки при попытке открыть адрес, в котором присутствовали русские буквы. Решение нашлось быстро: IIS wordpress cyrillic permalinks error 404. Аналогичная проблема также появилась ссылками ведущими на файлы с определёнными расширениями: 7z, nupkg. С файлами совсем просто: 404 показывается потому что не добавлены соответствующие mime-типы. Это можно [...]]]></description>
			<content:encoded><![CDATA[<p>После переезда блога на хостинг с IIS появились 404 ошибки при попытке открыть адрес, в котором присутствовали русские буквы.<br />
Решение нашлось быстро: <a href="http://tomillo.ru/2009/10/15/iis-wordpress-cyrillic-permalinks-error-404/" title="IIS wordpress cyrillic permalinks error 404">IIS wordpress cyrillic permalinks error 404</a>.</p>
<p>Аналогичная проблема также появилась ссылками ведущими на файлы с определёнными расширениями: 7z, nupkg.<br />
С файлами совсем просто: 404 показывается потому что не добавлены соответствующие mime-типы. Это можно сделать в IIS Manager&#8217;е в MIME Types либо для всего сервера сразу либо только для нужного сайта.</p>
]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/12/20/wordpress-iis-404-errors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WCF: метаданные содержат ссылки, которые не могут быть разрешены</title>
		<link>http://kosfiz.ru/2011/12/20/wcf-metadata-contains-a-reference-that-cannot-be-resolved/</link>
		<comments>http://kosfiz.ru/2011/12/20/wcf-metadata-contains-a-reference-that-cannot-be-resolved/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 20:31:29 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=847</guid>
		<description><![CDATA[Вчера переносил на новый сервер свои WCF-сервисы и при обновлении прокси-класса столкнулся с ошибкой: Метаданные содержат ссылки, которые не могут быть разрешены: 'http://example.com/service.svc?wsdl'. Документ WSDL содержит ссылки, которые невозможно разрешить. Возникла ошибка при загрузке &#34;http://example.com/service.svc?xsd=xsd0&#34;. Базовое соединение закрыто: Непредвиденная ошибка при приеме. Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение. [...]]]></description>
			<content:encoded><![CDATA[<p>Вчера переносил на новый сервер свои WCF-сервисы и при обновлении прокси-класса столкнулся с ошибкой:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Метаданные содержат ссылки, которые не могут быть разрешены: 'http://example.com/service.svc?wsdl'.<br />
Документ WSDL содержит ссылки, которые невозможно разрешить.<br />
Возникла ошибка при загрузке &quot;http://example.com/service.svc?xsd=xsd0&quot;.<br />
Базовое соединение закрыто: Непредвиденная ошибка при приеме.<br />
Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение.<br />
Удаленный хост принудительно разорвал существующее подключение</div></div>
<p>или на английском так:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Metadata contains a reference that cannot be resolved: 'http://example.com/service.svc?wsdl'.<br />
The WSDL document contains links that could not be resolved.<br />
There was an error downloading 'http://example.com/service.svc?xsd=xsd0'.<br />
The underlying connection was closed: An unexpected error occurred on a receive.<br />
Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.</div></div>
<p>Проблема в том, что присутствующие в WSDL&#8217;е ссылки вида http://example.com/service.svc?xsd=xsd0 не открываются и сервер сбрасывает соединение.<br />
Как выяснилось ошибка состоит в том, что необходимо для процесса под которым запущен Application Pool сайта, в рамках которого работает WCF-сервис установить права на запись в папку C:\Windows\Temp</p>
<p>С данными правами всё начинает корректно работать.</p>
<p>Источник: <a href="http://merill.net/2008/04/wcf-add-service-reference-gotcha-with-windows-server/">WCF Add Service Reference gotcha with Windows Server</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/12/20/wcf-metadata-contains-a-reference-that-cannot-be-resolved/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xbox 360 и Xbox LIVE: ошибки 8C230002 и 800700E8 в магазине после обновления дашборда (dashboard)</title>
		<link>http://kosfiz.ru/2011/12/11/xbox-360-and-xbox-live-errors-in-market-8c230002-and-800700e8-after-update/</link>
		<comments>http://kosfiz.ru/2011/12/11/xbox-360-and-xbox-live-errors-in-market-8c230002-and-800700e8-after-update/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 22:00:28 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Xbox 360, Xbox LIVE, игры]]></category>
		<category><![CDATA[xbox]]></category>
		<category><![CDATA[xbox live]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=841</guid>
		<description><![CDATA[Суть проблемы в том, что после обновления дашборда консоли xbox 360 при попытке в магазине открыть описание какой-нибудь игры вместо описания получаем либо ошибку с кодом 8C230002, либо с кодом 800700E8 чаще всего в том случае, если на игру распространяется какая-нибудь скидка. Данная ошибка наблюдается не у всех пользователей. Поинтересоваться насчёт ошибки и поискать помощи [...]]]></description>
			<content:encoded><![CDATA[<p>Суть проблемы в том, что после обновления дашборда консоли xbox 360 при попытке в магазине открыть описание какой-нибудь игры вместо описания получаем либо ошибку с кодом 8C230002, либо с кодом 800700E8 чаще всего в том случае, если на игру распространяется какая-нибудь скидка. Данная ошибка наблюдается не у всех пользователей.</p>
<p>Поинтересоваться насчёт ошибки и поискать помощи я решил на официальном форуме. Оказалось, что у части пользователей наблюдаются аналогичные проблемы и тех. поддержка не смогла найти решения. Потом один из пользователей <a href="http://live.xbox.com/ru-RU/MyXbox/Profile?Gamertag=GenaShcherbakov">Гена Щербаков (GenaShcherbakov)</a> отписался о том, что смог случайным образом исправить данную проблему и на его консоли всё стало работать корректно. Проблема была в пароле на доступ к мессенджеру и лайву.</p>
<p>Его сообщение подтолкнуло меня к мысли, что проблема может заключаться в доступе к контенту (у меня стоял пароль на запуск видео). Тогда я проделал следующие шаги:</p>
<ul>
<li>Перешёл в настройки</li>
<li>Выбрал настройку &laquo;Семейная&raquo; (если вдруг называется по другом, то это квадрат слева от кнопки &laquo;Выключить&raquo;)</li>
<li>Открылось окно &laquo;Управление контентом&raquo;</li>
<li>Выбрал &laquo;Выкл&raquo;</li>
<li>Далее нажал &laquo;Сохранить и выйти&raquo;</li>
</ul>
<p>После выполненных действий проблема перестала наблюдаться.</p>
<p><a href="http://forums.xbox.com/ru-ru/___xbox/f/222/p/156835/827448.aspx">Исходная тема на форуме xbox.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/12/11/xbox-360-and-xbox-live-errors-in-market-8c230002-and-800700e8-after-update/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC: простенькая задачка</title>
		<link>http://kosfiz.ru/2011/12/10/asp-net-mvc-simple-task/</link>
		<comments>http://kosfiz.ru/2011/12/10/asp-net-mvc-simple-task/#comments</comments>
		<pubDate>Sat, 10 Dec 2011 17:10:44 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=836</guid>
		<description><![CDATA[Итак, у вас есть Action контроллера, в котором содержится следующий фрагмент кода: ViewBag.Test = &#34;test message&#34;; ViewBag.Alert = &#34;alert message&#34;; ViewData&#91;&#34;Alert&#34;&#93; = &#34;alert message 2&#34;; ViewBag.Func = new Func&#60;string, string&#62;&#40;x =&#62; &#123; &#160; &#160; ViewBag.Test = x; &#160; &#160; x = ViewBag.Alert; &#160; &#160; ViewBag.Alert = &#40;string&#41;ViewData&#91;&#34;Alert&#34;&#93;; &#160; &#160; return x; &#125;&#41;; И представление следующего [...]]]></description>
			<content:encoded><![CDATA[<p>Итак, у вас есть Action контроллера, в котором содержится следующий фрагмент кода:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ViewBag<span style="color: #008000;">.</span><span style="color: #0000FF;">Test</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;test message&quot;</span><span style="color: #008000;">;</span><br />
ViewBag<span style="color: #008000;">.</span><span style="color: #0000FF;">Alert</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;alert message&quot;</span><span style="color: #008000;">;</span><br />
ViewData<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;Alert&quot;</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;alert message 2&quot;</span><span style="color: #008000;">;</span><br />
<br />
ViewBag<span style="color: #008000;">.</span><span style="color: #0000FF;">Func</span> <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Func<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span>x <span style="color: #008000;">=&gt;</span> <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; ViewBag<span style="color: #008000;">.</span><span style="color: #0000FF;">Test</span> <span style="color: #008000;">=</span> x<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; x <span style="color: #008000;">=</span> ViewBag<span style="color: #008000;">.</span><span style="color: #0000FF;">Alert</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; ViewBag<span style="color: #008000;">.</span><span style="color: #0000FF;">Alert</span> <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#41;</span>ViewData<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;Alert&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> x<span style="color: #008000;">;</span><br />
<span style="color: #008000;">&#125;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span></div></div>
<p>И представление следующего вида:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">@ViewBag<span style="color: #008000;">.</span><span style="color: #0000FF;">Func</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;x&quot;</span><span style="color: #008000;">&#41;</span><br />
@ViewData<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;Test&quot;</span><span style="color: #008000;">&#93;</span><br />
@ViewBag<span style="color: #008000;">.</span><span style="color: #0000FF;">Alert</span></div></div>
<p>Какие строки мы увидим на странице и в какой последовательности? Сначала ответьте себе устно, а потом проверьте запустив.</p>
]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/12/10/asp-net-mvc-simple-task/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HTC Mozart не видит домашнюю Wi-Fi сеть: решение</title>
		<link>http://kosfiz.ru/2011/11/27/htc-mozart-did-not-see-a-home-wi-fi-network/</link>
		<comments>http://kosfiz.ru/2011/11/27/htc-mozart-did-not-see-a-home-wi-fi-network/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 11:39:41 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[dir-815]]></category>
		<category><![CDATA[HTC Mozart]]></category>
		<category><![CDATA[wi-fi]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=828</guid>
		<description><![CDATA[Недавно приобрёл HTC Mozart. Телефон домашнюю Wi-Fi сеть увидел сразу же как появился на пороге дома и проблем с подключением к ней не наблюдалось. Всё бы хорошо, но сегодня утром телефон при подключении по Wi-Fi перестал показывать домашнюю сеть среди нескольких доступных. Проанализировав всё, что я делал (на ночь я роутер d-link 815 выключал) подозрение [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно приобрёл HTC Mozart. Телефон домашнюю Wi-Fi сеть увидел сразу же как появился на пороге дома и проблем с подключением к ней не наблюдалось.</p>
<p>Всё бы хорошо, но сегодня утром телефон при подключении по Wi-Fi перестал показывать домашнюю сеть среди нескольких доступных. Проанализировав всё, что я делал (на ночь я роутер d-link 815 выключал) подозрение пало на роутер. Проверив настройки Wi-Fi проблем я не обнаружил, погуглив наткнулся на обсуждение следующей темы на форуме поддержки HTC: <a href="http://www.htc-support.ru/forum/index.php?showtopic=10406">Проблема с WiFi &#8211; не видит некоторые точки доступа</a>.</p>
<p>Учитывая, что в настройках роутера у меня был выбран пункт Enable Auto Channel Selection, я решил чётко установить номер канал и снять автоматический выбор (при включении как раз и происходит выбор канала, видимо был выбран канал &laquo;не с тем номером&raquo;).</p>
<p>Данные действия помогли и домашняя сеть снова появилась в списке доступных. Оказалось это вроде как особенность аппаратов от HTC.</p>
]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/11/27/htc-mozart-did-not-see-a-home-wi-fi-network/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Orchard CMS: интегрируем Uppod</title>
		<link>http://kosfiz.ru/2011/11/26/orchard-cms-development-uppod-module/</link>
		<comments>http://kosfiz.ru/2011/11/26/orchard-cms-development-uppod-module/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 10:56:48 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[orchard cms]]></category>
		<category><![CDATA[Uppod]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=782</guid>
		<description><![CDATA[Итак, появилась необходимость добавить для сайта на базе Orchard CMS, модуль для проигрывания mp3-файлов. Выбранный модуль jPlayer, к сожалению, уронил весь сайт. Не решившись более рисковать решил создать свой модуль на базе плеера Uppod (не факт, конечно, что мой не роняет ). С ним я работаю давно, поэтому долго не выбирал. Процедура создания модуля отличается [...]]]></description>
			<content:encoded><![CDATA[<p>Итак, появилась необходимость добавить для сайта на базе Orchard CMS, модуль для проигрывания mp3-файлов. Выбранный модуль jPlayer, к сожалению, уронил весь сайт. Не решившись более рисковать решил создать свой модуль на базе плеера Uppod (не факт, конечно, что мой не роняет <img src='http://kosfiz.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). С ним я работаю давно, поэтому долго не выбирал.</p>
<p>Процедура создания модуля отличается от других примеров создания модулей на данном сайте тем, что в рамках модуля мы будем активно использовать шорткоды, функционал которых добавляется на сайт путём добавления моего модуля kosfiz.Shortcodes, создание которого описано в записи &laquo;<a href="http://kosfiz.ru/2011/11/26/orchard-cms-implements-shortcodes-module/" title="Orchard CMS: добавляем поддержку shortcodes">Orchard CMS: добавляем поддержку shortcodes</a>&laquo;.</p>
<p>Итак, прежде всего необходимо создать модуль, и затем открыть проект с ним. Далее, в папку Models добавляем класс UppodSettingsRecord описывающий настройки плеера, распространяющиеся на весь сайт:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF; font-weight: bold;">namespace</span> kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Uppod</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Models</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> UppodSettingsRecord<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">int</span> Id <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">string</span> VideoPlayerStyle <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">int</span> VideoPlayerWidth <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">int</span> VideoPlayerHeight <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">string</span> AudioPlayerStyle <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">int</span> AudioPlayerWidth <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">int</span> AudioPlayerHeight <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">string</span> PhotoPlayerStyle <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">int</span> PhotoPlayerWidth <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">int</span> PhotoPlayerHeight <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">virtual</span> <span style="color: #6666cc; font-weight: bold;">string</span> BackgroundColor <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>Данный класс описывает размеры и стили для каждого из видов плееров (видео, аудио, фото), а также цвет фона.<br />
Потом отражаем свойства описанные в классе в базу посредством класса Migrations</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.Data.Migration</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Data</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.ContentManagement.MetaData</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.ContentManagement.MetaData.Builders</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.Core.Contents.Extensions</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF; font-weight: bold;">namespace</span> kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Uppod</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> Migrations <span style="color: #008000;">:</span> DataMigrationImpl<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> Create<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SchemaBuilder<span style="color: #008000;">.</span><span style="color: #0000FF;">CreateTable</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;UppodSettingsRecord&quot;</span>, table <span style="color: #008000;">=&gt;</span> table<span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Id&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #0000FF;">Int32</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">PrimaryKey</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Identity</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;VideoPlayerStyle&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #6666cc; font-weight: bold;">String</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">Nullable</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;VideoPlayerWidth&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #0000FF;">Int32</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">NotNull</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithDefault</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">400</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;VideoPlayerHeight&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #0000FF;">Int32</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">NotNull</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithDefault</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">300</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;AudioPlayerStyle&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #6666cc; font-weight: bold;">String</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">Nullable</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;AudioPlayerWidth&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #0000FF;">Int32</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">NotNull</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithDefault</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">300</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;AudioPlayerHeight&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #0000FF;">Int32</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">NotNull</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithDefault</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">90</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;PhotoPlayerStyle&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #6666cc; font-weight: bold;">String</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">Nullable</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;PhotoPlayerWidth&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #0000FF;">Int32</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">NotNull</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithDefault</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">400</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;PhotoPlayerHeight&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #0000FF;">Int32</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">NotNull</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithDefault</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">300</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">.</span><span style="color: #0000FF;">Column</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;BackgroundColor&quot;</span>, DbType<span style="color: #008000;">.</span><span style="color: #6666cc; font-weight: bold;">String</span>, column <span style="color: #008000;">=&gt;</span> column<span style="color: #008000;">.</span><span style="color: #0000FF;">NotNull</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">WithDefault</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;ffffff&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>Указываем имена полей, типы данных, и значения по умолчанию, а также обязательность. Дальше создаём папку Services и в неё добавляем интерфейс IUppodService и класс, реализующий данный интерфейс UppodService. Данный класс содержит методы обновления и получения настроек плеера, а также метод, который будет вызываться на обработку шорткода uppod. Последний и представляет наибольший интерес:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">string</span> UppodRender<span style="color: #008000;">&#40;</span>Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&gt;</span> atts<span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> type <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;video&quot;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>atts<span style="color: #008000;">.</span><span style="color: #0000FF;">ContainsKey</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;type&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; type <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#41;</span>atts<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;type&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> file <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> playlist <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>atts<span style="color: #008000;">.</span><span style="color: #0000FF;">ContainsKey</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;files&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; file <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#41;</span>atts<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;files&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>file<span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;,&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; playlist <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;{ 'playlist' : [&quot;</span> <span style="color: #008000;">+</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Join</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;, &quot;</span>, file<span style="color: #008000;">.</span><span style="color: #0000FF;">Split</span><span style="color: #008000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> <span style="color: #6666cc; font-weight: bold;">char</span><span style="color: #008000;">&#91;</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">&#123;</span> <span style="color: #666666;">','</span> <span style="color: #008000;">&#125;</span>, StringSplitOptions<span style="color: #008000;">.</span><span style="color: #0000FF;">RemoveEmptyEntries</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0600FF; font-weight: bold;">Select</span><span style="color: #008000;">&#40;</span>x<span style="color: #008000;">=&gt;</span> <span style="color: #666666;">&quot;{&quot;</span> <span style="color: #008000;">+</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span>file<span style="color: #666666;">&quot;:&quot;</span><span style="color: #008000;">&#123;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#125;</span><span style="color: #666666;">&quot;&quot;</span>, x<span style="color: #008000;">&#41;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;}&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToList</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;] }&quot;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; var settings <span style="color: #008000;">=</span> GetSettings<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> width <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> height <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> style <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">switch</span> <span style="color: #008000;">&#40;</span>type<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #666666;">&quot;audio&quot;</span><span style="color: #008000;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width <span style="color: #008000;">=</span> settings<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerWidth</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height <span style="color: #008000;">=</span> settings<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerHeight</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; style <span style="color: #008000;">=</span> settings<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerStyle</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #666666;">&quot;video&quot;</span><span style="color: #008000;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width <span style="color: #008000;">=</span> settings<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerWidth</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height <span style="color: #008000;">=</span> settings<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerHeight</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; style <span style="color: #008000;">=</span> settings<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerStyle</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">case</span> <span style="color: #666666;">&quot;photo&quot;</span><span style="color: #008000;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; width <span style="color: #008000;">=</span> settings<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerWidth</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; height <span style="color: #008000;">=</span> settings<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerHeight</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; style <span style="color: #008000;">=</span> settings<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerStyle</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">default</span><span style="color: #008000;">:</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">break</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span><span style="color: #008000;">&#40;</span>atts<span style="color: #008000;">.</span><span style="color: #0000FF;">ContainsKey</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;width&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; width <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span><span style="color: #008000;">&#41;</span>atts<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;width&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>atts<span style="color: #008000;">.</span><span style="color: #0000FF;">ContainsKey</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;height&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; height <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">int</span><span style="color: #008000;">&#41;</span>atts<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;height&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> Poster <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>atts<span style="color: #008000;">.</span><span style="color: #0000FF;">ContainsKey</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;poster&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Poster <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#41;</span>atts<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;poster&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> Comment <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>atts<span style="color: #008000;">.</span><span style="color: #0000FF;">ContainsKey</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;comment&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Comment <span style="color: #008000;">=</span> <span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&#41;</span>atts<span style="color: #008000;">&#91;</span><span style="color: #666666;">&quot;comment&quot;</span><span style="color: #008000;">&#93;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; Random rnd <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Random<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> playerId <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;uplayer_&quot;</span> <span style="color: #008000;">+</span> rnd<span style="color: #008000;">.</span><span style="color: #0000FF;">Next</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span>, <span style="color: #FF0000;">10000</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; StringBuilder flashvars <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> StringBuilder<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; flashvars<span style="color: #008000;">.</span><span style="color: #0000FF;">Append</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; flashvars<span style="color: #008000;">.</span><span style="color: #0000FF;">AppendFormat</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span>m<span style="color: #666666;">&quot;:&quot;</span><span style="color: #008000;">&#123;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#125;</span><span style="color: #666666;">&quot;,&quot;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;&quot;</span>uid<span style="color: #666666;">&quot;:&quot;</span><span style="color: #008000;">&#123;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#125;</span><span style="color: #666666;">&quot;,&quot;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;&quot;</span><span style="color: #008000;">&#123;</span><span style="color: #FF0000;">2</span><span style="color: #008000;">&#125;</span><span style="color: #666666;">&quot;: &quot;</span><span style="color: #008000;">&#123;</span><span style="color: #FF0000;">3</span><span style="color: #008000;">&#125;</span><span style="color: #666666;">&quot;&quot;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;{4}&quot;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;{5}&quot;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;{6}&quot;</span>, type, playerId, <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #008000;">&#40;</span>file<span style="color: #008000;">&#41;</span> <span style="color: #008000;">?</span> <span style="color: #666666;">&quot;pl&quot;</span> <span style="color: #008000;">:</span> <span style="color: #666666;">&quot;file&quot;</span>, <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">IsNullOrEmpty</span><span style="color: #008000;">&#40;</span>file<span style="color: #008000;">&#41;</span> <span style="color: #008000;">?</span> playlist<span style="color: #008000;">.</span><span style="color: #0000FF;">Replace</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&quot;</span><span style="color: #666666;">&quot;, &quot;</span><span style="color: #666666;">'&quot;) : file,<br />
&nbsp; &nbsp; string.IsNullOrEmpty(style) ? &quot;&quot; : &quot;, &quot;st&quot; : &quot;&quot; + style + &quot;&quot;&quot;, string.IsNullOrEmpty(Poster) ? &quot;&quot; : string.Format(&quot;, &quot;poster&quot; : &quot;{0}&quot;&quot;, Poster),<br />
&nbsp; &nbsp; string.IsNullOrEmpty(Comment) ? &quot;&quot; : string.Format(&quot;, &quot;comment&quot; : &quot;{0}&quot;&quot;, Comment));<br />
&nbsp; &nbsp; flashvars.Append(&quot;}&quot;);<br />
<br />
&nbsp; &nbsp; StringBuilder flashparams = new StringBuilder();<br />
&nbsp; &nbsp; flashparams.Append(&quot;{&quot;);<br />
&nbsp; &nbsp; flashparams.AppendFormat(&quot;id:&quot;{0}&quot;, &quot;<br />
&nbsp; &nbsp; + &quot;bgcolor:&quot;#{1}&quot;, allowFullScreen:&quot;true&quot;, allowScriptAccess:&quot;always&quot;&quot;, playerId, settings.BackgroundColor);<br />
&nbsp; &nbsp; flashparams.Append(&quot;}&quot;);<br />
<br />
&nbsp; &nbsp; StringBuilder htmlparams = new StringBuilder();<br />
&nbsp; &nbsp; htmlparams.Append(&quot;{&quot;);<br />
&nbsp; &nbsp; htmlparams.AppendFormat(&quot;m: &quot;{0}&quot;, comment: &quot;{1}&quot;, uid: &quot;{2}&quot;, {3} : &quot;{4}&quot;&quot;, type, string.IsNullOrEmpty(Comment) ? &quot;&quot; : Comment,<br />
&nbsp; &nbsp; &nbsp; &nbsp; playerId, string.IsNullOrEmpty(file) ? &quot;pl&quot; : &quot;file&quot;, string.IsNullOrEmpty(file) ? playlist.Replace(&quot;&quot;&quot;, &quot;'</span><span style="color: #666666;">&quot;) : file);<br />
&nbsp; &nbsp; htmlparams.Append(&quot;</span><span style="color: #008000;">&#125;</span><span style="color: #666666;">&quot;);<br />
<br />
&nbsp; &nbsp; string div = string.Format(&quot;</span><span style="color: #008000;">&lt;</span>div id<span style="color: #008000;">=</span><span style="color: #666666;">&quot;{0}&quot;</span> style<span style="color: #008000;">=</span><span style="color: #666666;">&quot;width:{1}px; height:{2}px;&quot;</span><span style="color: #008000;">&gt;&lt;/</span>div<span style="color: #008000;">&gt;</span><span style="color: #666666;">&quot;, playerId, width, height);<br />
&nbsp; &nbsp; string script = string.Format(&quot;</span><span style="color: #008000;">&lt;</span>script type<span style="color: #008000;">=</span><span style="color: #666666;">&quot;text/javascript&quot;</span><span style="color: #008000;">&gt;</span>init<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;{0}&quot;</span>, <span style="color: #008000;">&#123;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#125;</span>, <span style="color: #008000;">&#123;</span><span style="color: #FF0000;">2</span><span style="color: #008000;">&#125;</span>, <span style="color: #008000;">&#123;</span><span style="color: #FF0000;">3</span><span style="color: #008000;">&#125;</span>, <span style="color: #008000;">&#123;</span><span style="color: #FF0000;">4</span><span style="color: #008000;">&#125;</span>, <span style="color: #008000;">&#123;</span><span style="color: #FF0000;">5</span><span style="color: #008000;">&#125;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&lt;/</span>script<span style="color: #008000;">&gt;</span><span style="color: #666666;">&quot;, playerId, flashvars, flashparams, htmlparams, width, height);<br />
<br />
&nbsp; &nbsp; return string.Format(&quot;</span><span style="color: #008000;">&#123;</span><span style="color: #FF0000;">0</span><span style="color: #008000;">&#125;</span><span style="color: #008000;">&lt;</span>br<span style="color: #008000;">/&gt;</span><span style="color: #008000;">&#123;</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#125;</span><span style="color: #666666;">&quot;, div, script);<br />
}</span></div></div>
<p>Данный метод добавляет в страницу вместо шорткода div и скрипт вызывающий инициализацию плеера. Сама функция инициализации (и другие) содержится в скрипте и выглядит следующим образом:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #003366; font-weight: bold;">function</span> initUppodFlashPlayer<span style="color: #009900;">&#40;</span>playerId<span style="color: #339933;">,</span> flashvars<span style="color: #339933;">,</span> flashparams<span style="color: #339933;">,</span> width<span style="color: #339933;">,</span> height<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; swfobject.<span style="color: #660066;">embedSWF</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;/Modules/kosfiz.Uppod/Scripts/uppod.swf&quot;</span><span style="color: #339933;">,</span> playerId<span style="color: #339933;">,</span> width<span style="color: #339933;">,</span> height<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;9.0.115&quot;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span> flashvars<span style="color: #339933;">,</span> flashparams<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #003366; font-weight: bold;">function</span> initHtml5Player<span style="color: #009900;">&#40;</span>htmlparams<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> v <span style="color: #339933;">=</span> document.<span style="color: #660066;">createElement</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'video'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>v.<span style="color: #660066;">canPlayType</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'video/mp4'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">vplayer</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Uppod<span style="color: #009900;">&#40;</span>htmlparams<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #003366; font-weight: bold;">function</span> init<span style="color: #009900;">&#40;</span>playerId<span style="color: #339933;">,</span> flashvars<span style="color: #339933;">,</span> flashparams<span style="color: #339933;">,</span> htmlparams<span style="color: #339933;">,</span> width<span style="color: #339933;">,</span> height<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> playerVersion <span style="color: #339933;">=</span> swfobject.<span style="color: #660066;">getFlashPlayerVersion</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>playerVersion.<span style="color: #660066;">major</span> <span style="color: #339933;">&gt;=</span> <span style="color: #CC0000;">9</span><span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; initUppodFlashPlayer<span style="color: #009900;">&#40;</span>playerId<span style="color: #339933;">,</span> flashvars<span style="color: #339933;">,</span> flashparams<span style="color: #339933;">,</span> width<span style="color: #339933;">,</span> height<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; initUppodHtml5Player<span style="color: #009900;">&#40;</span>htmlparams<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>Другие файлы необходимые для работы плеера добавляем в папку Scripts: uppod.js (html5-версия), uppod.swf (плеер), swfobject (вдруг ещё не добавлен), uppod_init.js (содержимое приведено выше).</p>
<p>Теперь надо добавить скрипты в код страницы и добавить шорткод uppod и метод для его обработки в словарь шорткодов. Для этого добавляем папку Handlers и в него класс UppodHandler:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.ContentManagement.Handlers</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">kosfiz.Uppod.Models</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.Data</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.UI.Resources</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.Caching</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">kosfiz.UppodServices</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">kosfiz.Shortcodes.Models</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF; font-weight: bold;">namespace</span> kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Uppod</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Handlers</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> UppodHandler<span style="color: #008000;">:</span> ContentHandler<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">readonly</span> IWorkContextAccessor _workContextAccessor<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> UppodHandler<span style="color: #008000;">&#40;</span>IWorkContextAccessor workContextAccessor, IRepository<span style="color: #008000;">&lt;</span>UppodSettingsRecord<span style="color: #008000;">&gt;</span> repository, ICacheManager cacheManager, ISignals signals<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">try</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _workContextAccessor <span style="color: #008000;">=</span> workContextAccessor<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var resourceManager <span style="color: #008000;">=</span> _workContextAccessor<span style="color: #008000;">.</span><span style="color: #0000FF;">GetContext</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Resolve</span><span style="color: #008000;">&lt;</span>IResourceManager<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var links <span style="color: #008000;">=</span> resourceManager<span style="color: #008000;">.</span><span style="color: #0000FF;">GetRegisteredLinks</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">bool</span> uppod <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">bool</span> swfobject <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span>var link <span style="color: #0600FF; font-weight: bold;">in</span> links<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>link<span style="color: #008000;">.</span><span style="color: #0000FF;">Href</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToLower</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;uppod&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; uppod <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>link<span style="color: #008000;">.</span><span style="color: #0000FF;">Href</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToLower</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Contains</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;swfobject&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; swfobject <span style="color: #008000;">=</span> <span style="color: #0600FF; font-weight: bold;">true</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>swfobject<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resourceManager<span style="color: #008000;">.</span><span style="color: #0000FF;">RegisterHeadScript</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&lt;script type=&quot;</span>text<span style="color: #008000;">/</span>javascript<span style="color: #666666;">&quot; src=&quot;</span><span style="color: #008000;">/</span>Modules<span style="color: #008000;">/</span>kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Uppod</span><span style="color: #008000;">/</span>Scripts<span style="color: #008000;">/</span>swfobject<span style="color: #008000;">-</span><span style="color: #FF0000;">2.2</span><span style="color: #008000;">.</span><span style="color: #0000FF;">min</span><span style="color: #008000;">.</span><span style="color: #0000FF;">js</span><span style="color: #666666;">&quot;&gt;&lt;/script&gt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>uppod<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resourceManager<span style="color: #008000;">.</span><span style="color: #0000FF;">RegisterHeadScript</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&lt;script type=&quot;</span>text<span style="color: #008000;">/</span>javascript<span style="color: #666666;">&quot; src=&quot;</span><span style="color: #008000;">/</span>Modules<span style="color: #008000;">/</span>kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Uppod</span><span style="color: #008000;">/</span>Scripts<span style="color: #008000;">/</span>uppod<span style="color: #008000;">.</span><span style="color: #0000FF;">js</span><span style="color: #666666;">&quot;&gt;&lt;/script&gt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; resourceManager<span style="color: #008000;">.</span><span style="color: #0000FF;">RegisterHeadScript</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;&lt;script type=&quot;</span>text<span style="color: #008000;">/</span>javascript<span style="color: #666666;">&quot; src=&quot;</span><span style="color: #008000;">/</span>Modules<span style="color: #008000;">/</span>kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Uppod</span><span style="color: #008000;">/</span>Scripts<span style="color: #008000;">/</span>uppod_init<span style="color: #008000;">.</span><span style="color: #0000FF;">js</span><span style="color: #666666;">&quot;&gt;&lt;/script&gt;&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">finally</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ShortCodeService<span style="color: #008000;">.</span><span style="color: #0000FF;">AddShortCode</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;uppod&quot;</span>, UppodService<span style="color: #008000;">.</span><span style="color: #0000FF;">UppodRender</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">//добавляем шорткод в список обрабатываемых, указывая в какой метод передавать параметры</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UppodService uppodService <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> UppodService<span style="color: #008000;">&#40;</span>repository, cacheManager, signals<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>На этом программирование основного функционала можно считать законченным, осталось лишь добавить код для внесения настроек модуля в админку.<br />
Добавляем AdminMenu в корень проекта</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.UI.Navigation</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.Localization</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF; font-weight: bold;">namespace</span> kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Uppod</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> AdminMenu <span style="color: #008000;">:</span> INavigationProvider<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> Localizer T <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> AdminMenu<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T <span style="color: #008000;">=</span> NullLocalizer<span style="color: #008000;">.</span><span style="color: #0000FF;">Instance</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> GetNavigation<span style="color: #008000;">&#40;</span>NavigationBuilder builder<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; builder<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Uppod&quot;</span><span style="color: #008000;">&#41;</span>, <span style="color: #666666;">&quot;49&quot;</span>, menu <span style="color: #008000;">=&gt;</span> menu<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Uppod&quot;</span><span style="color: #008000;">&#41;</span>, <span style="color: #666666;">&quot;0&quot;</span>, item <span style="color: #008000;">=&gt;</span> item<span style="color: #008000;">.</span><span style="color: #0000FF;">Action</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Index&quot;</span>, <span style="color: #666666;">&quot;Admin&quot;</span>, <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> <span style="color: #008000;">&#123;</span> area <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;kosfiz.Uppod&quot;</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> MenuName<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get <span style="color: #008000;">&#123;</span> <span style="color: #0600FF; font-weight: bold;">return</span> <span style="color: #666666;">&quot;admin&quot;</span><span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>Осталось добавить контроллер и представление, соответственно:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Web.Mvc</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.UI.Admin</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">kosfiz.Uppod.ViewModels</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">kosfiz.Uppod.Services</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.Localization</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF; font-weight: bold;">namespace</span> kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Uppod</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Controllers</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#91;</span>ValidateInput<span style="color: #008000;">&#40;</span><span style="color: #0600FF; font-weight: bold;">false</span><span style="color: #008000;">&#41;</span>, Admin<span style="color: #008000;">&#93;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> AdminController<span style="color: #008000;">:</span> Controller<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">readonly</span> IUppodService _uppodService<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> IOrchardServices Services <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> Localizer T <span style="color: #008000;">&#123;</span> get<span style="color: #008000;">;</span> set<span style="color: #008000;">;</span> <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> AdminController<span style="color: #008000;">&#40;</span>IOrchardServices services, IUppodService uppodService<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Services <span style="color: #008000;">=</span> services<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _uppodService <span style="color: #008000;">=</span> uppodService<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#91;</span>HttpGet<span style="color: #008000;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> ActionResult Index<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var m <span style="color: #008000;">=</span> _uppodService<span style="color: #008000;">.</span><span style="color: #0000FF;">Get</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UppodSettingsViewModel model <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> UppodSettingsViewModel <span style="color: #008000;">&#123;</span> AudioPlayerHeight <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerHeight</span>, AudioPlayerStyle <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerStyle</span>, AudioPlayerWidth <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerWidth</span>, BackgroundColor <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">BackgroundColor</span>, VideoPlayerHeight <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerHeight</span>, VideoPlayerStyle <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerStyle</span>, VideoPlayerWidth <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerWidth</span>, PhotoPlayerHeight <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerHeight</span>, PhotoPlayerStyle <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerStyle</span>, PhotoPlayerWidth <span style="color: #008000;">=</span> m<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerWidth</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> View<span style="color: #008000;">&#40;</span>model<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#91;</span>HttpPost<span style="color: #008000;">&#93;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> ActionResult Index<span style="color: #008000;">&#40;</span>UppodSettingsViewModel model<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>ModelState<span style="color: #008000;">.</span><span style="color: #0000FF;">IsValid</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _uppodService<span style="color: #008000;">.</span><span style="color: #0000FF;">Set</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerStyle</span>, model<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerWidth</span>, model<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerHeight</span>, model<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerStyle</span>, model<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerWidth</span>, model<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerHeight</span>, model<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerStyle</span>, model<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerWidth</span>, model<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerHeight</span>, model<span style="color: #008000;">.</span><span style="color: #0000FF;">BackgroundColor</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> RedirectToAction<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Index&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> View<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">@model kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Uppod</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ViewModels</span><span style="color: #008000;">.</span><span style="color: #0000FF;">UppodSettingsViewModel</span><br />
<br />
<span style="color: #008000;">&lt;</span>h1<span style="color: #008000;">&gt;</span>@Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TitleForPage</span><span style="color: #008000;">&#40;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Manage Uppod settings&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&lt;/</span>h1<span style="color: #008000;">&gt;</span><br />
@<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008000;">&#40;</span>Html<span style="color: #008000;">.</span><span style="color: #0000FF;">BeginFormAntiForgeryPost</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&lt;</span>fieldset<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&lt;</span>table<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Background color&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">BackgroundColor</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td colspan<span style="color: #008000;">=</span><span style="color: #666666;">&quot;3&quot;</span><span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>h2<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Video&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&lt;/</span>h2<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Style&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerStyle</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Width&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerWidth</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Height&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">VideoPlayerHeight</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td colspan<span style="color: #008000;">=</span><span style="color: #666666;">&quot;3&quot;</span><span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>h2<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Audio&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&lt;/</span>h2<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Style&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerStyle</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Width&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerWidth</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Height&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">AudioPlayerHeight</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td colspan<span style="color: #008000;">=</span><span style="color: #666666;">&quot;3&quot;</span><span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>h2<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Photo&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&lt;/</span>h2<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Style&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerStyle</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Width&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerWidth</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>tr<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span>@T<span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Height&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">:&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @Html<span style="color: #008000;">.</span><span style="color: #0000FF;">TextBoxFor</span><span style="color: #008000;">&#40;</span>model<span style="color: #008000;">=&gt;</span>model<span style="color: #008000;">.</span><span style="color: #0000FF;">PhotoPlayerHeight</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>td<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>tr<span style="color: #008000;">&gt;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>table<span style="color: #008000;">&gt;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&lt;</span>input type<span style="color: #008000;">=</span><span style="color: #666666;">&quot;submit&quot;</span> value<span style="color: #008000;">=</span><span style="color: #666666;">&quot;@T(&quot;</span>Save<span style="color: #666666;">&quot;)&quot;</span> title<span style="color: #008000;">=</span><span style="color: #666666;">&quot;@T(&quot;</span>Save<span style="color: #666666;">&quot;)&quot;</span> <span style="color: #008000;">/&gt;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&lt;/</span>fieldset<span style="color: #008000;">&gt;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>Остаётся только собрать модуль.</p>
<p><a href="http://kosfiz.ru/wp-content/uploads/2011/11/Orchard.Module.kosfiz.Uppod.0.1.nupkg">Ссылка на модуль</a></p>
<p>Оба модуля успешно используются, к примеру, здесь: <a href="http://school286.ru/odod-voenno-patrioticheskoe">http://school286.ru/odod-voenno-patrioticheskoe</a></p>
<p>P.S.: CodeColorer &laquo;любезно&raquo; во вставках кода подтёр кое-что в тех местах, где идёт работа со строками, так что лучше смотреть код в модуле.</p>
]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/11/26/orchard-cms-development-uppod-module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Orchard CMS: добавляем поддержку shortcodes</title>
		<link>http://kosfiz.ru/2011/11/26/orchard-cms-implements-shortcodes-module/</link>
		<comments>http://kosfiz.ru/2011/11/26/orchard-cms-implements-shortcodes-module/#comments</comments>
		<pubDate>Sat, 26 Nov 2011 10:55:51 +0000</pubDate>
		<dc:creator>kosfiz</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[orchard cms]]></category>
		<category><![CDATA[shortcodes]]></category>
		<category><![CDATA[шорткоды]]></category>

		<guid isPermaLink="false">http://kosfiz.ru/?p=779</guid>
		<description><![CDATA[Shortcodes должны быть известны пользователям блогов на WordPress: с помощью шорткодов можно добавить свой функционал прямо в текст статьи. Это, на мой взгляд, необходимость. Например, плагин подсветки CodeColorer, который использую я. Аналогичный функционал понадобился бы при реализации спойлер-блоков, как, например, в статье на сайте kanobu.ru. Применений можно найти множество. Данной возможности в Orchard CMS по [...]]]></description>
			<content:encoded><![CDATA[<p>Shortcodes должны быть известны пользователям блогов на WordPress: с помощью шорткодов можно добавить свой функционал прямо в текст статьи. Это, на мой взгляд, необходимость.</p>
<p>Например, плагин подсветки CodeColorer, который использую я. Аналогичный функционал понадобился бы при реализации спойлер-блоков, как, например, в статье на сайте <a href="http://kanobu.ru/blog/id278628/?page=2">kanobu.ru</a>. Применений можно найти множество.</p>
<p>Данной возможности в Orchard CMS по умолчанию не наблюдается: там всё по заранее настроенному порядку, т.е. один тип контента нельзя вставить внутрь другого, нельзя добавить несколько одинаковых типов контента к статье (допустим несколько галерей). Это, естественно, ограничивает разработчиков и, как следствие, конечных пользователей.</p>
<p>Итак, задача, которую нужно прежде всего решить, это программно переопределить Parts.Common.Body.cshtml таким образом, чтобы в ней обрабатывались шорткоды.</p>
<p>Пошагово процесс выглядит следующим образом:</p>
<ul>
<li>Добавить класс, описывающий шорткод</li>
<li>Реализовать класс, через который можно будет добавлять шорткоды и методы их обрабатывающие. Реализовать в рамках класса простейший парсер шорткодов и отрисовку</li>
<li>Переопределить Parts.Common.Body.cshtml</li>
</ul>
<p>Создадим модуль и откроем его проект в Visual Studio или другой среде разработки. В папку Modules добавляем класс ShortCodeItem со следующим содержимым:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF; font-weight: bold;">namespace</span> kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Shortcodes</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Models</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> ShortCodeItem<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">string</span> codeName <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> CodeName<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> codeName<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; codeName <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> startIndex<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> StartIndex<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> startIndex<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startIndex <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #6666cc; font-weight: bold;">int</span> endIndex<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">int</span> EndIndex<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> endIndex<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; endIndex <span style="color: #008000;">=</span> value<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> TargetText<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">string</span> SourceText<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; get<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>На следующем шаге добавляем ShortCodeService, который и будет выполнять основные функции.</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Web.Mvc</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF; font-weight: bold;">namespace</span> kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Shortcodes</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Models</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> ShortCodeService<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//здесь будем хранить все шорткоды и методы, их обрабатывающие</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">static</span> Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, Func<span style="color: #008000;">&lt;</span>Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&gt;</span>, <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;&gt;</span> Methods <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, Func<span style="color: #008000;">&lt;</span>Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&gt;</span>, <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//метод добавления шорткода</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">void</span> AddShortCode<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> ShortCodeName, Func<span style="color: #008000;">&lt;</span>Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&gt;</span>, <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">&gt;</span> method<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span><span style="color: #008000;">!</span>Methods<span style="color: #008000;">.</span><span style="color: #0000FF;">ContainsKey</span><span style="color: #008000;">&#40;</span>ShortCodeName<span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008080; font-style: italic;">//если шорткод уже есть, то игнорируем его</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Methods<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>ShortCodeName, method<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//выполняем метод соответсвующий имени шорткода и передаём ему параметры, сторонний метод должен принимать на выход словарь строка = объект</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> <span style="color: #6666cc; font-weight: bold;">string</span> DoMethod<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> ShortCodeName, Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&gt;</span> atts<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> Methods<span style="color: #008000;">&#91;</span>ShortCodeName<span style="color: #008000;">&#93;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Invoke</span><span style="color: #008000;">&#40;</span>atts<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//из текста выбирает шорткоды</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> List<span style="color: #008000;">&lt;</span>ShortCodeItem<span style="color: #008000;">&gt;</span> GetShortCodes<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> Text<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<span style="color: #008000;">&lt;</span>ShortCodeItem<span style="color: #008000;">&gt;</span> codes <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> List<span style="color: #008000;">&lt;</span>ShortCodeItem<span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span>var item <span style="color: #0600FF; font-weight: bold;">in</span> Methods<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">try</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> startTag <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;[{0}&quot;</span>, item<span style="color: #008000;">.</span><span style="color: #0000FF;">Key</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> endTag <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Format</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;[/{0}]&quot;</span>, item<span style="color: #008000;">.</span><span style="color: #0000FF;">Key</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> startIndex <span style="color: #008000;">=</span> Text<span style="color: #008000;">.</span><span style="color: #0000FF;">IndexOf</span><span style="color: #008000;">&#40;</span>startTag<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>startIndex <span style="color: #008000;">!=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> endIndex <span style="color: #008000;">=</span> Text<span style="color: #008000;">.</span><span style="color: #0000FF;">IndexOf</span><span style="color: #008000;">&#40;</span>endTag, startIndex<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>endIndex <span style="color: #008000;">!=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> paramsEndIndex <span style="color: #008000;">=</span> Text<span style="color: #008000;">.</span><span style="color: #0000FF;">IndexOf</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;]&quot;</span>, startIndex<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>paramsEndIndex <span style="color: #008000;">!=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> source <span style="color: #008000;">=</span> Text<span style="color: #008000;">.</span><span style="color: #0000FF;">Substring</span><span style="color: #008000;">&#40;</span>startIndex <span style="color: #008000;">+</span> startTag<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span>, paramsEndIndex <span style="color: #008000;">-</span> startIndex <span style="color: #008000;">-</span> startTag<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&gt;</span> atts <span style="color: #008000;">=</span> GetValues<span style="color: #008000;">&#40;</span>source, paramsEndIndex <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span>, endIndex <span style="color: #008000;">-</span> paramsEndIndex <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span>, Text<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; codes<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> ShortCodeItem <span style="color: #008000;">&#123;</span> CodeName <span style="color: #008000;">=</span> item<span style="color: #008000;">.</span><span style="color: #0000FF;">Key</span>, StartIndex <span style="color: #008000;">=</span> startIndex, EndIndex <span style="color: #008000;">=</span> endIndex, TargetText <span style="color: #008000;">=</span> DoMethod<span style="color: #008000;">&#40;</span>item<span style="color: #008000;">.</span><span style="color: #0000FF;">Key</span>, atts<span style="color: #008000;">&#41;</span>, SourceText <span style="color: #008000;">=</span> Text<span style="color: #008000;">.</span><span style="color: #0000FF;">Substring</span><span style="color: #008000;">&#40;</span>startIndex, endIndex <span style="color: #008000;">+</span> endTag<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span> <span style="color: #008000;">-</span> startIndex<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#125;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; startIndex <span style="color: #008000;">=</span> Text<span style="color: #008000;">.</span><span style="color: #0000FF;">IndexOf</span><span style="color: #008000;">&#40;</span>startTag, startIndex <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">catch</span> <span style="color: #008000;">&#40;</span>Exception<span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> codes<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//формируем словарь параметров шорткода</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">static</span> Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&gt;</span> GetValues<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> source, <span style="color: #6666cc; font-weight: bold;">int</span> InnerStart, <span style="color: #6666cc; font-weight: bold;">int</span> InnerEnd, <span style="color: #6666cc; font-weight: bold;">string</span> InnerText<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&gt;</span> values <span style="color: #008000;">=</span> <a href="http://www.google.com/search?q=new+msdn.microsoft.com"><span style="color: #008000;">new</span></a> Dictionary<span style="color: #008000;">&lt;</span><span style="color: #6666cc; font-weight: bold;">string</span>, <span style="color: #6666cc; font-weight: bold;">object</span><span style="color: #008000;">&gt;</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> paramNameIndex <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">IndexOf</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;=&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">int</span> lastParamValueIndex <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">while</span> <span style="color: #008000;">&#40;</span>paramNameIndex <span style="color: #008000;">!=</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> attrName <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">Substring</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span>, paramNameIndex<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #6666cc; font-weight: bold;">string</span> attrValue <span style="color: #008000;">=</span> <span style="color: #6666cc; font-weight: bold;">string</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Empty</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>source<span style="color: #008000;">&#91;</span>paramNameIndex <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">&#93;</span> <span style="color: #008000;">!=</span> <span style="color: #666666;">'&quot;'</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastParamValueIndex <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">IndexOf</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot; &quot;</span>, paramNameIndex <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>lastParamValueIndex <span style="color: #008000;">==</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastParamValueIndex <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span> <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attrValue <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">Substring</span><span style="color: #008000;">&#40;</span>paramNameIndex <span style="color: #008000;">+</span> <span style="color: #FF0000;">1</span>, lastParamValueIndex <span style="color: #008000;">-</span> paramNameIndex<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastParamValueIndex <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">IndexOf</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;<span style="color: #008080; font-weight: bold;">\&quot;</span>&quot;</span>, paramNameIndex <span style="color: #008000;">+</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>lastParamValueIndex <span style="color: #008000;">==</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; lastParamValueIndex <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">Length</span> <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; attrValue <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">Substring</span><span style="color: #008000;">&#40;</span>paramNameIndex <span style="color: #008000;">+</span> <span style="color: #FF0000;">2</span>, lastParamValueIndex <span style="color: #008000;">-</span> paramNameIndex <span style="color: #008000;">-</span> <span style="color: #FF0000;">2</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; values<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span>attrName<span style="color: #008000;">.</span><span style="color: #0000FF;">Trim</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>, attrValue<span style="color: #008000;">.</span><span style="color: #0000FF;">Trim</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; source <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">Remove</span><span style="color: #008000;">&#40;</span><span style="color: #FF0000;">0</span>, lastParamValueIndex<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; paramNameIndex <span style="color: #008000;">=</span> source<span style="color: #008000;">.</span><span style="color: #0000FF;">IndexOf</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;=&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//InnerHtml предопределённый параметр, содержит содержимое тегов шорткода [shortcodeName]InnerHtml[/shortcodeName]</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; values<span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;InnerHtml&quot;</span>, InnerText<span style="color: #008000;">.</span><span style="color: #0000FF;">Substring</span><span style="color: #008000;">&#40;</span>InnerStart, InnerEnd<span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Trim</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> values<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008080; font-style: italic;">//заменяем теги шорткодов на html сгенерированный модулями</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #0600FF; font-weight: bold;">static</span> MvcHtmlString Render<span style="color: #008000;">&#40;</span><span style="color: #6666cc; font-weight: bold;">string</span> Text<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<span style="color: #008000;">&lt;</span>ShortCodeItem<span style="color: #008000;">&gt;</span> codes <span style="color: #008000;">=</span> GetShortCodes<span style="color: #008000;">&#40;</span>Text<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">foreach</span> <span style="color: #008000;">&#40;</span>var item <span style="color: #0600FF; font-weight: bold;">in</span> codes<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Text <span style="color: #008000;">=</span> Text<span style="color: #008000;">.</span><span style="color: #0000FF;">Replace</span><span style="color: #008000;">&#40;</span>item<span style="color: #008000;">.</span><span style="color: #0000FF;">SourceText</span>, item<span style="color: #008000;">.</span><span style="color: #0000FF;">TargetText</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">return</span> MvcHtmlString<span style="color: #008000;">.</span><span style="color: #0000FF;">Create</span><span style="color: #008000;">&#40;</span>Text<span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>Собственно, парсер обрабатывает шорткод теги вида:<br />
[shortcodeName attr1=value attr2="value with whitespace or =" attr3=value2]different text[/shortcodeName]</p>
<p>Т.е. необходим закрывающий шорткод тег, значения с пробелом или = заключается в двойные кавычки. Содержимое между открывающим и закрывающим шорткодами передаётся во внешний метод по ключу InnerHtml.</p>
<p>Осталось переопределить Parts.Common.Body.cshtml. Для этого добавляем в папку Views проекта копию оригинального файла и меняем его содержимое на следующее:</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">@<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">kosfiz.Shortcodes.Models</span><span style="color: #008000;">;</span><br />
@<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; var body <span style="color: #008000;">=</span> ShortCodeService<span style="color: #008000;">.</span><span style="color: #0000FF;">Render</span><span style="color: #008000;">&#40;</span>Model<span style="color: #008000;">.</span><span style="color: #0000FF;">Html</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ToString</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
<span style="color: #008000;">&#125;</span><br />
@body</div></div>
<p>Далее добавляем в папку Models класс ShortCodeShapeProvider</p>
<div class="codecolorer-container csharp default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:400px;"><div class="csharp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Collections.Generic</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Linq</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">System.Text</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.DisplayManagement.Descriptors</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard</span><span style="color: #008000;">;</span><br />
<span style="color: #0600FF; font-weight: bold;">using</span> <span style="color: #008080;">Orchard.ContentManagement</span><span style="color: #008000;">;</span><br />
<br />
<span style="color: #0600FF; font-weight: bold;">namespace</span> kosfiz<span style="color: #008000;">.</span><span style="color: #0000FF;">Shortcodes</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Models</span><br />
<span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">class</span> ShortCodeShapeProvider <span style="color: #008000;">:</span> IShapeTableProvider<br />
&nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">private</span> <span style="color: #0600FF; font-weight: bold;">readonly</span> IWorkContextAccessor _workContextAccessor<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> ShortCodeShapeProvider<span style="color: #008000;">&#40;</span>IWorkContextAccessor workContextAccessor<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _workContextAccessor <span style="color: #008000;">=</span> workContextAccessor<span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">public</span> <span style="color: #6666cc; font-weight: bold;">void</span> Discover<span style="color: #008000;">&#40;</span>ShapeTableBuilder builder<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; builder<span style="color: #008000;">.</span><span style="color: #0000FF;">Describe</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Parts_Common_Body&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">.</span><span style="color: #0000FF;">OnDisplaying</span><span style="color: #008000;">&#40;</span>displaying <span style="color: #008000;">=&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ContentItem item <span style="color: #008000;">=</span> displaying<span style="color: #008000;">.</span><span style="color: #0000FF;">Shape</span><span style="color: #008000;">.</span><span style="color: #0000FF;">ContentItem</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0600FF; font-weight: bold;">if</span> <span style="color: #008000;">&#40;</span>displaying<span style="color: #008000;">.</span><span style="color: #0000FF;">ShapeMetadata</span><span style="color: #008000;">.</span><span style="color: #0000FF;">DisplayType</span> <span style="color: #008000;">==</span> <span style="color: #666666;">&quot;Detail&quot;</span><span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; displaying<span style="color: #008000;">.</span><span style="color: #0000FF;">ShapeMetadata</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Alternates</span><span style="color: #008000;">.</span><span style="color: #0000FF;">Add</span><span style="color: #008000;">&#40;</span><span style="color: #666666;">&quot;Parts_Common_Body&quot;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #008000;">&#125;</span><br />
<span style="color: #008000;">&#125;</span></div></div>
<p>Вот собственно и всё. Пример создания модуля использующего шорткоды описан в статье &laquo;<a href="http://kosfiz.ru/2011/11/26/orchard-cms-development-uppod-module/" title=">Orchard CMS: интегрируем Uppod&raquo;>Orchard CMS: интегрируем Uppod</a>&laquo;.</p>
<p><a href="http://kosfiz.ru/wp-content/uploads/2011/11/Orchard.Module.kosfiz.Shortcodes.0.1.nupkg">Ссылка на модуль</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kosfiz.ru/2011/11/26/orchard-cms-implements-shortcodes-module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

