$(function () { if (window.location.hash){ contentload(window.location.hash);} $("body").on("click", "a", function(event){ fragment = this.hash; if(this.hostname == window.location.hostname ) { if($(this).attr('data-toggle') != "dropdown" && $(this).attr('target') != "_blank") { var load_url = this.href.split('<?php echo $_SERVER['SERVER_NAME']?>'); contentload(load_url[1], true); } return false; } }); window.onpopstate = function(event) { load_url = location.href; contentload( load_url, false); console.log("path: " + load_url); }; }); function contentload(load_url, is_link) { $("#body-loader").show(); $.ajax({ url : load_url, success : function(data) { $('#container-wrapper').html(data); $("#body-loader").hide(); if(is_link) { var full_url = '//<?php echo $_SERVER['SERVER_NAME']?>'+load_url; history.pushState({}, 'New URL: ' + full_url, full_url); } load_start(); } }); }
2014/05/15
Jquery Ajax loader
Cache header for Apache
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access 1 year" ExpiresByType image/jpeg "access 1 year" ExpiresByType image/gif "access 1 year" ExpiresByType image/png "access 1 year" ExpiresByType text/css "access 1 month" ExpiresByType application/pdf "access 1 month" ExpiresByType text/x-javascript "access 1 month" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType image/x-icon "access 1 year" ExpiresDefault "access 2 days" </IfModule>
<IfModule mod_expires.c> ExpiresActive On ExpiresByType image/jpg "access 1 year" ExpiresByType image/jpeg "access 1 year" ExpiresByType image/gif "access 1 year" ExpiresByType image/png "access 1 year" ExpiresByType text/css "access 1 month" ExpiresByType application/pdf "access 1 month" ExpiresByType text/x-javascript "access 1 month" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType image/x-icon "access 1 year" ExpiresDefault "access 2 days" </IfModule>
Label:
Apache,
Tips,
Web Programming
2014/03/17
Quote.mn - Онч үгсийн сайт
Хэдэн жилийн өмнө, тодруулбал 2011 оны 7 сарын 10-ны өдөр онч мэргэн үгсийн сайт хийх шийдвэрээ биелүүлэхээр http://quote.mn/ домэйнийг худалдаж авснаа санаж байна. Санаагаа хэрэгжүүлэхээр 2 ч удаа кодын ажлыг гүйцэлдүүлсэн ч нэвтрүүлж чадалгүй орхисон.
Гадны сайтуудаас гайгүй хэдэн онч үг бот гүйлгэж авсан ч тэр өгөгдлийн сангаа хуудаслаж, оновчилж зохион байгуулахаас залхуурч нэг алгасав. 2 жилийн дараа Монгол хэл рүү нээлттэй орчуулгатай хийхээр болж, нийтийн сүлжээнүүдээр зарлан идэвхитэн орчуулагч хайхаа шийдсэн ч уур амьсгал эсрэгээрээ, "онч үгсийг үзэн ядагчид" нийтийн сүлжээдээр дүүрэн байгааг мэдээд хүсэл унтарсан удаа бий.
Ухаалаг үгсийг олон уншаад, хэлээд давтаад байх нь хүнийг ухаантай харуулдаг ч ухаантай болгочихдоггүй, үйл хөдлөлөөрөө ухааныг баталдаг. Гэхдээ төрөлхийн боловч тэлж нээгдээгүй ухаанд ухаарал нэмэрлэх үгс л ус, агаар мэт хэрэгцээтэй байж болох, үгүй ч байж болох.
3 жилийн өмнө худалдаж авч хадгалсан домэйнийг юутай ч нэг бүтээл болгож гаргалаа. Монгол хэл дээр гаргах, орчуулгын систем хийх санаа байсан ч нэг хэсэгтээ хийхгүй. Монгол хэл дээр орчуулах нь зүйтэй, дэмжинэ, оролцоно гэсэн санал хүсэлт хангалттай олон иртэл англи хэл дээрхи агуулга, системийг хөгжүүлнэ.
Гадны сайтуудаас гайгүй хэдэн онч үг бот гүйлгэж авсан ч тэр өгөгдлийн сангаа хуудаслаж, оновчилж зохион байгуулахаас залхуурч нэг алгасав. 2 жилийн дараа Монгол хэл рүү нээлттэй орчуулгатай хийхээр болж, нийтийн сүлжээнүүдээр зарлан идэвхитэн орчуулагч хайхаа шийдсэн ч уур амьсгал эсрэгээрээ, "онч үгсийг үзэн ядагчид" нийтийн сүлжээдээр дүүрэн байгааг мэдээд хүсэл унтарсан удаа бий.
Ухаалаг үгсийг олон уншаад, хэлээд давтаад байх нь хүнийг ухаантай харуулдаг ч ухаантай болгочихдоггүй, үйл хөдлөлөөрөө ухааныг баталдаг. Гэхдээ төрөлхийн боловч тэлж нээгдээгүй ухаанд ухаарал нэмэрлэх үгс л ус, агаар мэт хэрэгцээтэй байж болох, үгүй ч байж болох.
3 жилийн өмнө худалдаж авч хадгалсан домэйнийг юутай ч нэг бүтээл болгож гаргалаа. Монгол хэл дээр гаргах, орчуулгын систем хийх санаа байсан ч нэг хэсэгтээ хийхгүй. Монгол хэл дээр орчуулах нь зүйтэй, дэмжинэ, оролцоно гэсэн санал хүсэлт хангалттай олон иртэл англи хэл дээрхи агуулга, системийг хөгжүүлнэ.
Label:
Миний бүтээл
2014/02/06
Symfony 1.4: sfImageFileValidator
Symfony 1.4 дээр upload хийж буй зургийн өргөн, өндрийг шалгах шалгагч.
Байдлаар ашиглана. Validator-ийн код:
$this->validatorSchema['picture'] = new sfImageFileValidator( array( 'required' => $this->getObject()->isNew() ? true : false, 'path' => sfConfig::get('sf_upload_dir') . '/content_picture', 'max_size' => 1048576, 'min_height' => '292', 'min_width' => '640', 'mime_types' => array( 'image/jpeg', 'image/pjpeg', 'image/png', 'image/x-png', 'image/gif', ) ), array( 'required' => 'Та зураг оруулна уу', 'max_size' => 'Таны оруулсан зурагны хэмжээ иx байна. Хамгийн иxдээ 1024kb.', 'mime_types' => 'Та зөвxөн зурган файл оруулаx боломжтой'));
Байдлаар ашиглана. Validator-ийн код:
2014/01/20
Symfony 1.4: sfWidgetFormDoctrineChoice виджетийн method-ийг параметертэй болгож сайжруулсан нь.
<?php /** * sfWidgetFormDoctrineChoiceWithParams represents a sfWidgetFormDoctrineChoice with parameter capability on table_method. */ class sfWidgetFormDoctrineChoiceWithParams extends sfWidgetFormDoctrineChoice { /** * @see sfWidget */ public function __construct($options = array(), $attributes = array()) { $options['choices'] = array(); parent::__construct($options, $attributes); } /** * Constructor. * * Available options: * * * model: The model class (required) * * add_empty: Whether to add a first empty value or not (false by default) * If the option is not a Boolean, the value will be used as the text value * * method: The method to use to display object values (__toString by default) * * key_method: The method to use to display the object keys (getPrimaryKey by default) * * order_by: An array composed of two fields: * * The column to order by the results (must be in the PhpName format) * * asc or desc * * query: A query to use when retrieving objects * * multiple: true if the select tag must allow multiple selections * * table_method: A method to return either a query, collection or single object * * @see sfWidgetFormSelect */ protected function configure($options = array(), $attributes = array()) { $this->addRequiredOption('model'); $this->addOption('add_empty', false); $this->addOption('method', '__toString'); $this->addOption('key_method', 'getPrimaryKey'); $this->addOption('order_by', null); $this->addOption('query', null); $this->addOption('multiple', false); $this->addOption('table_method', null); parent::configure($options, $attributes); } /** * Returns the choices associated to the model. * * @return array An array of choices */ public function getChoices() { $choices = array(); if (false !== $this->getOption('add_empty')) { $choices[''] = true === $this->getOption('add_empty') ? '' : $this->translate($this->getOption('add_empty')); } if (null === $this->getOption('table_method')) { $query = null === $this->getOption('query') ? Doctrine_Core::getTable($this->getOption('model'))->createQuery() : $this->getOption('query'); if ($order = $this->getOption('order_by')) { $query->addOrderBy($order[0] . ' ' . $order[1]); } $objects = $query->execute(); } else { $results = $this->callTableMethod(); if ($results instanceof Doctrine_Query) { $objects = $results->execute(); } else if ($results instanceof Doctrine_Collection) { $objects = $results; } else if ($results instanceof Doctrine_Record) { $objects = new Doctrine_Collection($this->getOption('model')); $objects[] = $results; } else { $objects = array(); } } $method = $this->getOption('method'); $keyMethod = $this->getOption('key_method'); foreach ($objects as $object) { $choices[$object->$keyMethod()] = $object->$method(); } return $choices; } /** * Gets result for 'choices' from the Table class of model * * @return mixed Result of table method [Doctrine_Query, Doctrine_Collection, Doctrine_Record] */ private function callTableMethod() { $tableMethod = $this->getOption('table_method'); if (is_array($tableMethod)) { $results = call_user_func_array(array(Doctrine::getTable($this->getOption('model')), $tableMethod['method']), $tableMethod['parameters']); } else { $results = Doctrine::getTable($this->getOption('model'))->$tableMethod(); } return $results; } } ?>
Ашиглахдаа:
<?php $this->setWidgets(array( 'portraits' => new customWidgetFormDoctrineChoiceWithParams(array( 'model' => 'EclecticPortrait', 'multiple' => true, 'expanded' => true, 'table_method' => array('method' => 'getUserPortraits', 'parameters' => array($this->getOption('contact'), $this->getOption('id'))), )), )); ?>
Subscribe to:
Posts (Atom)