Время идёт и мы идём вместе с ним. сегодня пообщались с комрадами из SEO-сообщества и выяснили определённые вещи. Само собой, никого там битрих не радует, но это к делу не относится. К делу относится то, что была поставлена под сомнение валидность отдачи RSS ленты. Что мы и проверили: 1) скормили десятку RSS-каталогов 2) скормили feeds2.feedburner.com/lexnekr, убрав жамкалку напротив учитывать клики по заголовкам (в противном случае создались бы редиректорные ссылки) 3) скормили feeds2.feedburner.com/lexnekr ЯППБ и гугле. Поскольку фид съедает точную копию этого блога на битрихе, по идее он должен лишь передать инфу о ней гугле\яше. Дальше всё должно стать хорошо и всё это добро проиндексится ПСами... в разделе "Блоги". Ждать результата придётся некоторое время. Если в течение 2 недель не произойдёт - будем писать в саппорт. Инструкция по созданию фида: - кормим фидбин.гугль.ком - Решения два:
1. Если вы только создаёте RSS-трансяляцию в FeedBurner, то на втором этапе не ставьте галочку “Clickthroughs“.
2. Если лента уже существует, то зайдите в раздел “Analize” - “Site Stats” и снимите галочку с “Item link clicks”.
Это всё. Теперь все ссылки на оригинал записи в ленте и в аггрегаторах будут вести прямо на ваш блог. Что от этого теряет статистика FeedBurner? Учёт кликов по заголовкам. Но его, в общем-то, никто и не смотрит.
теперь собственно дело за блог- и блоггер-сервисами. Многие из них хотят разместить счётчик или код. попробуем?.. <span id="5718c57b27b16d9cc7671b07faa42d11"></span>
Собственно вопрос в том, что обычно любая структура аля инфоблок начинает рано или поздно переносить свои элементы на другие страницы. в ЖЖ это грамотно сделано с помощью ссылки "ранее" в самом низу страницы. У битрикса пока скопилось уже 30 записей на одной странице. Я хз сколько ещё может скопиться. И доступом к ЭТОМУ сайту не отягощён... так что и интересно что есть у нас в стандартном решении НА ПРАКТИКЕ, а не в теории...
Для чего? Практика показывает, что если в интернете существует несколько блогов (например на бесплатных хостингах название аккаунта) с одинаковым названием, то при поиске по имени блога будет выдан наиболее авторитетный. Если же указать часть адреса блога, в этом поиске, то будет выдано его имя. Что следует из этого факта? Значительно более авторитетен блог-хост. Очевидно. Ведь каждый блог, зарегистрированный на нём будет ссылаться на него. Так же немаловажное значение имеет количество блогов. Посмотрите тот же Livejournal. Да там миллион записей! Да, большая часть из них сугубо боты, роботы и спамеры, но есть и весьма авторитетные товарищи. Платные аккаунты из них имеют десятые, если не сотые доли процента. Да и даже платный аккаунт совсем все ссылки не снимет. Это как проклятие так и благословение блог-хостинга. И знаете что? Битрикс с этой точки зрения так же блог-хост!.. Сам сайт битрикса!!! Подтверждение этому - поиск по имени блога Битрикс. Что в результате можно сказать уже сейчас? Сколько-нибудь плодотворной попытки вести блог на сайте Битрикса пока не было. По крайней мере блог популярно-транслируемый. Мы постараемся это исправить... Эксперимента ради...
Это один из самых важных вопросов для блоггеров. А в последнее время блог это не просто модно. Это теперь уже и прибыльно. Есть мнение, что даже волшебная кнопочка "добавить блог" в Яндексе для сайтов на Битиркс не сработает. Что нужно сделать для того, чтобы всё-таки оказаться в поиске по блогам? Как считаться блогом и для других сервисов? Это очень важно и очень интересно, ведь блоги - заработок для блоггеров. А блоггеры - почти неиссякаемый поток уникального и интересного контента для сайта. Естественно, если блоггеров найти грамотных. Данным блогом в целом и этим постом в частности мы положим начало громадному эксперименту что можно выжать из блога на битрикс. Просто блога.
Сегодня 3 апреля 2009 года я начинаю этот блог с конкретной целью. Выяснить отношения Битрикс и Поисковых систем. Основной упор будет сделан на поисковые системы Яндекс и Гугль, так же внимание будет оказано Рамблеру. Зарубежные поисковые системы могут быть упомянуты случайно или мельком, однако специально заострять внимания на них мы не будем.
Добро пожаловать к SEO-Графоману, 1С-Битрикс версия!
Примечание: Если вы устанавливаете «1С-Битрикс: Управление сайтом» на самостоятельно установленную MySQL, то необходимо помнить, что эта база данных в версии ниже 5 не поддерживает кодировку UTF-8.
Еще одно примечание по использованию SMS-модуля: В модуле есть возможность делать SMS-рассылки через битриксовый интерфейс(через тот же интерфейс, что и почтовые расссылки). Так вот, в настройках модуля "Подписка и рассылки" ("Настройки->Настройки Модулей->Подписка и Рассылки) есть поле "Кодировки сообщения в рассылку". Там должно быть значение UTF-8 для корректной отправки SMS-рассылки.
Более детальное описание появится завтра в документации по настройке модуля.
В следующей версии это скорее всего будет проверяться автоматически.
Удачного использования!
P.S. Если есть какие-то вопросы по настройке модуля, то у Вас есть возможность посетить вебинар, посвященный именно этой теме или можно задавать вопросы прямо здесь или в личку.
Столкнулся с проблемой корявого отображения в IE на главной странице сайта. Когда стал разбираться выяснилось что проблема возникает при превышение определенного порога подключаемых стилей.
А так как, на главной выводится большое количество компонентов то и количество подключаемых стилей превышает этот параметр. Причем, не просто не подключаются последние, а они как бы собой выдавливают предыдущие
В остальных браузерах все в норме.
Вот такие странности!
Придется видимо для главной делать отдельный шаблон и в нем прописывать все стили для компонентов
Сегодня, проанализировав статистику скачиваний SMS-модуля, были приятно удивлены. Постараемся тоже кое-чем вас порадовать.
Нередко новые технологии вызывают у разработчиков (а особенно их руководства) ощущение, что на их освоение уйдёт немало времени, а эффект от их применения проявится очень нескоро. В этой статье я постараюсь продемонстрировать простоту внедрения возможностей SMS-модуля в код web-приложения. На ПРИМЕРЕ. Почему же у меня заела кнопка shift на слове ПРИМЕРЫ? Да потому что в базовую поставку модуля входит лишь то, что придумали сами разработчики (причём за малый промежуток времени, который дали им менеджеры).
Кстати, я даже сам не подозревал, насколько SMS-ки могут облегчать жизнь в некоторых ситуациях. Не буду рассказывать о каких-нибудь уведомлениях о новых заказах в магазине: это не так интересно – и уже реализовано в модуле.
Давайте разберем такую ситуацию. Вы программист, работаете в небольшом web-отделе, состоящем из 30 человек. У вас есть злобный начальник отдела, но, тем не менее, уважающий всякую оптимизацию. И тут вы вспоминаете, что в пятницу, задержавшись на работе и отвечая на последнее письмо, допивая при этом третью бутылочку пива, скачали SMS-модуль с сайта www.sms4b.ru. И как же, думаете Вы, угодить начальнику в период кризиса-то. И думаете, что а вот замечательно было бы создать простую систему SMS-оповещения (как в докторе Хаусе, только там были пейджеры) сотрудников отдела, всего лишь одним движением руки.
Ну что ж, цель мы себе поставили, а в реализации я вам помогу =).
Итак, создаем новую страничку, и подключаем header нашего сайта.
Далее нам нужно подключить SMS-модуль для того, чтобы мы могли пользоваться его функционалом. Делается это так.
if (!CModule::IncludeModule("sms4b"))
{
ShowError("Неустановлен модуль SMS4B");
return;
}
Все, теперь у нас в системе есть объект под названием $SMS4B. Ну, при желании, конечно, можно создать и свой – с отдельным именем. Через этот объект Вам будут доступны все методы классов модуля. Их описание можно найти в документации для разработчиков.
Теперь нам понадобится что-то наподобие такой формочки
<form action="#" method="post">
Сотрудники отдела
<select name="webDepartmentNumbers[]" multiple>
<option value="79037976101">Кирюхова Татьяна Николаевна (79037976101)</option>
<option value="79037335489">Иванов Николай Иванович (79037335489)</option>
<option value="79037465489">Петров Александр Константинович (79037465489)</option>
<option value="79044568955">Сидоров Виталий Александрович (79037575489)</option>
<option value="79037115489">Плющенко Клим Андреевич (79037115489)</option>
</select>
Текст сообщения
<textarea name = "messageText"></textarea>
Транслитерировать сообщение
<input type="checkbox" name="translitMess" value="Y" checked />
<input type="submit" name = "formSend" value="Отослать" />
</form>
Выглядеть будет примерно так
Как мы видим здесь у нас есть список номеров, поле для ввода текста сообщения и галочка автоматической транслитерации текста сообщения. Список номеров я сформировал вручную, но Вы можете сделать формирование списка из инфоблока или еще как-нибудь. Для обработки номеров для отправки также будет полезно посмотреть функцию parse_numbers(). Текст сообщения будет автоматически кодироваться в нужную кодировку для SMS-сервера. И еще одна функция будет для транслитерации сообщения. Весь обработчик формы будет на несколько строчек...
if (isset($_REQUEST["formSend"]))
{
$messageText = htmlspecialchars($_REQUEST["messageText"]);
#транслитерируем текст сообщения
if ($_REQUEST["translitMess"] == "Y")
{
$messageText = $SMS4B->Translit(htmlspecialchars($_REQUEST["messageText"]));
}
$errorNumbers = array();
#рассылаем по всем выбраным номерам
foreach($_REQUEST["webDepartmentNumbers"] as $arIndex)
{
if (!$SMS4B->SendSMS($messageText, $arIndex))
{
$errorNumbers[] = $arIndex;
}
}
}
Итак, здесь все должно быть понятно. Вызов $messageText = $SMS4B->Translit($_REQUEST["messageText"]); транслитерирует сообщение, которое мы отсылаем через форму. Вызов $SMS4B->SendSMS($messageText, $arIndex) отсылает SMS с текстом $messageText на номер $arIndex. Все! Можно еще написать обработчик ошибок, т.е. все вместе будет выглядеть вот так вот.
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("SMS-модуль и его возможности");
if (!CModule::IncludeModule("sms4b"))
{
ShowError("Неустановлен модуль SMS4B");
return;
}
?>
<form action="#" method="post">
<b>Сотрудники отдела</b>
<p>
<select name="webDepartmentNumbers[]" multiple>
<option value="79037976101">Кирюхова Татьяна Николаевна (79037976101)</option>
<option value="79037335489">Иванов Николай Иванович (79037335489)</option>
<option value="79037465489">Петров Александр Константинович (79037465489)</option>
<option value="79044568955">Сидоров Виталий Александрович (79037575489)</option>
<option value="79037115489">Плющенко Клим Андреевич (79037115489)</option>
</select>
</p>
<b>Текст сообщения</b>
<p>
<textarea name = "messageText"></textarea>
</p>
<b>Транслитерировать сообщение</b> <input type="checkbox" name="translitMess" value="Y" checked />
<p>
<input type="submit" name = "formSend" value="Отослать" />
</p>
</form>
<?
if (isset($_REQUEST["formSend"]))
{
$messageText = htmlspecialchars($_REQUEST["messageText"]);
#транслитерируем текст сообщения
if ($_REQUEST["translitMess"] == "Y")
{
$messageText = $SMS4B->Translit(htmlspecialchars($_REQUEST["messageText"]));
}
$errorNumbers = array();
#рассылаем по всем выбраным номерам
foreach($_REQUEST["webDepartmentNumbers"] as $arIndex)
{
if (!$SMS4B->SendSMS($messageText, $arIndex))
{
$errorNumbers[] = $arIndex;
}
}
}
if (count($errorNumbers) > 0 )
{
ShowError("Не отправлено на номера:");
foreach($errorNumbers as $arIndex)
{
ShowError($arIndex);
}
}
?>
Чувствую, если Ваш начальник прочтет эту статью, вы уже не отделаетесь от реализации чего-то подобного =).
Вы скажете что слишком дорого рассылать SMS-ки. А теперь давайте посчитаем. Пусть ЗП среднего начальника отдела 2000$. Т.е. в день зарабатывает около 90$, в час, соответственно, 11$. Сколько нужно времени чтобы обзвонить 30 человек? Ммм, да не меньше часа. Т.е. это 11$! А 30 SMS будет стоить Вам в самом худшем случае 42 рубля и 30 секунд для отправки. По-моему, совсем неплохо.
Итак, это был первый пример (how-to) по применению SMS-модуля. Думаю, в дальнейшем мы обсудим многие другие применения.
P.S. Данная статья подразумевает, что модуль на вашем сайте уже настроен в соответствии с описанием в документации. Дополнительно планируем провести небольшой вебинар по установке и настройке модуля.
Коллеги, я подключил на нашем проекте модуль Проактивной защиты.
Сейчас модуль доступен в режиме бета-тестирования и еще не включает некоторые функции. Но тем не менее, большая часть возможностей уже реализована.
Модуль «Проактивной защиты» - целый ряд технических решений по обеспечению безопасности продукта и разработанных веб-приложений, включающий несколько уровней защиты от большинства известных атак на веб-приложения и существенно повышающий уровень безопасности интернет-проектов.
«Проактивная защита» является существенным дополнением к стандартной политике безопасности продукта.
Модуль включает в себя комплекс систем по защите веб-приложений:
* Панель безопасности с уровнями защищенности * Проактивный фильтр (Web Application FireWall) * Технологию одноразовых паролей (OTP) * Защиту авторизованных сессий * Контроль активности * Журнал вторжений * Защиту административных разделов по IP * Стоп-листы * Контроль целостности * Рекомендации по настройке и ряд других решений
Я включил Проактивный фильр и пока не настраивал исключения для форумов, так что смотрите, код может повреждаться. Будет неудобно, настроим исключения для форумов.
Я так же включил защиту авторизованных сессий и они теперь хранятся в базе данных и меняются каждые 60 секунд. Если заметите что-то ненормальное в работе сайте - жалуйтесь пожалуйста
«Коллинеарный математический анализ: политическое учение Локка или политическое манипулирование?» Гуманизм представляет собой инвестиционный продукт, явно демонстрируя всю чушь вышесказанного. Пустое подмножество позиционирует гармонический интервал, впрочем, это несколько расходится с концепцией Истона. Селекция бренда последовательно имитирует мелодический нонаккорд, таким образом сбылась мечта идиота - утверждение полностью доказано. Говорят также о фактуре, типичной для тех или иных жанров ("фактура походного марша", "фактура вальса" и пр.), и здесь мы видим, что алеаторика образует бренд, указывает в своем исследовании К.Поппер. Умножение двух векторов (скалярное) нейтрализует потребительский рынок, при этом, вместо 13 можно взять любую другую константу.
Последствия медленной отправки почты на производительность Битрикс, влияние использования постоянных соединений с БД (MySQL Innodb) на блокировки
Партнёры "Битрикс" готовят к запуску сайт с высокой ожидаемой посещаемостью и большой активностью по добавлению и модификации контента (инфоблоки). Конфигурация: два выделенных сервера (для Веб и БД), в качестве БД использовалась MySQL с обязательным хранением таблиц в Innodb, учитывая планируемую нагрузку.
Предварительная конфигурация сайта, Apache и MySQL проводилась в соответствии с рекомендациями курса «Конфигурирование веб-систем для оптимальной работы» и активно используя "Монитор производительности" для диагностики "тяжёлых" страниц и запросов, мониторинга и настройки параметров БД (query_cache_size, tmp_table_size, max_heap_table_size, max_tmp_tables, table_cache и т.д.). Однако, когда уже казалось, что сайт показывает хорошие результаты по производительности, проявились 2 неприятные проблемы:
периодически без системы возникающие ошибки вида MySQL Query Error: UPDATE b_stat_day SET ... [Lock wait timeout exceeded; try restarting transaction], и в этом случае все серверные процессы Apache оказывались блокированными, сайт блокирован до перезапуска MySQL.
непредсказуемое бессистемное замедление формирования отдельных страниц, которое проявлялось либо в большом времени формирования страниц - 30-60 секунд, либо даже ошибке 504 nginx timeout!
Начали разбираться с MySQL, мониторинг состояния производился командами:
mysql> show full processlist; mysql> drop table if exists innodb_lock_monitor; mysql> CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB; mysql> SHOW ENGINE INNODB STATUS\G; mysql> DROP TABLE innodb_lock_monitor;
Выяснилось, что перед ошибкой, которую выводил PHP, в БД происходил deadlock на одних и тех же SQL-запросах типа
INSERT INTO b_iblock_section_element...
Попытались решить проблему на уровне приложения - уменьшая количество одновременных вставок элементов инфоблоков - безрезультатно. DEADLOCK этот довольно интересного типа insert intention waiting, описание которого можно посмотреть в багах MySQL. Возникает при множественных одновременных вставках в таблицу (как раз наш случай - активная работа с инфоблоками) и, по мнению специалистов MySQL, [как бы] багом вовсе не является, а есть правильное поведение MySQL+Innodb в определённых условиях. Ну да шут с ним Интереснее показалось нам другое: судя по диагностике блокировок Innodb (которая выводится в секции TRANSACTION команды SHOW ENGINE INNODB STATUS), всякий раз при возникновении проблем, блокирующей оказывалась транзакция с тем же OS thread id, что и транзакция, которую ранее MySQL выбирал в качестве "жертвы" при разборе DEADLOCK'а и должен был откатить. В подтверждение этого предположения, проблема с возникшими блокировками решалась силовым удалением "виновного" thread'а:
MYSQL> kill thread_id
Бесплатная служба поддержки MySQL пока не сильно помогла нам в анализе причин происходящего
По совету Максима Смирнова, обратили внимание на используемое постоянное соединение с БД, которое могло быть причиной подобного поведения - см., например, обсуждение в блоге Peter Zaitsev Are PHP persistent connections evil ?. Для исключения каких бы то ни было проблем и учитывая, что в случае с MySQL новые соединения создаются быстро и незначительно влияют на общую производительность сайта, мы отключили постоянное соединение с БД:
define("DBPersistent", false); в файле dbconn.php
Блокировки больше не проявлялись.
В это же время Денис Шаромов с Максимом Смирновым обнаружили похожую периодически возникающую проблему (nginx timeout) на другом сайте, связанную с медленной работой процедуры отправки почты.
Проверили на нашем проекте - 60 секунд на отправку сообщения! Это и была причина появления обеих проблем: и Nginx timeout, и MySQL Lock! В первом случае связь очевидна, во втором - задержка отправки почтового уведомления на хите задерживала завершение транзакции по добавлению/модификации элемента инфоблока, дальше - заложенный в MySQL-Innodb DEADLOCK и, видимо, проблема с открытыми транзакциями и постоянными соединениями. Возникала проблема неожиданно, при обработке события отправки почты на хите. Администраторы разобрались с почтой, обработка почтовых событий была перенесена на cron:
1) define("BX_CRONTAB_SUPPORT", true); в dbconn.php 2) добавить в crontab вызов php -f /..../bitrix/modules/main/tools/cron_events.php
Последнюю рекомендацию, с моей точки зрения, нужно применять на всех сайтах во избежание зависимости доступности сайта от работы службы почты. Либо постоянно мониторить скорость работы почты.
Хочу рассказать, что в данный момент наш PHP продукт проходит тесты Certified for Windows Server 2008. Мы прошли все локальные тесты успешно.
Как оказалось, в режиме FastCgi, php, который non thread safe (есть такой для windows на странице скачивания), без EAccelerator-а, показал лучшие результаты по сравнению с обычным php, но c EAccelerator-ом.
Редакция "Эксперт" на нашей тестовой машине выдает 30 страниц в секунду и без единого отказа в течение 48 часов под stress тестом.
Сам Майкрософт крайне заинтересован в достижении лучших результатов, более того, мы, видимо, будем первым PHP продуктом достигшим такого высокого звания.
В настоящее время мы ищем партнеров для долгосрочного сотрудничества. Мы предлагаем серьезный бюджет, работу в одном из крупнейших международных проектов.
Для поиска подходящих специалистов мы использовали форму отправки заявки на создание сайта прямо на сайте Битрикс.
В заявке поставили ограничение, что партнер обязательно должен иметь опыт создания сайта с посещаемостью от 10000 хостов на Битрикс:
Здравствуйте.
Просьба прислать перечень сайтов, которые вы делали на Битрикс и которые имеют посещаемость >10000 (десяти тысяч) хостов в сутки.
Если вы не выполняли подобные работы, мы не сможем сотрудничать.
Несмотря на это, половина заявок пришла от партнеров, которые делают сайты-визитки. Причем менеджеры этих компаний зачастую вообще не понимают о чем речь: Вот, например, одно из писем:
Добрый день,
Данные которые вы просите (пропускную способность канала), зависит только от провайдера у которого вы будете хоститься. У нас есть решения на битриксе для РЖД, который позволяет обрабатывать более 50000 запросов в сутки (закрытый сайт). Так же у нас есть решения, которые используются у инет провайдеров. Там идет сотни тысяч запросов в сутки. Так а если у вас нет рекламы, к вам и не будут заходить 10000 пользователей.
Что конкретно вы имеете в виду? С уважением, XXXXXX
Очевидно, что человек вообще не в теме...
Удручает, что таких ответов великое множество. Но есть же профессионалы, например, кто-то же делал сайты banki.ru, eldorado.ru и другие высоконагруженные проекты?
18 марта 2009г. в 10.00 (по Московскому времени) состоится бесплатный интернет семинар – Вебинар – «SMS-сервис для web-проектов на платформе «1С-Битрикс: Управление сайтом».
Семинар будет проводиться компанией «1С-Рарус» для партнеров компании «1С-Битрикс». Для тех, кто не является партнером компании, после окончания семинара будут доступны видеоматериалы выступлений участников.
Докладчики:
Смирнов Роман - руководитель проекта sms4b.ru, компания «1С-Рарус».
Также на технические вопросы ответит один из разработчиков модуля – Хамакин Александр.
Длительность вебинара - 1 час. Вебинар проводится с помощью сервиса GoToMeeting.
На вебинаре будут освещены следующие вопросы:
описание возможностей SMS-сервиса;
как подключить и настроить SMS-сервис;
предложения сотрудничества для партнеров «1С-Битрикс»;
При регистрации вводите адрес действительного почтового ящика, т.к. именно на указанный Вами адрес прийдет письмо с дальнейшими инструкциями и паролем к семинару.
При возникновении сложностей при регистрации на вебинар, консультации можно получить у Артема Жанабаева, моб. 8-905-231-89-31, mailto:JanA@rarus.ru
Дополнительная информация:
Вебинар - это он-лайн семинар проводимый посредством современных технологий с использованием интернета. Во время проведения мероприятия каждый из участников (участниц) находится у своего компьютера, а связь между ними поддерживается через Интернет посредством загружаемого приложения, установленного на компьютере каждого участника.
Сегодня, 15.03.2009 решил создать свой блог на ресурсе. Что из всего этого получится - посмотрим. Время и только время все раставит по местам, все оценит. Причина, по какой решил создать здесь свой блог - проста. Ресурс http://sjleo.blogspot.com/, а это мой не очень старый блог, посвященный работе в интернет, попал в списки фишенговых ресурсов, но не мой именно блог, а *.blogspot.com/* - попали в базу антивирусной лаборатории Касперского, которая считает, что все ресурсы - опасны. И вот, что бы не рисковать, решаю не использовать тот блог до устранения причин и заняться этим блогом...
Редактору сайта (будем называть его менеджером, чтобы не путать понятия) очень важно уметь работать с визуальным редактором, так как менеджер как правило не знает HTML\CSS\JS\PHP. И мы прописываем визуальный редактор в качестве болеутоляющего клиенту, нажившему мигрень в попытке создать подобающе оформленную страницу с текстом, картинками, таблицами, списками и т.п., не всегда предупреждая о побочных эффектах.
А именно о том, что:
1) предопределённые стили оформления элементов содержания сайта, нельзя применить к определённой ячейке или строке (только ко всей таблице целиком)
2) не может быть и речи об изменении ширины столбца или высоты строки таблицы без указания точных размеров, если клиент не выучил, что дизайн-шаблон фиксированный, максимальная ширина для контента столько-то пикселей (иначе в ie6..., ну вы поняли), что ширина пикселя это 1/72 дюйма, а дюйм 2,54 сантиметра (тогда как все давно уже пользуются http://www.ita.es/jquery/jquery.kiketable.colsizable.htm#section-4 - последняя таблица).
3) фоновые изображения в предопределённых стилях оформления элементов содержания сайта не отображаются в визуальном редакторе
4) сами "предопределённые стили оформления" оставляют желать лучшего: <span class="мой_стиль"> это конечно хорошо, но изменить стиль ненумерованного списка вам не удастся, кроме как превратить его в опухоль вида:
<ul>
<li><span class="мой_стиль"> text </span></li>
...
</ul>
А это значит никаких собственных list-style-image, либо только один вид, без надежды на 2 и более разных оформления. Оправдываться приходится фразой, что "практически нереально определять css-селекторы в styles.css шаблона сайта вида tag.class {} и довольствоваться приходится селекторами .class {} подразумевая span.class {}".
5) в визуальном редакторе клиент не сможет сделать ячейку таблицы заголовком (то что называется
)
6) а если клиент посчитает себя очень умным и захочет что-то поменять в режиме исходного кода, код предстанет ему в таком неразборчивом виде, что его эго моментально вернётся на место:
Я так проверяю психику кандидата на вакансию: заставляю написать 20-30 строчек html-кода, затем копирую код в визуальный редактор (в режиме исходного кода) и делаю "Трах-тибидох", переключаясь в режим визуального редактирования и обратно в исходный код. В полученном коде прошу найти, какой тег я удалил:
Фокус в том что никакой тег я не удалял и вообще ничего не делал, за меня все сделал редактор.
Вернёмся к побочным эффектам:
6) даже если клиент и знает что <thead>, <tbody> и <tfoot> - это какие-то теги и что они должны что-то значить, никто не скажет зачем по умолчанию в новую таблицу ставится тег <tbody> и как (раз уж тело вставляется) вставить голову и ноги - медицина бессильна.
7) отдельного внимания заслуживает "
" - да, есть окошко где эти параметры меняются. А еще у таблицы есть align, background, bgcolor, bordercolor, cols, height и width - может стоит и их указывать ВСЕГДА? Я наверно под страхом смерти не смогу объяснить на понятном менеджеру языке чем отличается cellspacing от cellpadding в окне свойств таблицы и почему они там есть, а вот bgcolor и bordercolor нет.
В том же окне есть выбор стиля таблицы - отлично! Только давайте фильтровать стили, которые предлагаются в списке (например только селекторы table.class {} ), хотя нет, я забыл - практически нереально определять css-селекторы в styles.css шаблона сайта вида tag.class {} ....
Это все, что мне удалось вспомнить, выйдя из комы, в которую впал после публикации нескольких, на первый взгляд, простых, страниц текста. Я как мог удерживал себя от попыток открыть notepad++ и с удовлетворением окончательно нажать Save уже через 20 минут. Там я бы сделал <div class="blockLeftPadding">, <ul class="inlineItems"> или даже <hr class="lightShadow" />, но для клиента такое искусство осталось бы недоступно, как хрустальная ваза, на которую он может только смотреть, не в силах повторить на других страницах.
PS. мне очень импонирует идеология БУС, именно поэтому я и написал.