Hiển thị các bài đăng có nhãn Công việc. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Công việc. Hiển thị tất cả bài đăng

Thứ Hai, 10 tháng 2, 2014

Win XP - Không vào được facebook - cách xử lý

Vấn đề mình gặp phải, lâu lâu không vào được facebook. Nguyên nhân liên quan đến DNS bị chặn.
Cách xử lý là trỏ DNS Server đến nước ngoài, mình hay dùng là 8.8.8.8 của google

Thứ Tư, 15 tháng 1, 2014

joomla Error displaying the error page: Application Instantiation Error

Xử lý lỗi jooma 3.2 - gặp phải ngày 15 tháng 01 năm 2013
Xử lý lần lượt theo từng cách
1. Change file configuration.php $dbtype = 'mysqli'; đổi thành $dbtype = 'mysql';
2. Change đường dẫn tmp, logs đúng trên host
3. Kiểm configuration.php $dbprefix = 'xxxxx_'; thành $dbprefix = 'xxx_'; (nhiều kí tự xuống 3 kí tự - Trường hợp mình gặp giải quyết xong ở bước này)
4. Fix database trong admin của joomla tham khảo từ andrewbrettwatson.com
5. Fix database bằng phpmyadmin tham khảo từ andrewbrettwatson.com
Chọn table, xuống bên dưới cuối cùng sẽ có check all và select Repair table

Thứ Tư, 8 tháng 1, 2014

Plugin mở rộng phần Assign menu

Tên extension: Advanced Module Manager Free
Chức năng: mở rộng module assign.
Phiên bản joomla hỗ trợ: 1.5, 1.6, 1.7, 2.5 ... 3.x
Link download: http://www.nonumber.nl/extensions/advancedmodulemanager
Cảm nghĩ cá nhân: đây là phần hỗ trợ tuyệt với đối với việc assign module (assign: ở đây có nghĩa là phân quyền hiển thị). Bình thường joomla có sẵn hỗ trợ module assign chỉ theo menu.  Ở đây extension hỗ trợ assign theo menu,category, article,user,language, ... thêm url.
Rất là tuyệt vời.


Sau khi setup thì vào Admin>module managerment>module sẽ có thêm phần mở rộng như hình:

Thêm module vào Article bài viết

Trong joomla có Content - Load Modules đây là plugin mặc định có sẵn của joomla.
Chức năng: load module vào trong bài viết với cấu trúc quy định
Cấu trúc:
Load module position {loadposition user1} load theo tên của postion
Modules by name {loadmodule mod_login} load theo loại module (giống tên folder trong modules/mod_name)

Hình ảnh bật plugin trong joomla 3.x


Chủ Nhật, 5 tháng 1, 2014

Google 2 location Distance Meter

Cách lấy khoảng cách bằng mét của 2 vị trí trong google map.

Kết quả:
Location 1:-33.8668283734,151.20648918209997
Location 2:-34.8668283734,151.20648918209997
Range Meter(m):111195(m)

Source 1 file html
<?xml version="1.0"?>
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Google 2 location Distance Meter</title>   
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=places,visualization&amp;v=3.exp"
type="text/javascript"></script>
    <script type="text/javascript">
var location1 = new google.maps.LatLng(-33.8668283734, 151.2064891821);
var location2 = new google.maps.LatLng(-34.8668283734, 151.2064891821);
function initialize() {
        var range=distance(location1,location2);
        //alert(range);
        var outputDiv = document.getElementById('outputDiv');
        var html='Location 1:'+location1.lat()+','+location1.lng()+'<br/>';
        html=html+'Location 2:'+location2.lat()+','+location2.lng()+'<br/>';
        html=html+'Range Meter(m):'+range+'(m)';
        outputDiv.innerHTML = html;
}
//Fucntion Distance
function distance(location1,location2) {
        var lat1=location1.lat();
        var lon1=location1.lng();
        var lat2=location2.lat();
        var lon2=location2.lng();
        var R = 6371; // km (change this constant to get miles)
        var dLat = (lat2-lat1) * Math.PI / 180;
        var dLon = (lon2-lon1) * Math.PI / 180;
        var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
                Math.cos(lat1 * Math.PI / 180 ) * Math.cos(lat2 * Math.PI / 180 ) *
                Math.sin(dLon/2) * Math.sin(dLon/2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        var d = R * c;
        //if (d&gt;1) return Math.round(d)+"km";
        //else if (d&lt;=1)
        return Math.round(d*1000);//meter      
        //return d;
}
google.maps.event.addDomListener(window, 'load', initialize);

   
</script>
  </head>
  <body>
    <div id="outputDiv"></div>   
  </body>
</html>



Source file https://drive.google.com/file/d/0B785Epf6q5XlLTR0QnMyaDNpb2M/edit?usp=sharing

Google map Change Icon in radius


Sử dụng thư viện từ google
<script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=places,visualization&v=3.exp"></script>
Thêm đoạn script
<script>
var map;
var infoWindow;
var service;
var distanceRange=10000;//1km
var types=['bank'];
var iconInRange="in_range.png";
var iconOutRange="out_range.png";
var mylocation = new google.maps.LatLng(-33.8668283734, 151.2064891821);
function initialize() {
   
  map = new google.maps.Map(document.getElementById('map-canvas'), {
    center: mylocation,
    zoom: 10, 
  });

  infoWindow = new google.maps.InfoWindow();
  service = new google.maps.places.PlacesService(map);
       
  google.maps.event.addListenerOnce(map, 'bounds_changed', performSearch); 
}

function performSearch() {
  var request = {
    bounds: map.getBounds(),   
    types:types
  };
  service.radarSearch(request, callback);
}

function callback(results, status) {
  if (status != google.maps.places.PlacesServiceStatus.OK) {
    alert(status);
    return;
  }
  for (var i = 0, result; result = results[i]; i++) {
    createMarker(result);
  }
}

function createMarker(place) {
        var distance1=1000;//1km
        //BEGIN DISTANCE           
        var glatlng1 = mylocation;
        var glatlng2 = place.geometry.location;
        //Fucntion Distance
        //alert(glatlng1.lng());
        var distance1=distance(mylocation,glatlng2);
        //alert(distance1);

        //END DISTANCE
        var marker;
        //IN
        if(distance1<distanceRange){
            marker = new google.maps.Marker({
                map: map,
                position: place.geometry.location,     
                icon:iconInRange
            });
            //alert('in');
        }
        //OUT
        else{
            marker = new google.maps.Marker({
                map: map,
                position: place.geometry.location,     
                icon:iconOutRange
            });
            //alert('out');
        }
 

  google.maps.event.addListener(marker, 'click', function() {
    service.getDetails(place, function(result, status) {
      if (status != google.maps.places.PlacesServiceStatus.OK) {
        alert(status);
        return;
      }
      infoWindow.setContent(result.name);
      infoWindow.open(map, marker);
    });
  });
}
//Fucntion Distance
function distance(location1,location2) {
    var lat1=location1.lat();
    var lon1=location1.lng();
    var lat2=location2.lat();
    var lon2=location2.lng();
    var R = 6371; // km (change this constant to get miles)
    var dLat = (lat2-lat1) * Math.PI / 180;
    var dLon = (lon2-lon1) * Math.PI / 180;
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(lat1 * Math.PI / 180 ) * Math.cos(lat2 * Math.PI / 180 ) *
        Math.sin(dLon/2) * Math.sin(dLon/2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    var d = R * c;
    //if (d>1) return Math.round(d)+"km";
    //else if (d<=1)
    return Math.round(d*1000);//meter   
    //return d;
}
google.maps.event.addDomListener(window, 'load', initialize);
    </script>



Thứ Tư, 1 tháng 1, 2014

Chọn Time Zone joomla 3.

Đối với TimeZone sẽ tác động đến lưu trữ thời gian ở server theo đúng quốc gia hiện tại.
Trường hợp Server bên Mỹ mà mình sử dụng giờ VN thì cần phải set lại thời gian để lúc lưu trữ bài viết hoặc publíc các bài viết hoặc sự kiện đúng.

 Đối với Việt Nam thì chọn Asia>Bangkok hoặc jakarta. (vì Việt Nam dùng GMT +7 cùng giờ với Bankok và Jakarta).

Thứ Sáu, 27 tháng 12, 2013

LESS - suy nghĩ 1 chút

LESS trước đây đọc ở diễn đàn và freelancer chưa hiểu lắm.
Có tìm hiểu thì gần giống CSS nhưng có biến, hàm, và 1 số có phân cấp độ.
Theo suy nghĩ cũng gần giống lập trình.
Ở đây 1 file .js và 1 file .less (thay cho css).
.js có trách nhiệm biên dịch trực tiếp từ file .less ra cấu trúc css
Biên dịch trực tiếp là: thay đổi thì nhận ra ngay.

Điểm mạnh của LESS thì cũng chính là điểm yếu của LESS   
LESS có hàm, và biến, cấp độ như vậy lúc thực hiện thì có thể gọn.
Nhưng lúc debug không còn khả năng trực quan nữa. Vì sẽ tìm bị trí của biến, vị trí của hàm.
Hiện theo tìm hiểu chưa thấy firebug(firefox) chưa thấy hỗ trợ debug LESS. Chrome thì cũng vậy.
Vì ở đây là biến mà lại thông qua file js để biên dịch vậy lại càng tốn thời gian debug sau này.
Mình sẽ suy nghĩ lại vấn đề dùng LESS khi có công cụ debug tốt hơn.

Dù sao cũng đọc được về bài LESS hay.
http://www.thuthuatweb.net/css/less-css-huong-dan-co-ban-cho-nguoi-bat-dau.html

Thứ Tư, 25 tháng 12, 2013

Joomla 3.x - Registration Active types

Joomla 3.x
Đăng ký thành viên có 3 loại kích hoạt
1. None: kích hoạt ngay
2. Self: email gửi đến và người dùng tự kích hoạt.
3. Admin: admin kích hoạt cho tài khoản

Thứ Sáu, 20 tháng 12, 2013

Chrome Perfectpixel hỗ trợ convert chính xác hơn đến từng pixcel

Giới thiệu: Chrome có addon miễn phí. Firefox cũng có nhưng có tính phí. (hơi buồn vì thường dùng firefox)

Tính năng:
Thêm nhiều lớp hình ảnh vào trên cùng browser để so sánh trực tiếp file thiết kế và website đang hoạt động.

Để hỗ trợ điều đó đó : độ trong suốt, mức độ ưu tiên của hình ảnh + vị trí có thể move hình ảnh.
Yêu cầu: hình ảnh và website đều phải đặt ở mức 100% độ chuẩn. Nếu hình ảnh mà đã phóng to thu nhỏ và đưa vào so sánh thì .... pó tay nhé.

Tác dụng:
Cùng lúc nhìn hình ảnh đã thiết kế và website để hiệu chỉnh.

Ý nghĩa: là công cụ hỗ trợ xem trực quan hơn, chứ không có nghĩa công việc giảm đi (vì vậy đừng ảo tưởng ... quá như mình ^.^ lúc đầu).

Bình thường thực hiện thì vẫn đo kích thước nhưng mức độ lệch là vài pixel, kết hợp với phương pháp này là quá tuyệt. Kết hợp với inspect element để chính cho đúng css.

Link download: (chỉ hỗ trợ google )
https://chrome.google.com/webstore/detail/perfectpixel-by-welldonec/dkaagdgjmgdmbnecmcefdhjekcoceebi

Thứ Hai, 16 tháng 12, 2013

Facebook like box IFRAME

Cách của mình làm trực tiếp từ facebook
https://developers.facebook.com/docs/plugins/like-box-for-pages/
Sau đó thực hiện theo hình ảnh.
Lấy iframe đưa vào module custom HTML.



Thứ Bảy, 7 tháng 12, 2013

IE8- CSS Transparent issue solved

Vấn đề IE 8 ko hiển thị được transparent. Lúc nào cũng có 1 hình ảnh mờ phía trên. Vấn đề như hình ảnh.
Cách xử lý trong CSS:
div.title {
  background: none repeat scroll 0 0 transparent;
  -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";

}

Thứ Tư, 4 tháng 12, 2013

Joomla 2.5- Virtue mart Discount single product

Cách giảm giá cho 1 sản phẩm trong virtue mart.
1. Tạo mới category là DiscountCategory
2. Vào Taxes & Calculation Rules
chọn Price modifier for Profit Margin

3. Sản phẩm nào cần giảm giá chỉ cần chọn cateogry là DiscountCategory

Thứ Ba, 3 tháng 12, 2013

Joomla 3.x - contact form capchar

Cách xử dụng form contact capchar của google của joomla 3.x có sẵn
1. Đăng ký key capchar từ google: http://www.google.com/recaptcha
 
2. Bật plugin capchar và điền key

3. Kiểm tra thư viện capchar: 
Thời điểm đầu tháng 12 năm 2013 viết bài này thì link thư viện capchar bị lỗi, vì vậy cần kiểm tra và thay thế đoạn code.
Vị trí file: plugins\captcha\recaptcha\recaptcha.php - line 64

//JHtml::_('script', $server . '/js/recaptcha_ajax.js');
JHtml::_('script', 'http://google.com/recaptcha/api/js/recaptcha_ajax.js');


4. Bật capchar từ global config

5. Kết quả hiển thị

Thứ Bảy, 30 tháng 11, 2013

Joomla 1.5- K2 replace Recapchar comment .js library

K2 Comment joomla 1.5 sử dụng http://api.recaptcha.net/js/recaptcha_ajax.js thư viện này ko còn hỗ trợ nữa. Nên khi sử dụng recapchar ko hiển thị.
Cách thực hiện: replace thư viện vào: components\com_k2\views\item\view.html.php
Thay đoạn  http://api.recaptcha.net/js/recaptcha_ajax.js bằng
http://google.com/recaptcha/api/js/recaptcha_ajax.js

Lưu ý: cần vào http://www.google.com/recaptcha để lấy public key và private key vào Admin: component->k2 chọn option -> comments điền key vào và bật lên.

Joomla 1.5 - k2 comment notify email to admin

K2 component joomla 1.5 không hỗ trợ việc gửi mail báo cho admin khi có comment mới.
Vì vậy cần viết thêm đoạn code này.
File location cần hiệu chỉnh: components\com_k2\models\item.php
Sử dụng thư viện Utilities của joomla: thêm vào đoạn: jimport('joomla.utilities.utility');
Tìm chức năng: function comment()
Thêm đoạn : có thể thêm ở dòng 753 (trong function comment)
//sendmail            $linkitemcomment=JURI::base().$item->link=urldecode(JRoute::_(K2HelperRoute::getItemRoute($item->id.':'.$item->alias,
            $item->catid.':'.urlencode($item->category->alias))));                   
            $emailadmin=$mainframe->getCfg('mailfrom');
            $bodymail='Nội dung bình luận:'.$commentText.'<br/><a href="'.$linkitemcomment.'">'.$linkitemcomment.'</a>';
           
            JUtility::sendMail($commentEmail, $userName, $emailadmin, 'Có bình luận mới',$bodymail,1);


Thứ Năm, 28 tháng 11, 2013

Joomla 15 Media manage not view Browser file selection

Đối với joomla 1.5 - Media manage ko xuất hiện input có browser để chọn file up lên có thể thử cách sau:

Thứ Ba, 26 tháng 11, 2013

SAFARI iframe session issue

Trình duyệt SAFARI không cho load session của IFRAME.
Nguyên nhân: trình duyệt safari chống các tự động popup.
Ảnh hưởng: đây là suy nghĩ tốt của SAFARI nhưng ảnh hưởng đối với website load iframe có sử dụng cần session.
Mục tiêu cần đạt được: Mở được session của host (là link IFRAME).
Muốn mở được session sẽ gặp trở ngại CROSS Browser Session. Theo nguyên tắc bảo mật thì host nào được mở session ở host đó. Không có quyền mở session ở host khác.
Vì vậy: cần phải có quyền truy cập ở cả 2 host. Hoặc 1 số website như facebook có hỗ trợ mở session. (cái này tìm hiểu facebook nhé).

Ví dụ đây: file index.php có chứa iframe
<iframe  id="blockrandom" name="contentframe" src="http://example_target.com" width="100%" height="1850"/>

Cách xử lý 1: Dùng trình duyệt safari mở 1 example_target.com, sau đó load file có chưa iframe. Thì mọi việc sẽ chạy bình thường. Nguyên nhân là session đã mở ít nhất 1 lần, sau đó safari sẽ tự nhận. BAD

Cách xử lý 2: Dùng trình duyệt safari viết thêm vào file index.php để tự động mở 1 new tab hoặc new window. Cách này suy nghĩ thì đúng nhưng ko làm được mặc dù nguyên lý gần giống cách 1 là mở example_target.com, nguyên nhân Safari chặn ko cho tự động popup.SO BAD

Cách xử lý 3: Redirect trực tiếp. GOOD
HOST 1: file index.php kiểm tra là browser safari thì redirect đến HOST 2 và open session.
HOST 2: open session: tạo mới file InitSession.php thì phải dùng PHP để open, sau khi open thì redirect lại HOST 1. (phải làm như vậy thì session mới mở được).
HOST 1 kiểm tra và họat động bình thường.

Chi tiết cách 3:
HOST 1 file index.php
<?php if ( ! count($_COOKIE) > 0 && strpos($_SERVER['HTTP_USER_AGENT'], 'Safari')&& $_GET['session']!='open') { ?>
<script type="text/javascript">
    window.top.location.href = 'http://example_target.com/InitSession.php';
</script>
<?php
}
?>
Start iframe<br/>
<iframe  id="blockrandom" name="contentframe" src="http://example_target.com" width="100%" height="600px"/>
End iframe<br/>

HOST 2 file InitSession.php
<?php
//inside setcookie.php
header('P3P: CP="CAO PSA OUR"');
session_start();
echo
'<script>
top.location = "http://host1.com/index.php?session=open";
</script>';
?>


Thứ Sáu, 1 tháng 11, 2013

Xem version PHP và đường dẫn tuyệt đối trên host

Một vài trường hợp cần xem đường dẫn tuyệt đối trên host
Và xem version PHP
Download file sau: phpinfo.php
Link dự phòng:
https://drive.google.com/file/d/0B785Epf6q5XlVENZeFpJTUJIc0k/edit?usp=sharing


Thứ Hai, 21 tháng 10, 2013

Turn on PHP 5.3 by .htacess

In the case Host supported PHP 5.3++ can turn on .htaccess file.
Add follow this code to bottom .htaccess:
Action application/x-hg-php53 /cgi-sys/php53
AddType application/x-httpd-php53 .php