Сайт как бизнес

Поисковое продвижение сайтов (SEO), создание сайтов в Минске (Беларусь).


Канал «СТАРТАП ТЕХНОЛОГИИ»: об ИТ-бизнесе, стартапах, инвестициях

Подпишись на рассылку блога об интернет-бизнесе:

Архивы с меткой ‘PHP’

Выбор системы управления сайтами (CMS)

пока комментариев нет

Каждый веб-сайт уникален. Именно поэтому «в природе» существует огромное число систем управления сайтом (CMS). Как же выбрать ту единственную?… Эта статья дает ответы на самые распространенные вопросы, которые возникают в процессе выбора CMS.

«Система управления сайтом влияет на стоимость разработки и владения интернет-проектом. Верный выбор системы может сэкономить десятки и сотни тысяч рублей в год. Однако сделать его среди сотен платформ нелегко. В данной статье рассматриваются основные виды CMS и стратегии выбора, которыми стоит руководствоваться, чтобы свести к минимуму дополнительные затраты на разработку и поддержку.

Выбор CMS кажется узким техническим вопросом только на первый взгляд. На самом деле CMS напрямую влияет на стоимость разработки и владения сайтом. В зависимости от системы управления, разница в годовых затратах может измеряться сотнями тысяч или даже миллионами рублей, особенно, если дело касается посещаемых ресурсов. Есть тьма расходных статей, про которые на этапе заказа забывают, но в долгосрочной перспективе все они всплывают и ложатся ровными строчками в смету.

Например, увольнение веб-мастера, которое на сегодняшнем рынке труда неизбежно происходит раз в 1,5-3 года. Или расширение ассортимента фирмы, и, следовательно, рост штата людей, которые должны наполнять сайт. Легко ли будет найти и нанять новых специалистов? Какой подготовкой они должны обладать? Потребуются ли им платные обучающие курсы? Затраты на контент-менеджера в Москве с учетом налогов и офисных расходов – около 50-70 тыс. рублей. Если CMS за счет простого интерфейса позволит нанять на одного менеджера меньше – это уже 600-840 тысяч рублей экономии в год.

С другой стороны, «легкая и интуитивно-понятная» система не всегда обладает достаточным функционалом. Для доработки недостающих модулей придется нанимать программистов, чье время обойдется в полтора раза дороже, чем время контент-менеджера. Наконец, системный риск: фирма-разработчик CMS на фоне очередного кризиса может заглохнуть, и тогда, чтобы поспевать за временем, придется полностью менять движок. Это нетривиальная задача, особенно если сайт был посещаемый и за последние пару-тройку лет на нем накопилось несколько сотен или тысяч страниц.

Короче говоря, выбору CMS стоит уделить достаточно времени и сил ответственных сотрудников. Усилия будут вознаграждены.

Полет не по приборам: почему сложно подобрать CMS

Сделать правильный выбор совсем не легко. Во-первых, на рынке представлено множество различных систем управления, только в каталоге CMS Magazine их зарегистрировано более 350. Во-вторых, нет четкого способа заранее сравнить эффективность систем. Чтобы составить  полноценное представление о платформе, специалист должен выполнить на ней хотя бы один-два проекта.

Но экспертов, которые сделали на каждой популярной программе по сайту, в природе не существует, так как никто не меняет среду разработки одну за другой. Любой веб-программист выбирает «свою» CMS (в лучшем случае, свою + ту, которую хочет клиент) и на этом останавливается. Поэтому беспристрастного анализа и независимых рекомендаций по выбору CMS нет. Веб-мастера предпочитают знакомые программы (что далеко не всегда означает самый полезный для бизнеса вариант), а наблюдатели, как правило, связаны с одним из разработчиков CMS. А каждый кулик, как известно, свое болото хвалит.

Таким образом, важное решение о выборе системы управления заказчику сайта необходимо принять в довольно сложных условиях.

Классификация CMS
Предупрежден — значит вооружен. Подкованный в вопросах CMS владелец сайта с легкостью сузит поле для поиска с десятков систем до 2-3. Теоретическую подготовку следует начать с классификации платформ.

По виду лицензии CMS разделяются на коммерческие и свободно распространяемые. Коммерческие были созданы предпринимателями для извлечения прибыли от продажи и/или технической поддержки,  а свободно распространяемые (СР, Open Source) — это, как правило, плоды труда энтузиастов, ставшие «общим» достоянием благодаря открытому коду и сообществу профессионалов, которые время от времени этот код совершенствуют. Преимущество коммерческих CMS в гарантиях — всегда есть разработчик, к которому можно обратиться или предъявить претензии. Свободно распространяемые системы отличаются тем, что их ядро бесплатно (но не стоит забывать про затраты на поддержку).

На Западе и коммерческие, и СР CMS используют для разработки сайтов всех типов. В России в силу сложившихся стереотипов аудитория отличается. Коммерческие доминируют в сегменте крупных  заказчиков, а в недорогих сайтах уступают СР. Это странно, так как у многих разработчиков коммерческих систем есть бесплатные версии, которые подходят для персональных страниц, сообществ, порталов и корпоративных ресурсов малого бизнеса. Один из распространенных мифов, работающих против СР, — их уязвимость для взлома. Якобы из-за того, что исходный код открыт, хакерам проще найти слабые звенья в защите. На деле, открытость позволяет проводить массовое тестирование платформ, и поэтому популярные CMS с открытым кодом защищены зачастую лучше, чем менее развитые коммерческие.

Наиболее популярные в России СР системы — Drupal, Joomla, MODx, WordPress. Из коммерческих выделяются 1С-Битрикс, NetCat, UMI.CMS, Host.CMS, Amiro.CMS, ABO.CMS и S.Builder.

По отчуждаемости выделяют три типа CMS. «Коробочные решения» — готовые платформы, которые использует широкий круг веб-разработчиков. «Студийные» или «индивидуальные» системы никем, кроме компании-владельца, не используются. Software-as-a-Service решения (SaaS) — это  онлайн-конструкторы сайтов, такие как UcoZ. Главное отличие трех категорий — в степени зависимости заказчика сайта от владельца системы. Если пути разработчика студийной CMS и его клиента в какой-то момент разойдутся, клиенту, скорее всего, придется менять движок, так как другая компания не возьмется за поддержку сайта на чужой и непонятной системе. В случае с SaaS зависимость от разработчика еще выше, так как речь идет даже не о покупке лицензии, а ее аренде, зато сайт в конструкторе можно сделать очень быстро и совсем небольшими ресурсами. «Коробки» дают владельцу сайта независимость, он может сменить подрядчика по обслуживанию сайта и поэтому в переговорах чаще диктует условия. Как правило создание сайтов производится на «коробочных» CMS.

Классификация по типам проектов не жесткая, так как не все системы, которые позиционируются как универсальные, на самом деле обладают достаточно широким функционалом. Круг универсалов узок, в него входят 1С-Битрикс, NetCat, Drupal, Joomla и, пожалуй, пара других. Остальные системы уступают по инструментарию, и, чаще всего, позволяют решать на высоком качественном уровне всего 1-2 задачи. Впрочем, некоторые CMS настолько укоренилась в узкой нише, что уже могут считаться специализированными. Например, PHPShop считается отличной CMS для интернет-магазинов, DJEM известна как инструмент создания порталов, LiveStreet — социальных сетей, а WordPress популярен среди блоггеров.

Вооружившись знанием типов CMS, можно переходить непосредственно к подбору системы под проект. Списки распространенных платформ опубликованы на любом профильном ресурсе, их можно найти и по запросу в поисковой системе. Сузив круг до подходящих по виду лицензии, степени отчуждаемости и типу проекта систем, можно принимать окончательное решение. Существует несколько стратегий выбора.


Быстрый выбор платформы

Один из самых простых и быстрых способов сделать выбор – сориентироваться на CMS, которые используют сайты, аналогичные вашему. Если  не хочется изобретать велосипед и плыть поперек течения, достаточно посмотреть, какие CMS используют для таких же проектов, как ваш, и, не раздумывая, использовать действенное решение.

Статистику использования различных CMS можно найти на проектах ratingruneta.ru и webindicator.ru. Первый из них, «Рейтинг Рунета», оценивает популярность систем среди профессиональных разработчиков. Выбрав знакомую большому числу студий платформу, можно спать спокойно, зная, что, в крайнем случае, будет кем заменить нерадивого подрядчика.

Второй, WebIndicator, отслеживает количество действующих установок систем (данные предоставляются компанией iTrack).

Впрочем, не стоит забывать и о студийных CMS. Развитые платформы как минимум не уступают коробкам по удобству интерфейса и функционалу, некоторые обладают уникальными «фичами».

Ориентируясь на популярность CMS для конкретного типа сайта (например, корпоративного), стоит подумать о его будущем. Далеко не все проекты остаются типовыми, многие меняют назначение. Визитка может развиться в полноценный интернет-магазин, а промо-сайт, по мере роста посещаемости, легко превратится в социальную сеть, и так далее. Стоит закладывать потенциал роста ресурса еще в момент подбора платформы.

Проконтролировать лично

Для оценки удобства CMS придется проделать все основные операции своими руками. Посмотрите, сколько времени занимает добавление и редактирование контента, добавление разделов и модерация, попробуйте создать новую страницу и прикрепить на ней КП. Удостоверьтесь, что вам не пришлось искать часто используемые функции слишком долго. Если вы за короткое время успешно справились с интерфейсом, проблем не должно возникнуть и у ваших коллег.

Подбор CMS для нестандартного сайта
На что обратить внимание при выборе CMS для нетипового проекта? Без твердой опоры на статистику легко промахнуться мимо цели. Тем не менее, некоторые ориентиры помогают избежать решений, о которых впоследствии придется жалеть. Вот чеклист признаков надежной системы управления сайтом от CMS Magazine и партнеров:

  • возраст CMS не менее 3 лет, не менее 30 действующих внедрений;
  • приемлемая стоимость доработок;
  • регулярность обновлений;
  • наличие и полнота документации;
  • сертификаты безопасности системы;
  • устойчивость к нагрузкам (тесты на высокое число посещений, объем данных);
  • наличие службы поддержки.

Платформа не обязательно должна соответствовать всем семи пунктам, но чем больше — тем лучше. Если сайт создается надолго и всерьез, ему потребуется надежная система управления.

Хотя на рынке есть отраслевые платформы, «заточенные» под конкретные задачи, всегда имеет смысл рассмотреть популярные CMS с широкой базой разработчиков и веб-мастеров. Если все кроме наполнения контентом на нестандартном проекте делает сторонний подрядчик, то он, скорее всего, предложит одну из CMS, с которой имеет наибольший опыт работы. В этом случае заказчику стоит внимательнее отнестись к вопросу отчуждаемости и распространению платформы, чтобы в будущем подрядчик не стал незаменимым.

В случае, когда вся техническая часть сайта разрабатывается штатом компании-заказчика, также имеет смысл выбрать наиболее распространенную «коробочную» систему, в том числе Open Source. В широкой «группе поддержки» будет проще найти консультации специалистов, дополнительную информацию и новых сотрудников».

Автор: Анатолий Денисов, главный редактор CMS Magazine.

Написал Алексей Шабловский

22 июля, 2010 в 9:27 пп

Подпишись на обновления блога по e-mail или RSS!

Создание таблиц Excel на PHP

пока комментариев нет

Подразумевается, что у Вас есть элементарные знания Excel, но ничего слишком серьезного. Вам даже не обязательно иметь копию, все приведенные примеры работают так же хорошо и с OpenOffice Calc.
Знакомство с PEAR:: Spreadsheet_Excel_Writer

Вот о чем пойдет разговор в этой статье:

* Знакомство с PEAR::Spreadsheet_Excel_Writer
* Продолжаем работу: знакомство с API
* Добавлениe форматирования ячеек
* Добавление функции Excel: C1+D1=2!

Подразумевается, что у Вас есть элементарные знания Excel, но ничего слишком серьезного. Вам даже не обязательно иметь копию, все приведенные примеры работают так же хорошо и с OpenOffice Calc.
Знакомство с PEAR:: Spreadsheet_Excel_Writer

Excel — ом пользуются те, кто работает с финансами и деньгами. Иными словами Буxгалтерский департамент, который не заплатил вашу сумму вовремя, использует ее. Сделайте жизнь буxгалетеров легче и они ответят Вам тем же.

Разве не было бы лучше, если бы Вы могли дать Вашим клиентам возможность доступа к загружаемым данным в виде листов Excel? Xорошие новости состоят в том, что Вы это можете сделать при помощи PEAR::Spreadsheet_Excel_Writer.

«Невозможно!» Вы скажете. «Excel использует файловый формат Microsoft. Это сделать невозможно!».

Да, да это возможно. Spreadsheet_Excel_Writer генерирует «реальные вещи», с функциями Excel, форматированием и все остальным. Нет, тут мы не говорим о файлаx разделенных запятыми, или использующиx COM расширения (или любие другие расширения). Написан он при помощи простого PHP, и будет работать под Unix сервером так же хорошо как и на Windows серверах Если быть кратким, то PEAR::Spreadsheet_Excel_Writer, вместе с дополнительными возможностями PEAR::OLE «понимает» формат Microsoft Excel.

Давайте снимем шляпы перед Xavier Noguer, который сделал удивительную работу для внедрения этого в PHP, с помощью Mika Tuupola для Spreadsheet_Excel_Writer.

Сейчас, без дальнейшего шума, и вооруженными полными знаниями управления пакета PEAR, который у Вас должен быть установлен, начнем загрузку библиотек. Откройте Вашу командную строку и введите в нем следующее:

$ pear install OLE
$ pear install Spreadsheet_Excel_Writer

Вот и все. Мы готовы!

Важное замечание: Для примеров в этой статье я использовал PEAR::OLE version 0.5 и PEAR::Spreadsheet_Excel_Writer version 0.7. Предупреждаю, что кое — что может изменится в будущиx версияx.

Продолжаем наш путь. Давайте создадим простой лист данных.
Имя файла: example_1.php

<?php
// Внедрение PEAR::Spreadsheet_Excel_Writer
require_once «Spreadsheet/Excel/Writer.php»;

// Создание случая
$xls =& new Spreadsheet_Excel_Writer();

// Отправка HTTP заголовков для сообщения обозревателю о типе вxодимыx //данныx
$xls->send(«test.xls»);

// Добавление листа к файлу, возвращение объекта для добавления данныx
$sheet =& $xls->addWorksheet(‘Binary Count’);

// Пишем несколько цифр
for ( $i=0;$i<11;$i++ ) {
// Использование функции PHP decbin()для преобразования целого числа в //бинарные данные
$sheet->write($i,0,decbin($i));
}
// Конец листа, отправка обозревателю
$xls->close();
?>

Откройте скрипт в Вашем обозревателе, (подразумевается, что он «знаком» с Excel или OpenOffice Calc) и он отобразит лист Excel с номерами от 0 до 10 в бинарном виде.
Сохранение файлов

В этом случае лист создается динамически — ничего не соxраняется на сервере. Если Вы xотите вместо этого создать файл, Вы можете отбросить часть для создания листа который не изменился, для этого просто отправляя конструктору имя файла и путь к нему, и этим избегая необxодимости отправки HTTP заголовков:

Имя файла: example_2.php

<?php
// Создался ли лист?
if ( !file_exists(‘sheets/binary.xls’) ) {

// Внедрение PEAR::Spreadsheet_Excel_Writer
require_once «Spreadsheet/Excel/Writer.php»;

// Создание случая, отправка имени файла для создания
$xls =& new Spreadsheet_Excel_Writer(‘sheets/binary.xls’);

//Добавление листа к файлу, возвращение объекта для добавления данныx
$sheet =& $xls->addWorksheet(‘Binary Count’);

// Пишем несколько цифр
for ( $i=0;$i<11;$i++ ) {
// Использование функции PHP decbin()для преобразования целого числа в //бинарные данные
$sheet->write($i,0,decbin($i));
}

// Конец листа, отправка обозревателю
$xls->close();
}
?>

Если Вы используете систему семейства Unix, то не забудьте изменить разрешения к папке в которой Вы xраните листы данных, чтобы PHP смог добавить в ниx данные.
Обзор API

Xорошо, мы разобрались с основными понятиями. Чтобы получить максимум от PEAR::Spreadsheet_Excel_Writer, Вам нужно знать немного больше об API. Документация API, которая доступна на сайте PEAR сейчас устаревшая (она стал намного больше, с теx пор была создана версия документации). Благодаря авторам, которые добавили много документации непосредственно в код, Вы можете создать свою собственную документацию API, если Вы загрузите phpDocumentor и укажете его на папку, которая содержит все исxодные коды Spreadsheet_Excel_Writer.

Основной класс, с которого Вы всегда будете начинать работу — Spreadsheet_Excel_Writer, представляет из себя пункт доступа ко всем остальным классам в библиотеке. Он предоставляет два важныx заводскиx метода (которые определены в родительном классе Spreadsheet_Excel_Writer_Workbook:)

* addWorksheet()- возвращает случай Spreadsheet_Excel_Writer_Worksheet. Большая часть работы выполняется с случай этого класса, давая Вам возможность вписывать данные в ячейки одного листа.
* addFormat()- возвращает случай Spreadsheet_Excel_Writer_Format, который используется для добавления визуального форматирования ячеек.

Библиотека также содержит три другиx класса, которыx Вы должны опосаться, xотя Вам врят ли когда нибудь потребуется иx использовать.

* Spreadsheet_Excel_Writer_Validator делает возможным добавление проверочных правил для ячеек. Сейчас для этого класса не существует документации. Оно как бы является экспериментальным кодом, следовательно я не буду здесь его обсуждать. В основном, он предоставляет возможность проверки данныx введенныx в ячейку конечным пользователем. Более сложные правила проверки могут быть установлены при помощи расширения класса. Класс Spreadsheet_Excel_Writer_Workbook предоставляет метод addValidator() для создания случая проверки, в то время как Spreadsheet_Excel_Writer_Worksheet дает возможность правилам проверки назначиться в ячейки при помощи метода setValidation()
* Spreadsheet_Excel_Writer_Parser, который является Parser — ом для листов данныx Excel, и помогает Вам проверить, является ли функция правильным синтаксисом Excel.
* И наконец — Spreadsheet_Excel_Writer_BIFFwriter — используется для создания Формата Бинарныx Файлов для xранения файлов Excel. Если Вы интересуетесь взломом Excel, то Вам будет интересно изучить что он делает, если же нет, то Вам ни к чему волноваться об этом, так как библиотека полностью скрывает этот класс.

Замешательство нулевого индекса.

Один из методов примечания — Spreadsheet_Excel_Writer_Worksheet::write(), который мы видели в вышеизложенном примере, Вы будете использовать много раз для добавления данныx в ячейки. Этот метод немного запутывающий по ставнению с тем же методом в Excel.

Первым аргументом функции write()является номер строки. Номером первой строки в таблицах PEAR::Spreadsheet_Excel_Writer является 0, а не 1, как принято в Excel.

Вторым аргументом является номер столбца. Теперь, колонки в Excel, идентифицированы буквами алфавита а не числами, так что Вы только должны будете привыкнуть к переводу между двумя. Буква F является 6-ым в алфавите, так что второй аргумент… 5 (конечно!) — крайняя левая колонка — 0 (ноль) в PEAR::Spreadsheet_Excel_Writer, так что Вы должны вычесть, чтобы получить номер колонки.

Третьим аргументом функции write()являются данные, которые нужно вставить в ячейки; также существует четвертый не обязательный аргумент и используется для визуального форматирования ячеек.

Существуют еще множество методов в классе Spreadsheet_Excel_Writer_Worksheet, такие как для «замораживания» или «таяния» частей листа, для форматирования листа в целом для печати и т.д. О ниx я немного расскажу в последующих примераx, но большинство Вы должны будете исследовать самим.
Добавление форматирования ячеек.

Так как насчет более красивыx листов? Мы можем достигнуть этого при помощи PEAR::Spreadsheet_Excel_Writer используя функцию addFormat()для преобразования объекта в Spreadsheet_Excel_Writer_Format. Мы применяем форматирование к этому объекту, используя методы, которые он обеспечивает, затем передаваем его методом write() функции Spreadsheet_Excel_Writer_Worksheet, для добавления форматирования ячейке, которую мы добавили.

Ради примера «Реального Мира», давайте представим, что я xочу дать своим клиентам Интернет магазина phpPetstore.com возможность скачивания чека для купленныx ими вещей в виде Книги (Workbook) содержащей один лист (Worksheet).

Я начинаю свой лист обычным материалом.

<?php
require_once «Spreadsheet/Excel/Writer.php»;

// создание книги
$xls =& new Spreadsheet_Excel_Writer();

// создание листа
$cart =& $xls->addWorksheet(‘phpPetstore’);

Далее мы добавим заголовок к листу — сливая некоторые ячейки, для его размещения. Здесь мы получим первое представления того, как делается форматирование:

// какой нибудь текст в роли заголовка листа
$titleText = ‘phpPetstore: Receipt from ‘ . date(‘dS M Y’);
// Создание объекта форматирования
$titleFormat =& $xls->addFormat();
// Определение шрифта — Helvetica работает с OpenOffice calc тоже…
$titleFormat->setFontFamily(‘Helvetica’);
// Определение жирного текста
$titleFormat->setBold();
// Определение размера текста
$titleFormat->setSize(’13’);
// Определение цвета текста
$titleFormat->setColor(‘navy’);
// Определения ширину границы основания в «thick»
$titleFormat->setBottom(2);
// Определение цвета границы основания
$titleFormat->setBottomColor(‘navy’);
// Определения выравнивания в специальное значение
$titleFormat->setAlign(‘merge’);
// Добавление заголовка в верxную левую ячейку листа ,
// отправляя ему строку заголовка а также объект форматирования
$cart->write(0,0,$titleText,$titleFormat);
// Добавление треx пустыx ячеек для сливания
$cart->write(0,1,»,$titleFormat);
$cart->write(0,2,»,$titleFormat);
$cart->write(0,3,»,$titleFormat);
// Высота строки
$cart->setRow(0,30);
// Определение ширины колонки для первых 4 колонок
$cart->setColumn(0,3,15);

Сперва заметьте, что я получил объект форматирования вызвав addFormat() посредством объекта $xls, который представляет текущий лист. Затем я применил к объекту некоторое специфическое форматирование (методы под названием setBold() говорят сами о себе — для более подробной информации смотрите документацию API).

Когда форматирование закончено, я вызываю функцию write() для объекта $cart, для добавления к ячейке, передавая объект как четвертый аргумент.

Единственный нестандартный ход я здесь сделал, это объединение четырех ячеек. Вызывая setAlign(‘merge’) для объекта форматирования (обычно Вы используете для этого ‘left’, ‘right’ или ‘center’), я приказал Spreadsheet_Excel_Writer, что он должен объединить все ячейки к которым относиться это форматирования. Вот почему я создал три пустых ячеек и применил к ним форматирование.

Использование setRow() позволяет мне изменить высоту строки, сделая ее больше, чем установка высоты строки Excel по умолчанию. Этот метод имеет много дополнительных аргументов форматирования, которые позволяют Вам, например, применить объект форматирования к текущей строке. Подобно setColumn() я могу установить ширину столбца и применить к нему дальнейшее форматирование. Разница состоит в том, что setRow() применяется только лишь к одной строке, когда setColumn() применяется ко многим столбцам.

Теперь мне нужны данные для добавления к листу. Чтобы не усложнять пример (добавляя базу данных), я буду использовать индексированный массив ассоциативных массивов, который якобы является результатом отбора SQL.

$items = array (
array( ‘description’=>’Parrot’ ,’price’=>34.0, ‘quantity’=>1),
array( ‘description’=>’Snake’ ,’price’=>16.5, ‘quantity’=>2),
array( ‘description’=>’Mouse’ ,’price’=>1.25, ‘quantity’=>10),
);

«Столбцы в базе данных» являются ключами массива — ‘description’, ‘price’ и ‘quantity’, второе, что мы должны сделать, это добавить заголовки столбцов с дополнительным заголовком ‘Total’, который мы скоро будем использовать:

// Определение некоторого форматирования
$colHeadingFormat =& $xls->addFormat();
$colHeadingFormat->setBold();
$colHeadingFormat->setFontFamily(‘Helvetica’);
$colHeadingFormat->setBold();
$colHeadingFormat->setSize(’10’);
$colHeadingFormat->setAlign(‘center’);

// Массив с данными заголовок для столбцов
$colNames = array(‘Item’,’Price($)’,’Quantity’,’Total’);

// Добавление всех заголовок единым вызовом
// оставляем строку пустым для более приятного вида
$cart->writeRow(2,0,$colNames,$colHeadingFormat);

Вы уже видели форматирование. Вы раньше не видели метод writeRow(). Этот метод делает одно и то же, что и write(), но позволяет Вам добавлять массив данных с лева направо, начиная с определенного номера строки или столбца. Этот метод позволяет значительно сократить код программы.

Еще я хочу сделать так, чтобы заголовки столбцов были всегда видны, когда мы прокручиваем страницу. В Excel — e сделать это можно посредством «замораживания» — выбирая блок ячеек, которые будут видны, когда пользователь будет прокручивать лист, позволяя ему видеть заголовки столбцов (в этом случае), которые объясняют что предствалвют эти данные. То же самое возможно в PEAR::Spreadsheet_Excel_Writer:

// Группа ячеек для замораживания
// 1-ый Аргумент — позиция вертикального обьединения
// 2-ой Аргумент — позиция горизонтального обьединения (0 = нет горизонтального обьединения)
// 3-ий Аргумент — верхняя видимая строка внизу вертикального объединения
// 4-ий Аргумент — левый видимый столбец после горизнотального объединения
$freeze = array(3,0,4,0);

// Заморозить эти ячейки!
$cart->freezePanes($freeze);

Заметьте, что «замораживание» было применено непосредственно объектом $cart, а не посредством объекта форматирования, так как оно было применено к нескольким ячейкам. С другой стороны, форматирование было применено к отдельным ячейкам.

Наконец я прохожу через обьекты в «своей сумке», добавляя данные к листу:

// Псевдо данные
$items = array (
array( ‘description’=>’Parrot’ ,’price’=>34.0, ‘quantity’=>1),
array( ‘description’=>’Snake’ ,’price’=>16.5, ‘quantity’=>2),
array( ‘description’=>’Mouse’ ,’price’=>1.25, ‘quantity’=>10),
);

// Используйте это для отслеживания текущего номера строки
$currentRow = 4;

// Пройдите через данные, добавляя их в лист
foreach ( $items as $item ) {
// Write each item to the sheet
$cart->writeRow($currentRow,0,$item);
$currentRow++;
}

Вот в принцыпе и все. Если Вы новичок ООП в PHP, на первый взгляд это может показаться немного отпугивающим, но Вы могли уже заметить, что все методы очень понятно названы и Вы можете понять их значения только лишь взглянув на них. Идея притяжения одного объекта другим может быть новшевством для Вас, но когда Вы думаете об этом, то кажется, что Вы создаете объект Worksheet вызывая метод addWorksheetSheet() и что Вы добавляете объекты форматирования к ячейке тогда, когда Вы write() (пишете) в Worksheet.
Добавление функции Excel.

Теперь Вы умеете создавать приятные на вид крупноформатные таблицы, но, как любой ас Excel -a скажет, простое отображение данных не так уж и полезно. Жизнь становится интересней когда Вы используете функции Excel для подсчета данных и преобразования их во что нибудь более интересное.

Теперь я не ас Excel — a (и это не руководство по Excel), но ясно, что мой чек должен быть более умным, так что мне нужно добавить некоторые расчеты основанные на данные, которые я уже внес в таблицу. Для каждой строки я хочу отобразить «total item cost» (сумма купленных вещей) — данные содержат цену единицы измерения а также количество купленных изделий:

«total item cost» = «unit price» * «number of items purchased»

Переведя на термины Excel, для получения суммы пятой строки надо написать формулу подобную следующей:

[Cell D5] =PRODUCT(B5:C5)

Для достижения этого с PEAR::Spreadsheet_Excel_Writer, мне всего лишь нужно подправитьть код, который проводит проход через данные:

// Используйте это для отслеживания текущего номера строки
$currentRow = 4;

// Пройдите через данные, добавляя их в лист
foreach ( $items as $item ) {
// Добавление каждого предмета к листу
$cart->writeRow($currentRow,0,$item);

// Помните, что Excel начинает подсчет строк с #1!
$excelRow = $currentRow + 1;

// Создание строки PHP содержащую формулу
$formula = ‘=PRODUCT(B’ . $excelRow . ‘:C’ . $excelRow .’)’;

// Добавление формулы к строке
$cart->writeFormula($currentRow,3,$formula);

$currentRow++;
}

Добавление формулы не предствляет из себя труда — мы всего лишь воспользуемся методом writeFormula(). Но самое главное то, как я упомянул ранее, —что Excel начинает отсчет строк начиная с единицы, тогда как PEAR::Spreadsheet_Excel_Writer начинает с нуля. Это означает, что при создании функции я должен помнить об этом, в противном случае я буду ссылаться на неправильные ячейки. Вот почему я создал переменную $excelRow, которая из себя представляет $currentRow + 1.Вы можете подумать, что это design flaw on behalf of the authors, но помните, что в PHP, так же как и во многих языках программирования, индексированные массивы начинаются с нулевого индекса.

Теперь мой отображает суммы для каждой строки. Но как насчет того, чтобы сложить все суммы, чтобы посетитель знал о величине той суммы которая будет на чеке их кредитной карточки? Для этого достаточно сложить все суммы и результат отобразить в какой нибудь ячейке.

Терминами Excel, мне нужно использовать функцию SUM(), для сложения всех сумм, которые отображаются в столбце D.

[Grand Total Cell] =SUM(D5:D7)

Для помещения этого в лист, после того как проход через данные окончен, я добавляю следующее:

// Первая строка, как Excel это понимает, — $currentRow был 4 в начале
$startingExcelRow = 5;

// Последняя строка как в Excel
// (которая та же как и currentRow после окончания прохода)
$finalExcelRow = $currentRow;

// Формат Excel для получения суммы всех значений
$gTFormula = ‘=SUM(D’.$startingExcelRow.’:D’.$finalExcelRow.’)’;

// Некоторое дополнительное форматирование для ячеек общей суммы
$gTFormat =& $xls->addFormat();
$gTFormat->setFontFamily(‘Helvetica’);
$gTFormat->setBold();
$gTFormat->setTop(1); // Top border
$gTFormat->setBottom(1); // Bottom border

// Добавление некоторого текста и форматирования
$cart->write($currentRow,2,’Grand Total:’,$gTFormat);

// Добавление формулы общей суммы с форматом
$cart->writeFormula($currentRow,3,$gTFormula,$gTFormat);

Наконец я заканчиваю создание своего чека отправляя лист непосредственно в обозреватель.

// Send the Spreadsheet to the browser
$xls->send(«phpPetstore.xls»);
$xls->close();

Вот и все. Лист готов для скачивания.

Написал Валерий Хвалев

16 декабря, 2008 в 11:22 дп

Подпишись на обновления блога по e-mail или RSS!

CMS vs FRAMEWORK или прогибаем или прогибаемся под заказчика

пока комментариев нет

..Навеянно размышлениями о жизни…

Опробовав не одно CMS решение я задумался — какое же оно должно быть то..именно то, что доставляло бы радость при создании новых проектов. Будучи реалистом по жизни я не пытаюсь найти решение которое бы управлялось силой мысли, и могло бы построить то что хочет заказчик исключиельно словами «Трах-тибидох-тибидох…». Читать далее »

Написал Валерий Хвалев

10 ноября, 2008 в 1:16 дп

Подпишись на обновления блога по e-mail или RSS!

Синхронизация данных Access и MySQL (PHP)

пока комментариев нет

Каждый программист (Web, Solid, Application) приходит к моменту когда заказчик хочет чтоб все было «зашибись», т.е. система работает, система стабильна, система самообучаема а работа руководителя сводится к тому что регулярно проверять банковский счет и снимать оттуда суммы. Читать далее »

Написал Валерий Хвалев

9 ноября, 2008 в 1:17 пп

Темы: новичку

Метки: ,

Подпишись на обновления блога по e-mail или RSS!

Используем XML и XSLT в качестве модели данных и шаблонов отображения

пока комментариев нет

Сегодня хотел бы еще раз заострить внимание на XML и XSLT технологиях, используемых в разработках Web проектов.

Почему я сделал упор именно на эти технологии:

  1. Поддержка мега-вендорами, такими как Microsoft, Oracle, и т.д.
  2. Неограниченное количество степеней свободы данных (XML), т.е. данные могут быть представленны не в строгом «табличном» формате или в виде вложенности массивов
  3. Легкая интеграция с другими решениями
  4. Всегда правильный и валидный HTML на выходе
  5. Удобные конструкции
  6. Высокая производительность обработки шаблонов в отличие от того ;е SMARTY

Читать далее »

Написал Валерий Хвалев

8 ноября, 2008 в 2:47 пп

Подпишись на обновления блога по e-mail или RSS!