среда, 24 декабря 2008 г.

Как изменить строку "You are here" в сайте на Dotnetnuke чтобы она отображалась по русски

Как изменить строку "You are here" в сайте на Dotnetnuke чтобы она отображалась по русски?

Нужно найти папку /Portals/_defauls/Skins/MinimalExtrophy/App_localResources. Там будет файл index.ascx.resx. Нужно скопировать его в файл index.ascx.ru-RU.resx, а потом в текстовом редакторе открыть этот файл и изменить там строку "You are here" на "Вы здесь".
Такое решение работает для DNN версии 4.9 и выше. Посмотреть ка это работет можно здесь

понедельник, 17 ноября 2008 г.

Ошибка в сайте на Dotnetnuke: System.Web.Configuration.HttpCapabilitiesBase.get_MajorVersion()

Вот уже неделю наблюдаю в журнале сайта, сделанного на CMS Dotnetnuke, сообщение об ошибке:

Message: DotNetNuke.Services.Exceptions.PageLoadException: Value cannot be null. Parameter name: String ---> System.ArgumentNullException: Value cannot be null. Parameter name: String at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) at System.Web.Configuration.HttpCapabilitiesBase.get_MajorVersion() at DotNetNuke.UI.Utilities.ClientAPI.BrowserSupportsFunctionality(ClientFunctionality eFunctionality) at DotNetNuke.UI.WebControls.DNNMenu.get_IsDownLevel() at DotNetNuke.UI.WebControls.DNNMenu.LoadPostedXML() at DotNetNuke.UI.WebControls.DNNMenu.OnInit(EventArgs e) at System.Web.UI.Control.InitRecursive(Control namingContainer) at System.Web.UI.Control.AddedControl(Control control, Int32 index) at System.Web.UI.ControlCollection.Add(Control child) at DotNetNuke.UI.Skins.NavObjectBase.InitializeNavControl(Control objParent, String strDefaultProvider) at DotNetNuke.UI.Skins.Controls.Nav.OnInit(EventArgs e) at System.Web.UI.Control.InitRecursive(Control namingContainer) at System.Web.UI.Control.InitRecursive(Control namingContainer) at System.Web.UI.Control.AddedControl(Control control, Int32 index) at System.Web.UI.ControlCollection.Add(Control child) at DotNetNuke.Framework.DefaultPage.Page_Init(Object sender, EventArgs e) at System.Web.UI.Control.OnInit(EventArgs e) at System.Web.UI.Page.OnInit(EventArgs e) at DotNetNuke.Framework.PageBase.OnInit(EventArgs e) at System.Web.UI.Control.InitRecursive(Control namingContainer) at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) --- End of inner exception stack trace ---

Причем бывает UserAgent: Mozilla и бывает UserAgent: Yandex/1.01.001 (compatible; Win16; F).

Все это похоже на ботов Яндекса и Гугла, хотя, так как в журнале нет IP-адресов, пока это точно не известно. Нужно еще будет проверить лог IIS-а, чтобы это точно узнать. В любом случае как-то некрасиво получается, что можно вот так просто DNN-сайт свалить в эксепшн. А уж тем более, если это Боты, то такой вариант разработчики должны были учесть.

Придется теперь лезть в ядро и ковыряться в vb.NET исходниках. Кто вообще придумал Dotnetnuke писать не на C# ?!!

понедельник, 10 ноября 2008 г.

Бегун требует аттестат WebMoney Transfer для вывода денег

С ноября 2008 года, вывести деньги из системы контекстной рекламы Бегун можно только тем, кто получил аттестат WebMoney Transfer. Причем, сумму меньше 300 у.е. можно вывести имея начальный аттестат, а больше - уже нужен персональный.

Для получения начального аттестата нужно заполнить заявку в которой указать свои персональные данные (Ф.И.О., место и дату рождения, прописку, паспорт и т.д. вплоть до размера трусов). После чего эти данные будут проверены при ЛИЧНОЙ (!) встрече одним из Персонализаторов. При чем за это НУЖНО ЗАПЛАТИТЬ от $3 и выше!
Персонализаторы есть только в больших городах. А если я живу в каком-то Мухосранске? Теперь я должен ехать фиг знает куда, платить за билет, платить за персонализацию, выкладывать спецслужбам все свои данные... И все это ради того, чтобы получить жалкие $50?

Begun сильно меня разочаровал. Думаю, что не только меня. С такими заморочками он потеряет много партнеров. А Яндекс директ и Google AdSence - приобретут.
Зачем Бегун сам себе усложняет жизнь, вводя необходимость наличия аттестата WebMoney Transfer?

понедельник, 3 ноября 2008 г.

Как программно изменить название веб-страницы в Dotnetnuke ?

В обычной .aspx странице программно изменить название (title) очень просто:


protected void Page_Load(object sender, EventArgs e)
{
this.Title = "Обычная веб-страница";
}


В DNN модуле такой код не даст ничего. Название страницы будет то, которое сформирует ядро Dotnetnuke.
Но Title страницы на Dotnetnuke все-таки можно без проблем изменить. Делается это так:

protected void Page_Load(object sender, EventArgs e)
{
DotNetNuke.Framework.CDefault page = (DotNetNuke.Framework.CDefault)this.Page;
page.Title = "Веб-страница в Dotnetnuke";
}



Посмотреть как это работает можно здесь: сайт а-класса школа 5 города Ахтырка

воскресенье, 2 ноября 2008 г.

Сайт Одноклассники.ру стал платным: зажрались окончательно!

Со вчерашнего дня за регистрацию на супер-пупер популярном сайте Одноклассники.ру придется раскошелиться: нужно будет прислать платное СМС, причем его цена различная для разных операторов. 
За эти сайтом уже давно замечена жажда к деньгам: то режим "невидимка" платный придумали, то оценку "5+" за деньги придумали, то "застраховать фотографию" опять же за деньги. Теперь вот и регистрация платная. Думаю следующим шагом будет абонплата.
В условиях кризиса хозяева сайта решили повысить свои сверхприбыли. Это их право. В Сети есть еще много других БЕСПЛАТНЫХ социальных сетей, поэтому не нужно зацикливаться на этом зажравшемся сайте.
Давно есть подозрения, что "Одноклассники.ру" контролируются спецслужбами, а так как в России карточку мобильного оператора не купить без паспорта, то теперь, отправив СМС для регистрации на сайте, эта карточка привязывается еще и к аккаунту на  "Одноклассниках". В общем тотальный контроль. Таким образом убиваются 2 зайца: сайт получает дополнительный доход, а спецслужбы по номеру телефона находят аккаунт на сайте.
В крайнем случае можно создать свой сайт, например вот такой: сайт 11-А класса 5-й школы, который всегда будет бесплатным и не будет тайным проектом спецслужб :)

среда, 29 октября 2008 г.

Очередной лохотрон: обманщики на Bez-Obid.Ru ( Zhlobam.net)

Для заработка в интернет появился очередной сервис. Сначала размещался на Zhlobam.net а потом плано перешел на Bez-Obid.Ru. Суть в том, что одни люди размещают на этом сайте жалобы, а люди, кототрые хотят заработать берут специально подготовленные ссылки на жалобы и постят и где-попало: на сайтах, форума, блогах. За каждый уникальны клик (Uniq) сайт начисляет 0.5 цента на счет партнера. Минимальная сумма к выводу $20.
Я тоже (в моем то возрасте!) повелся на эту фигню. Решил заработать двадцатку на пиво. Сначала вроде бы все шло неплохо были клики и около 80% из них были "уники". Но постепенно, в течении месяца процент "уников" уменьшался и дошло вообше до смешного. Смотрите скриншот:



В общем, такими темпами $20, которые можно вывести себе на кошелек, соберутся только к старости.
Люди! Не ведитесь на этот лохотрон: Bez-Obid.Ru обманывают жестко и нагло.
Bez-Obid.Ru - кидалово очередное.

Жаль потраченного времени. Ну что-ж будет наука на будущее. Надеюсь мой опыт Вам поможет :)

Как динамически сменить запрос для ListView привязанного к LinqDataSource?

Для того чтобы динамически сменить запрос для ListView привязанному к LinqDataSource нужно обработать событие OnSelecting у LinqDataSource. 

Например вот так:


protected void dsMates_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
if (Request.Params["classMateId"] != null)
{
int mateId;
if (int.TryParse(Request.Params["classMateId"], out mateId))
{
using (DataClassesPrivateMsgDataContext db = new DataClassesPrivateMsgDataContext())
{
e.Result = db.Classmates.Where(mate => mate.Id == mateId).FirstOrDefault();
}
}
}
}

Посмотреть как это работает можно здесь: сайт а-класса

вторник, 28 октября 2008 г.

Локализанция CalendarExtender в DotNetNuke

Классная все-таки штука AjaxControlToolkit: щелкнул 2 раза, и у тебя уже календарь на веб-страничке. Кинул себе календарь на форму в своем новом dotnetnuke модуле, немного насторил свойства и зашибись работает. Правда почему-то название месяцев по английски пишет, хотя должен настройки брать из браузера.
Оказалось в DNN как всегда свои заморочки, особенно с AJAX-ом. Чтобы исправить это пишем в модуле так:


protected void Page_Init(object sender, EventArgs e)
{
if (DotNetNuke.Framework.AJAX.IsInstalled())
{
DotNetNuke.Framework.AJAX.RegisterScriptManager();
DotNetNuke.Framework.AJAX.SetScriptManagerProperty(Page, "EnableScriptGlobalization", new object[] { true });
DotNetNuke.Framework.AJAX.SetScriptManagerProperty(Page, "EnableScriptLocalization", new object[] { true });
}
}


И, вуаля: названия дней недели и месяцев в CalendarExtender отображаются по-русски.

вторник, 21 октября 2008 г.

Проблема с ModalPopupExtender в DotNetNuke (DNN) : ModalPopupExtender в Internet Explorer отображается не по центру экрана, а слева вверху

Захотелось мне сделать на AJAX красивые Popup-окошки в одном из разрабатываемых сайтов, чтобы пользователя чувствовали себя как-будто они не на веб-старнице, а в настольном приложении. Сказано - сделано. Используя ModalPopupExtender это проще простого.
Как обычно тестирую в 3-х браузерах: Opera, Internet Explorer и FireFox.
В "Опере" и FireFox-е все работет хорошо, а вот в Internet Explorer-е ModalPopupExtender отображает попап-окно не по центру окна браузера, а слева вверху, причем центр этого окна находится в точке с коодинатами x=0, y=0.

Такое положение дел меня явно не устраивало. Начал поиски причины и решения. Сайт я начал разрабатывать на DNN версии 4.8.4, но потом вышла версия 4.9 и модули (как и сам dotnetnuke) также тестировались на новой версии. Так вот я заметил, что на DNN 4.8.4 вышеописанная проблема наблюдалась, а на DNN 4.9 уже нет!

Оказалось, что причина была в том, что сайт на DNN версии 4.8.4 рендерится браузерами в Quirks mode, благодаря вот этому:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

А вот если посмотреть на страницы сгенерированную DNN 4.9 видим:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

И теперь уже браузеры рендерят станицы в Standarts Compilance Mode (Режим соответствия стандартам). Это радует. Наконец-то и dotnetnuke начинает пытаться соответствовать стандартам. Насколько было бы легче программистам, если бы все последовали их примеру:)

Итак, как говорят в Голливуде : Problem solved. Хочу еще заметить: остерегайтесь установки скинов на свой сайт, так как после этого он, возможно, будет работать не совсе так как он работал до этого:)

Напомню, что прежде, чем использовать у себя в модуле ModalPopupExtender из набора AjaxControlToolkit, необходимо добавить следующую строку в .ascx файле Вашего модуля.


<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajaxToolkit" %>


Кроме того, чтобы AJAX работал в Вашем модуле, нужно в DotNetNuke-освском сайте установить галочку "Supports Partial Rendering?" для Ваших user-контролов, в которых используется AJAX.

Форматтер C# JavaScript HTML ASP.NET кода для вашего блога

Так как мне часто приходится выкладывать на своем блоге код на C#, javaScript, HTML, то хотелось, чтобы он был красиво и главное удобно для чтения оформлен. Поэтому я пользуюсь для этого бесплатным онлайн сервисом, который находится здесь:

www.manoli.net/csharpformat/format.aspx

Рекомендую всем!

вторник, 14 октября 2008 г.

каталог сайтов, на которых можно разместить ссылку на свой блог

Полезная  подборка: "41 место, куда можете засунуть свой блог"
лежит здесь: www.ithorn.ru/2007/10/27/promote-your-rss/

пятница, 10 октября 2008 г.

анимированные gif - файлы загрузки для AJAX

Есть классниый сайт на котором в онлайне можно получить анимированную gif-ку для AJAX лоадера. Есть много шаблонов, можно выбрать цвета, размер. Сайт: ajaxload.info. Я на своем сайте одноклассников 11-А класса уже использую несколько таких.

Для пользователей "Оперы" с сайта "Оперы" можно скачать виджет "Animated loading image generator!", и тогда можно будет генерить gif-ку не выходя со своего любимого сайта одноклассников 11-А класса :)

среда, 8 октября 2008 г.

Как поставить счетчик liveinternet.ru в блоге

Решил поставить себе в блог счетчик посещений liveinternet.ru. Зарегистрировался, получил код. Добавил в блог гаджет text/html,  впихнул туда код счетчика. Смотрю на блог, а он выдает ошибки в javascript. Открываю снова гаджет, и вижу что код счетчика автоматически был изменен  (заменнены кое какие кавычки) и естественно не работает.
Ладно,  прописываю код уже в шаблоне в  самом html. При попытке сохранить шаблон выскакивает ошибка:

Не удалось проанализировать ваш шаблон, так как он неправильно сформирован. Убедитесь, что все элементы XML правильно закрыты.
Сообщение об ошибке в XML: Open quote is expected for attribute "{1}"


Понятно,  liveinternet до сих пор с xml-ем не дружит. И не только с xml, а и вообще со стандартами Веба. А на дворе то 21-й век.

Черт с ним, с этим "живым интернетом". Пойдем к "Гуглу", любителю стандартов. Здесь:  www.google.com/analytics регистрируюсь, получаю код, копирую его в шаблон блога. И все работает. 

Возникает вопрос: почему liveinternet.ru до сих пор не переделал код своего счетчика? Ведь такого рода компании должны быть впереди всех остальных?

P.S. На одном блогспотовском блоге заметил стоЯщий и работающий счетчик liveinternet. То есть это возможно. Посмотрел HTML код и вижу, что код работающего счетчина разделен на несколько строк, а я в своих пробах установки всегда пробовал всунуть "вытянутый в одну строку". Что ж попытка - непытка: беру код многострочный и пихаю в гаджет text/html. И... работает. В чем фишка - не понял, и нет времени разбираться. Главное, что работает:)

В сайте сделанном на Dotnetnuke постоянно пересоздается домен приложения: "The AppDomain shut down because of the hosting environment."

Создал сайт с использованием CMS DotNetNuke. На моей девелоперской машине он работал очень даже шустро. После размещения на американском хостинге заметил, что страницы, особенно первая, открываются очень долго.  Смотрю журнал сайта и вижу, что домен приложения (appDomain) пересоздается несколько раз в минуту. Идут последовательные записи:

Application Shutting Down.  Shutdown Details: The AppDomain shut down because of the hosting environment.

Application Started.

Пересоздание домена приложения операция не быстрая, она и приводит к уменьшению производительности сайта (медленной загрузке страниц).

Так как я не не делал никаких изменений в файлах (в т.ч. конфигурационнных) веб-приложения, а также во вложенных папках проекта, возник вопрос: почему и как с этим бороться?

Имея опыт работы с хостерами знаю, что бывает на хостинге,  в борьбе за ресурсы,  выставяют в конфигах время жизни сессии очень маленькое (sessionState.Timeout). Пишу приложение и проверяю: да, действительно сессия живет не более 10-ти секунд. Пишу письмо в саппорт с просьбой увеличить до 30-ти минут. Сделали.

Теперь вижу, что appDomain уже не умирает так часто, как раньше. Теперь это повторяется раз в 15-20 минут. Так как сайт еще никто не посещает и зная, что домен приложения может уничтожаться при неактивности, пишу windows-службу, которая с интервалом 5 минут делает HTTP GET запрос к сайту . Результат: AppDomain практически не пересоздается. Проблема решена.