Таблица символов, или Связующая нить Алексей Вторников // Таблица символов (первый вариант) import java.util.*; public class SymbolTable { public TreeMap symtab; public SymbolTable () { symtab = new TreeMap (); } // Найти символ в таблице символов и увеличить на 1 // значение счетчика; если такого символа нет, // то добавить новый символ в таблицу символов // и инициализировать значение счетчика 1: public void incValue (String name) { if (symtab.get (name) != null) { int count = (Integer) symtab.get (name); symtab.put (name, ++count); } else { symtab.put (name, 1); } } // Вспомогательный метод распечатки содержимого // таблицы символов: public void printSymbolTable () { Set > entries = symtab.entrySet (); System.out.printf ("+---------------+----------+\n"); for (Map.Entry entry : entries) { System.out.printf ("|%15s|%10d|\n", entry.getKey (), entry.getValue ()); } System.out.printf ("+---------------+----------+\n"); } } public class Test { public Test () { SymbolTable stab = new SymbolTable (); stab.incValue ("81.200.56.45" ); stab.incValue ("151.36.14.207" ); stab.incValue ("101.175.18.138"); stab.incValue ("81.200.56.45" ); stab.incValue ("81.200.56.45" ); stab.incValue ("81.200.56.45" ); stab.incValue ("81.200.56.45" ); stab.incValue ("101.175.18.138"); stab.incValue ("101.175.18.138"); stab.incValue ("101.175.18.138"); stab.incValue ("81.200.56.45" ); stab.printSymbolTable (); } public static void main (String [] args) { new Test (); } } public TreeMap symtab; ... ; Загрузить данные: 1000: START: MOV DATA, R1 1002: MOV R1, @TEMP 1004: TST 1005: BZ NEXT ... 1200: NEXT: ADD TEMP, #1 ... ; Продолжить обработку: 1220: BR START ... ; Данные: 2000: DATA: 1 2001: 50 2002: -54 ... ; Ссылка на адрес временной переменной: 3000: TEMP: 200 1000: START: MOV NUMBERS, R1 // Таблица символов (второй вариант): import java.util.*; public class SymbolTable { public static TreeMap symtab; public SymbolTable () { } // Статическая инициализация: заполнить таблицу // символов ключевыми словами ассемблера: static { symtab = new TreeMap (); symtab.put ("ADD", new Attributes ('K', 0, false, 10)); symtab.put ("BR", new Attributes ('K', 0, false, 56)); symtab.put ("MOV", new Attributes ('K', 0, false, 13)); } // Тип символа. Возвращает «K» для ключевых слов // или «L» для меток: public char getType (String name) { Attributes f = (Attributes) symtab.get (name); char type = (f != null ? f.getType () : '-'); return type; } // Номер строки исходного кода, в которой определена // метка: public int getLine (String name) { Attributes f = (Attributes) symtab.get (name); int line = (f != null ? f.getLine () : 0); return line; } // Признак перемещаемости символа: public boolean isRelocatable (String name) { Attributes f = (Attributes) symtab.get (name); boolean tpe = (f != null ? f.isRelocatable () : false); return type; } // Значение символа. Если символ в таблице нет, // то возвращается -1 public long getValue (String name) { Attributes f = (Attributes) symtab.get (name); long value = (f != null ? f.getValue () : -1); return value; } // Добавить имя в таблицу символов: public boolean putSymbol (String name, char type, int line, boolean relocatable, long value) { if (symtab.get (name) == null) { symtab.put (name, new Attributes (type, line, relocatable, value)); return true; } System.out.println ("Duplicated symbol " + name); return false; } // Распечатать содержимое таблицы символов: public void printSymbolTable () { Set > entries = symtab.entrySet (); System.out.printf ("+---------------+-+------+-+----------------+\n”); for (Map.Entry entry : entries) { String key = entry.getKey (); char symbtype = getType (key); System.out.printf ("|%-15.15s|%1s|%6d|%1s|%16s|\n", key, symbtype, getLine (key), (isRelocatable (key) ? "T": "F"), getValue (key)); } } System.out.printf ("+---------------+-+------+-+----------------+\n”); } // Атрибуты элемента таблицы символов: class Attributes { private final char type; // Тип символа private final int line; // Номер строки // Признак перемещения private final boolean relocatable; // Значение (адрес или число) private final long value; Attributes (char type, int line, boolean relocatable, long value) { this.type = type; this.line = line; this.relocatable = relocatable; this.value = value; } // Методы доступа к атрибутам: public char getType () {return type;} public int getLine () {return line;} public boolean isRelocatable () {return relocatable;} public long getValue () {return value;} } public class Test { public Test () { SymbolTable stab = new SymbolTable (); stab.putSymbol ("START", 'L', 1, true, 1000); stab.putSymbol ("DATA" , 'L', 10, false, 2000); stab.printSymbolTable (); } public static void main (String [] args) { new Test (); } } ----------------------------------------------------------------------------------------------------------------- Возможности ILD. Инициализация логики по требованию Александр Майоров Exceptions (здесь лежат классы с исключениями); Import (классы сторонних разработчиков); Shared (некие общие классы, используемые на разных проектах); Core (классы вашего проекта) – |-- Cache | |-- CCache.php | |-- _ | | |-- Controller | | | |-- CCache_Controller.php | | | |-- ICache_Controller.php | | | `-- init.php | | `-- Engine | | `-- _ | | |-- EAccelerator | | | |-- CCache_Engine_EAccelerator.php | | | `-- init.php | | |-- File | | | |-- CCache_File.php | | | |-- _ | | | | `-- Engine | | | | |-- CCache_File_Engine.php | | | | `-- init.php | | | `-- init.php | | |-- Memcache | | | |-- CCache_Engine_Memcache.php | | | `-- init.php | | `-- XCache | | |-- CCache_XCache.php | | `-- init.php $name' not defined!"); require_once $f; } return call_user_func_array($foo, $args); } private function __construct(){} private function __clone(){} private static $I; public static function Init() { self::$I or self::$I = new self; return self::$I; } } ?> function __cf__foo_name() { ... } function_name() ?> class F { public static function __callStatic($methodname, $arguments) { ... } } ----------------------------------------------------------------------------------------------------------------- Управление сайтом. Взгляд на систему изнутри Александр Слесарев CREATE TABLE `module` ( `module_id` int(11) NOT NULL auto_increment, `name` varchar(64) NOT NULL default '', `description` text NOT NULL, `path` varchar(255) NOT NULL default '', `admpath` varchar(255) NOT NULL default '', `access` enum('n','y') NOT NULL default 'n', PRIMARY KEY (`module_id`) ); CREATE TABLE `template` ( `template_id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL default '', `path` varchar(64) NOT NULL default '', `file` varchar(64) NOT NULL default '', PRIMARY KEY (`template_id`) ); CREATE TABLE `part` ( `part_id` int(11) NOT NULL auto_increment, `parent_id` int(11) NOT NULL default '0', `template_id` int(11) NOT NULL default '0', `position` int(11) NOT NULL default '0', `in_menu` enum('visible','hidden') NOT NULL default 'visible', `is_module` enum('0','1') NOT NULL default '0', `mod_link` varchar(255) NOT NULL default '', `mod_id` int(11) NOT NULL default '0', `default` enum('n','y') NOT NULL default 'n', `name` varchar(255) NOT NULL default '', `meta_title` varchar(255) NOT NULL default '', `meta_description` text NOT NULL, `meta_keywords` text NOT NULL, PRIMARY KEY (`part_id`) ); CREATE TABLE `paragraph` ( `paragraph_id` int(11) NOT NULL auto_increment, `part_id` int(11) default NULL, `position` int(11) NOT NULL default '0', `text` text NOT NULL, PRIMARY KEY (`paragraph_id`) ); /** * Метод, выбирающий раздел из БД * * @param integer $id Идентификатор раздела * @access public * @return array */ public function GetPartCont($id) { $data = array(); //Создаем запрос для выбора раздела: $sql = "SELECT `p`.*, `pc`.*, `t`.`path`, `t`.`file` FROM `part` AS `p`, LEFT JOIN `template` AS `t` ON `t`.`template_id` = `p`.`template_id` WHERE `p`.`part_id` = ".$id; //Выбираем раздел: $partition = $this->db->query($sql)->current(); //Выбираем наполнение раздела из таблицы paragraph: $this->db->where('part_id', $partition->part_id); $this->db->orderby('position', 'ASC'); $paragraph = $this->db->get('paragraph'); //Заносим полученные результаты в массив: $data['part'] = $partition; $data['cont'] = $paragraph; //Возвращаем полученные значения: return $data; } /** * Метод, формирующий раздел * * @param integer $id Идентификатор раздела * @access public * @return array */ public function part($id) { //Получаем всю информацию раздела с помощью метода модели GetPartCont: $data['content'] = $this->part->GetPartCont($id); //Формируем метаданные страницы: $data['title'] = $data['content']['part']->meta_title; $data['description'] = $data['content']['part']->meta_description; $data['keywords'] = $data['content']['part']->meta_keywords; //Запоминаем идентификатор раздела: $data['part_id'] = $id; //Получаем шаблон раздела: $body = $data['content']['part']->path.'/'.$data['content']['part']->file; //Выводим полученный раздел в браузер: $this->compile($body, $data); } /** * Метод, собирающий отображение * * @param string $body Контентный шаблон страницы * @param array $data Массив данных для отображения * @access public * @return void */ public function compile($body, $data) { //Создаем объекты элементов страницы: //Верхняя часть страницы $this->head = new View('inc/head', $data); //Контентная часть страницы $this->body = new View($body, $data); //Нижняя часть страницы $this->foot = new View('inc/foot', $data); //Вывод в браузер $this->head->render(TRUE); $this->body->render(TRUE); $this->foot->render(TRUE); } /** * Метод, формирующий раздел каталога * * @param string $param Идентификатор раздела и каталога * @access public * @return void */ public function content($param) { //Разбиваем параметр на переменные: list($part_id, $catalog_id) = explode('-', $param); //Получаем всю информацию раздела с помощью метода модели GetPartCont: $data['content'] = $this->part->GetPartCont($part_id); //Получаем информацию из каталога: $data['catalog'] = $this->content->GetCatalog($catalog_id); //Формируем метаданные страницы: $data['title'] = $data['content']['part']->meta_title; $data['description'] = $data['content']['part']->meta_description; $data['keywords'] = $data['content']['part']->meta_keywords; //Запоминаем идентификатор раздела: $data['part _id'] = $part_id; //Запоминаем идентификатор каталога: $data['catalog_id'] = $catalog_id; //Получаем шаблон раздела: $body = $data['content']['part']->path.'/'.$data['content']['part']->file; //Выводим полученный раздел в браузер: $this->compile($body, $data); } CREATE TABLE `language` ( `language_id` int(11) NOT NULL auto_increment, `name` varchar(64) NOT NULL default '', `pseud` varchar(8) NOT NULL default '', `default` enum('n','y') default 'n', PRIMARY KEY (`language_id`) ); CREATE TABLE `partcont` ( `partcont_id` int(11) NOT NULL auto_increment, `part_id` int(11) NOT NULL default '0', `language_id` int(11) NOT NULL default '0', `name` varchar(255) NOT NULL default '', `meta_title` varchar(255) NOT NULL default '', `meta_description` text NOT NULL, `meta_keywords` text NOT NULL, PRIMARY KEY (`partcont_id`) ); /** * Метод, выбирающий язык, установленный по умолчанию * * @access public * @return integer */ public function GetDefault() { $this->db->where ('default', 'y'); $ln = $this->db->get('language')->current(); return $ln->language_id; } /** * Конструктор класса * * @access public */ public function __constract() { parent:: __constract(); //Запуск сессии: $this->session = Session::instance(); //Инициализация необходимых объектов: $this->part = new Parts_Model(); $this->settings = new Settings_Model(); $this->language = new Language_Model(); $this->elements = new Templelements_Model(); //Проверка переменной отвечающей за языковую раскладку: $lang = $this->session->get('lang'); if(empty($lang)){ $lang = $this->language->GetDefault(); } else{ $lang = $this->session->get('lang'); } //Запись переменной в сессию: $this->session->set('lang', $lang); } $this->lang = $this->session->get('lang'); /** * Метод, выбирающий раздел из БД * * @param integer $id Идентификатор раздела * @access public * @return array */ public function GetPartCont($id) { $data = array(); //Создаем запрос для выбора раздела: $sql = "SELECT `p`.*, `pc`.*, `t`.`path`, `t`.`file` FROM `part` AS `p` LEFT JOIN `partcont` AS `pc` ON `p`.`part_id` = `pc`.`part_id` LEFT JOIN `template` AS `t` ON `t`.`template_id` = `p`.`template_id` WHERE `pc`.`language_id` = ".$this->lang." AND `p`.`part_id` = ".$id; //Выбираем раздел: $partition = $this->db->query($sql)->current(); //Выбираем наполнение раздела из таблицы paragraph: $this->db->where('part_id', $partition->partcont_id); $this->db->orderby('position', 'ASC'); $paragraph = $this->db->get('paragraph'); //Заносим полученные результаты в массив: $data['part'] = $partition; $data['cont'] = $paragraph; //Возвращаем полученные значения: return $data; } function ChangeLang(id) { $.post('/main/changelang/', {lang_id: id}, function(){location.reload(); }); } /** * Метод, выбирающий раздел из БД * * @access public */ public function changelang() { $lang = $this->input->post('lang_id',null,true); $this->session->set('lang', $lang); }
Артикул Название Описание Цена
article;?> name;?> description;?> price;?>
CREATE TABLE `element` ( `name` varchar(255) NOT NULL default '', `element_id` int(11) NOT NULL auto_increment, `pseud` varchar(255) NOT NULL default '', PRIMARY KEY (`element_id`) ); CREATE TABLE `elvalue` ( `elvalue_id` int(11) NOT NULL auto_increment, `element_id` int(11) NOT NULL default '0', `language_id` int(11) NOT NULL default '0', `value` text NOT NULL, PRIMARY KEY (`elvalue_id`) ); /** * Метод, выбирающий статичные элементы * * @access public * @return array */ public function GetAll() { //Выбираем статичные элементы: $data = array(); $sql = "SELECT * FROM `element` AS `e` LEFT JOIN `elvalue` AS `ev` ON `e`.`element_id` = `ev`.`element_id` WHERE `ev`.`language_id` = ".$this->lang; $res = $this->db->query($sql); //Формируем массив: foreach($res as $val){ $data[$val->pseud] = $val->value; } //Возвращаем полученный массив: return $data; } $data['element'] = $this->elements->GetAll();
article;?> name;?> description;?> price;?>
CREATE TABLE `setting` ( `setting_id` int(11) NOT NULL auto_increment, `name` varchar(255) NOT NULL default '', `pseud` varchar(255) NOT NULL default '', `position` int(5) NOT NULL default '0', `value` varchar(255) NOT NULL default '', PRIMARY KEY (`setting_id`) ); /** * Метод, выбирающий конфигурационную настройку * * @param string $pseud системный псевдоним * @access public * @return string */ public function get($pseud) { //Выбираем соответствующую настройку: $this->db->where('pseud', $pseud); $res = $this->db->get('setting')->current(); //Возвращаем ее значение: return $res->value; } /** * Метод, добавляющий запись в каталог * * @access public * @return void */ public function add_save() { //Ширину и высоту загружаемого изображения получаем от пользователя: $width = $this->input->post('width'); $height = $this->input->post('height'); /* Максимальный размер загружаемого изображения берем из конфигурационного файла: */ $size = Kohana::config('upload.size'); //Устанавливаем начальное значение файла изображения: $imgname = ''; /* Если пользователь не указал размеры изображения, берем их из наших настроек: */ if(empty($width)) $width = $this->settings->get('SmallImgWidth'); if(empty($height)) $height = $this->settings->get('SmallImgHeight'); //Проверяем, был ли выбран файл изображения: if(!empty($_FILES['image']['name'])) { //Определяем правила для загружаемого изображения: $file = Validation::factory($_FILES)->add_rules('image', 'upload::valid', 'upload::type[gif,jpg,png]', 'upload::size['.$size.'M]'); //Проверяем валидность файла: if($file->validate()) { //Загружаем изображение: $filename = upload::save('image'); $imgname = 'img/upload/catalog/'.$filename; //Изменяем его размеры и сохраняем: Image::factory($filename)->resize($width, $height, Image::WIDTH)->save(DOCROOT.$imgname); //Удаляем временный файл if(file_exists($filename)) unlink($filename); } } //Собираем данные в массив: $data = array ( 'parent_id' => $this->input->post('parent_id'), 'language_id' => $this->input->post('language_id'), 'name' => htmlspecialchars($this->input->post('name')), 'description' => $this->input->post('description'), 'alt' => htmlspecialchars( ? $this->input->post('alt')), 'image' => $imgname ); //Вставляем в БД: $this->content->InsertCatalog($data); //Возвращаемся на исходную страницу: url::redirect('http:/'.url::base().'edit/catalogue/maincatalogue'); } ----------------------------------------------------------------------------------------------------------------- Bourne Shell. Основные приемы программирования Рашид Ачилов # myscript -a text_a -b text_b -c -d # myscript text_a text_b help="Run: pinger " if [ $# -eq 0 ]; then echo "No test address apecified. "$help exit fi if [ $# -eq 1 ]; then echo "No output file specified. "$help exit fi filename="" reason="unspecified" args=`getopt uhf:r: $*`; if [ $? -ne 0 ]; then usage exit 20 fi set -- $args for i in $args do case "$i" in -h) usage exit;; -e) reason="$2"; shift; shift;; -f) filename="$2"; shift; shift;; -u) mode="update"; shift;; --) shift; break;; esac done skel="/usr/share/skel" dbackup="/usr/local/share/dmbackup" sysdirs="documents profile/appdata profile/desktop profile/menu" $config="/tmp/config.conf" if [ -e $config ]; then . $config else echo "Configuration file $config does not exist" exit fi _iface=`head -n 1 /tmp/test.txt` _line2=`head -n 2 /tmp/test.txt | tail -n +2` _lns=`tail -n +3 /tmp/test.txt` echo "[$_iface] [$_line2] [$_lns]" saveifs=$IFS IFS=' ' lines=`cat test.txt` start=1 for one in $lines do eval "line$start=\"$one\"" start=$(($start+1)) done [section_one] var1=value1 var2=value2 [section_two] var3=value3 var4=value4 parse_sectioned_config() { local _section _fname _section=$1 _fname=$2 # Удаляем комментарии _first=`awk '{if ($1 == "#") next; else print $0}' < $_fname` # Разбиваем по символу [, так что части будут иметь вид: "section] var1=value1 var2=value2" "section] var3=value3 var4=value4" saveifs=$IFS IFS=[ set $_first # Берем одну часть "section] var1=value1 var2=value2" for _second in $_first do # Разбиваем по символу ], так что части будут иметь такой вид: "section" "var1=value1 # var2=value2" IFS=] # Поскольку мы разбивали по символу [, ./bin/sh создал пустую переменную if [ ${#_second} -eq 0 ]; then continue fi set $_second if [ $1 = $_section ]; then # Последний разбор – если это нужная нам секция, то вторая часть содержит переменные списком IFS=$saveifs _secvalue=$2 stub="_" # Берем каждую пару var=value, разбиваем по знаку = и формируем команду for _local in $_secvalue do IFS== set $_local eval "$_section$stub$1=\"$2\"" IFS=$saveifs done break fi done } print_strings_quantity() { local _decoded _decoded=`wc -l $1 | awk '{print $1}'` echo "$_decoded lines has been written into file $1" } make_tempdir() { if [ ${#tempdir} -eq 0 ]; then tempdir=`mktemp -d /tmp/adphones.XXXXXX` fi cd $tempdir } $aaa="/usr/local/bin/testfile" наименьший суффикс ({aaa%/*}) with /* это [/usr/local/bin] наибольший префикс ({aaa##*/}) with */ это [testfile] $bbb="testfile.ext.ext2" наименьший суффикс ({bbb%.*}) with .* это [testfile.ext] наибольший суффикс ({bbb%%.*}) with .* это [testfile] наименьший префикс ({bbb#*.}) with *. это [ext.ext2] наибольший префикс ({bbb##*.}) with *. это [ext2] # Удалить "_N" в конце имени файла oldverz=${oldvery%_*} # Удалить текст из имени файла до номера версии ver=${packageString##*-} if [ ${_file%/*} = "CVS" ]; then continue fi parseVersionLine() { _saveifs=$IFS # Отбросить наибольший префикс для выбора версии пакета: ver=${packageString##*-} IFS="." set $ver majorVersion=$1 minorVersion=$2 patchVersion=$3 IFS=$_saveifs } qmiss=0 echo "" echo "Unsatisfed dependencies:" for onemiss in $missdep do echo $onemiss qmiss=$(($qmiss+1)) done echo "Unsatisfed dependencies: $qmiss" # Oбычный черный текст set2="0;38m" #black # Переключатель между жирным и обычным lever=0 while [ $lever -le 1 ] do # Escape sequence для установки цвета – \033[{0|1};NNm (в hex \x1B[{0|1};NNm), где NN – код цвета echo "Code like \033[$lever;NNm" echo "" # Цветовые коды идут от 30 до 38 code=30 while [ $code -le 38 ] do printf "\033[%s;%sm%s\033[%s - %s\n" $lever $code "Color Text" $set2 $code code=$(($code+1)) done lever=$(($lever+1)) echo "" done # Цветовые коды сообщений (не забывайте начинать с \033!): red="[1;31m" green="[1;32m" yellow="[1;33m" blue="[1;34m" violet="[1;35m" magenta="[1;36m" ordinary="[0;38m" print_color() { printf "\033%s%s\033%s\n" $1 "$2" $ordinary } print_color $yellow "Downloading list of packages..." ----------------------------------------------------------------------------------------------------------------- Ext JS больше нет! Начинаем работу с Ext JS Кирилл Сухов Ext JS! Ext.onReady(function(){ Ext.MessageBox.show({ title: 'Hello Ext JS', msg: 'Hello!', buttons: Ext.MessageBox.OK, minWidth: 200, icon: Ext.MessageBox.INFO }) }); Ext.MessageBox.show({ title: 'Hello Ext JS', msg: 'Hello!', buttons: Ext.MessageBox.OK, minWidth: 200, icon: Ext.MessageBox.INFO, fn: Result }) }); function Result(){ alert("callbackTest!"); } var tabs2 = new Ext.TabPanel({ renderTo: Ext.getBody(), width:450, height:450, activeTab: 0, frame:true, items: [{ title: 'Tab 1', html: 'Простой Tab' },{ title: 'Tab 2', html: 'Еще Tab' }},{ title: 'Tab 3', html: 'И еще Tab' } }] });

  • On the Shore 1970
  • The Garden of Jane Delawney 1970
  • Trees 2001
  • Back to Roots
  • Forrest Fires

var cont=''; var w = new Ext.Window({ title: 'Window', width: 560, autoHeight: true, items: { title: 'Collapse Me', height: 560, collapsible: true, border: false, html: '

Trees

', padding: 40, listeners: { beforecollapse: function() { w.el.shadow.hide(); }, beforeexpand: function() { w.el.shadow.hide(); }, collapse: function() { w.syncShadow(); }, expand: function() { w.syncShadow(); } } } }).show(); collapsible: true, border: false, // html: '

Trees

', contentEl: 'tabs1', padding: 40, listeners: { Ext.onReady(function(){ var store = new Ext.data.ArrayStore({ fields: [ {name: 'name'}, {name: 'price', type: 'float'}, {name: 'change', type: 'float'}, {name: 'pctChange', type: 'float'}, {name: 'lastChange', type: 'date', dateFormat: 'n/j h:ia'} ] }); var myData = [ ['Samsung N127 (LA01RU)',346.67,0.02,0.03,'9/1 12:00am'], ['Samsung N130 (KA03)',354.9,0.42,1.47,'9/1 12:00am'], ['Samsung N150 (KA02)',358.33,0.28,0.34,'9/1 12:00am'], ['Asus Eee PC 1001PX',370.279,0.01,0.02,'9/1 12:00am'], ['Acer Aspire One (LU.SCM0D.001)',385.799,0.31,0.49,'9/1 12:00am'], ['HP Compaq Mini(WR254EA)',386.73,-0.48,-1.54,'9/1 12:00am'], ['Lenovo IdeaPad S10-3-2KB-B',401.62,0.53,0.71,'9/1 12:00am'], ['Lenovo ThinkPad X100e (NTS4TRT)',442.50,0.92,1.39,'9/1 12:00am'] ]; store.loadData(myData); var grid = new Ext.grid.GridPanel({ store: store, columns: [ {id:'name',header: 'Name', width: 240, sortable: true, dataIndex: 'name'}, {header: 'Price', width: 75, sortable: true, renderer: 'usMoney', dataIndex: 'price'}, {header: 'Change', width: 75, sortable: true, dataIndex: 'change'}, {header: '% Change', width: 75, sortable: true, dataIndex: 'pctChange'}, {header: 'Last Updated', width: 85, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'} ], stripeRows: true, autoExpandColumn: 'name', height: 200, width: 480, title: 'My Grid', stateful: true, stateId: 'grid' }); grid.render('grid-example'); });
{header: 'Change', width: 75, sortable: true, renderer: change, dataIndex: 'change'}, {header: '% Change', width: 75, sortable: true, renderer: pctChange, dataIndex: 'pctChange'}, function change(val){ if(val > 0){ return '' + val + ''; }else if(val < 0){ return '' + val + ''; } return val; } function pctChange(val){ if(val > 0){ return '' + val + '%'; }else if(val < 0){ return '' + val + '%'; } return val; } -----------------------------------------------------------------------------------------------------------------