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

Cách đấu giá lần đầu thành công freelancer.com

Con đường của người thích tự do và biết khả năng.
Đấu giá trên freelancer .com mình tốn hết 2 năm để đấu giá thành công 1 dự án đầu tiên.
Trong những lúc có trở ngại, cần tìm còn đường thì lên đấu giá.
Đấu giá hàng nghìn lần sẽ rút được kinh nghiệm, chắc không cần nhiều đến vậy.
Theo như mình thấy là do mình chậm vì có nhiều người đấu giá thành công rất nhanh thôi.

Cái khó nhất là đấu giá lần đầu tiên, rút kinh nghiệm thì cũng chỉ là vấn đề liên hệ. Chậm hay nhanh do mình có hiểu đối tác không.

Mình cần đặt bản thân mình là người tìm người. Trung bình 30 lượt đấu giá/dự án có tất cả mọi người từ người 0 có review nào đến người có hàng ngàn review (review gọi là đánh giá)..
Vậy làm sao để đấu giá đầu tiên thành công: nên nhớ rằng lần đầu tiên bạn không có gì đáng tin cả. Và điểm mạnh nhất: giá, và cách liên hệ.

Mục đích giá thấp lần đầu: lần đầu tiên chưa có ấn tượng gì và giá là điều cần để ý. Thấp hơn những người khác - giá chỉ 1/3 cho đến 1/2 - mục đích ở đây là sự chú ý.
Mục đích của liên hệ: lúc đấu giá có thời gian, chi phí,đánh giá, mức độ hoàn thành và liên hệ. Phần liên hệ là cả nghệ thuật quyết định gần như toàn bộ thành công. Trong liên hệ cần phải ghi rõ bạn hiểu gì về yêu cầu, lúc thực hiện thì thực hiện như thế nào, cách bàn giao, các xử lý khi có vấn đề xảy ra. Trong liên hệ là quá trình phân tích kỹ lưỡng, khi nhìn liên hệ người ta sẽ hiểu được khả năng của bạn. Nếu mới khởi đầu thì liên hệ này càng phải chi tiết, có cả các link site mẫu đã làm trước.

Có những dự án chỉ cần phần liên hệ, đối tác lập tức chọn bạn. Có những dự án hiệu chỉnh quá dễ thì người ta lại quan tâm đến giá, hoặc thời gian thực hiện. Có dự án quan tâm đến thời gian. Có dự án phức tạp kéo dài hàng tháng. Vì vậy mỗi loại dự án sẽ là thì trường phù hợp với các cá nhân.

Ở đây là hiểu được tâm lý người ra yêu cầu, và biết khả năng của bản thân.

Khả năng thực hiện khi đọc yêu cầu cần hiểu rõ, không mơ hồ vì sẽ có những yêu cầu không rõ ràng.

Cần phải hiểu rằng không phải đối tác nào cũng rõ ràng, thân thiện, chơi đẹp. Vàng thau lẫn lộn. Nhưng có điều vẫn rất lợi thế, nên nhớ rằng đối tác giỏi hay là những đối tác ngay trong yêu cầu thể hiện được tính rõ ràng, bao quát, và có trách nhiệm. Những đối tác không đạt được tính rõ ràng, bao quát, trách nhiệm thì đừng cố gắng đấu giá.
Ý nói là người rõ ràng thì câu viết rõ ràng, yêu cầu rõ ràng. Có những đối tác post dự án cho 1 đối tượng rõ ràng, có những đối tác post thử dự án, có đối tác trong quá trình post dự án đã tìm ra cách xử lý, có đối tác trong quá trình post thì chính những đối tác của họ đã rút lui. Vì vậy có nhiều nguyên nhân dẫn đến dự án closed và cần hiểu điều này.

Tất cả các yếu tố giá, thời gian, liên hệ, các đánh giá, mức độ hoàn thành công việc .... tất cả các yếu tố này đều phải lưu ý góp phần tăng tỉ lệ thành công trong đấu giá dự án.

Thành công đầu tiên có thể ghi nhận không cần phải đấu giá thắng lợi mà là đối tác có liên hệ lại, lúc này chứng tỏ đối tác đã quan tâm đến bạn, và cách trình bày của bạn đã có sự ấn tượng.

Lần đầu đấu giá những dự án nhỏ, chỉnh sửa. Hoặc dự án thuộc thế mạnh của mình, dự án thuộc thế mạnh thì cần trình bày trong phần liên hệ 1 cách chi tiết.

Thứ Sáu, 18 tháng 10, 2013

Turn off fast sh404sef

Change file name or remove file follow location file:
                                       plugins\system\shsef.php

Thứ Hai, 14 tháng 10, 2013

Jquery get parent item latest (the nearest parent)

<ul class="top_navigation">
<li>
       <div class="icon"><img src="images/icon5.png"/></div>
</li>

</ul>
Cách lấy parent item gần nhất bằng Jqueyry
               var parent=jquery1('.top_navigation img').parents('li');

Lưu ý: .parentparents khác nhau.

Thứ Năm, 10 tháng 10, 2013

Vấn đề thường gặp đối với @font-face HTML

Giới thiệu:
Hiển thị font tùy thuộc vào trình duyệt. Hiện chia làm loại chính
Trình duyệt có hỗ trợ sử dụng file TTF: firefox, safari, chrome
Trình duyệt sử dụng file EOT: internet explorer (IE).
Vì vậy cùng 1 lúc phải sử dụng 2 file.
Ngoài ra còn có công cụ CU-FONT convert file font qua js - điểm mạnh hiển thị được tất cả trình duyệt. Điểm yếu của cu-font thêm các tag, copy text không được và khó kiểm soát khi cần nâng cấp. Vì vậy nên sử dụng @font-face.

Chuyển đổi file TTF qua EOT: http://www.kirsle.net/wizards/ttf2eot.cgi
Sử dụng trong CSS

Style trong file CSS
@font-face
{
font-family: myFirstFont;
src: url('Sansation_Light.ttf'),
     url('Sansation_Light.eot'); /* IE */

Vấn đề thường gặp phải: đ
IE sử dụng chuẩn font khác .EOT để hiển thị. Có nhiều lỗi liên quan đến hiển thị font của IE8.
Các phương pháp thực hiện thử:
1. Đường dẫn chính xác: trường hợp này để thử cách chính xác đường dẫn đúng
 @font-face
{
font-family: myFirstFont;
src: url('
http://mydomain.com/font/myfont.ttf'),
     url('
http://mydomain.com/font/myfont.eot'); /* IE */
}

2. Tách khai báo font face CSS ra thêm 1 file dành cho ie.css
vào file index.php thêm vào cuối cùng của thẻ <head>
  <!--[if IE]>
    <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/ie.css" type="text/css" />       
    <![endif]-->   
Trong file ie.css khai báo duy nhất 1 đoạn : file .eot nằm cùng folder với file ie.css
 @font-face
{
font-family: myFirstFont;
src: 
url('myfont.eot'); /* IE */
}

Nguyên nhân : khi khai báo chung có 1 số trường hợp browser không nhận được. Nguyên nhân thì mình không rõ. Nhưng khi tách ra thì IE lại nhận được.

Thứ Sáu, 4 tháng 10, 2013

joomla 3- com_contact add new fields

Joomla 3.1
Com_contact
Contact add new field example is Phone Number view
1. Add new field Phone to form
 components\com_contact\views\contact\tmpl\default_form.php

<div class="control-group">
                <div class="control-label"><?php echo JText::_('COM_CONTACT_EMAIL_LABEL'); ?></div>
                <div class="controls"><?php echo $this->form->getInput('contact_email'); ?></div>
                <div class="clr"></div>
            </div>
            <div class="control-group">
                <div class="control-label"><?php echo JText::_('COM_CONTACT_PHONE_LABEL'); ?></div>
                <div class="controls"><input type="text"  size="60" value="" id="jform_contact_phone" name="jform[contact_phone]" ></div>
                <div class="clr"></div>
            </div>

            <div class="control-group">
                <div class="control-label"><?php echo JText::_('COM_CONTACT_CONTACT_MESSAGE_SUBJECT_LABEL'); ?></div>
                <div class="controls"><?php echo $this->form->getInput('contact_subject'); ?></div>
                <div class="clr"></div>
            </div>

2. Send mail : add new content to mail body
files: components\com_contact\controllers\contact.php at function private function _sendEmail
Replace: line 156-161:
            $phone = 'Phone Number:  '.$data['contact_phone'];
            $body        = $data['contact_message'];

            // Prepare email body
            $prefix = JText::sprintf('COM_CONTACT_ENQUIRY_TEXT', JUri::base());
            $body    = $prefix."\n".$name.' <'.$email.'>'."\r\n\r\n".$phone."\n".stripslashes($body);

Result is:
 

joomla 3. com_contact list with heading Ordering

Joomla 3.1
Component: com_contact
file edit: components\com_contact\views\category\tmpl\default_items.php
Function: Heading view + ordering

<?php
/**
 * @package     Joomla.Site
 * @subpackage  com_contact
 *
 * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

JHtml::_('behavior.framework');

$listOrder    = $this->escape($this->state->get('list.ordering'));
$listDirn    = $this->escape($this->state->get('list.direction'));
?>
<?php if (empty($this->items)) : ?>
    <p> <?php echo JText::_('COM_CONTACT_NO_ARTICLES'); ?> </p>
<?php else : ?>

<form action="<?php echo htmlspecialchars(JUri::getInstance()->toString()); ?>" method="post" name="adminForm" id="adminForm">
<?php if ($this->params->get('show_pagination_limit')) : ?>
    <fieldset class="filters">
    <legend class="hidelabeltxt"><?php echo JText::_('JGLOBAL_FILTER_LABEL'); ?></legend>

        <div class="display-limit">
            <?php echo JText::_('JGLOBAL_DISPLAY_NUM'); ?>&#160;
            <?php echo $this->pagination->getLimitBox(); ?>
        </div>
    </fieldset>
<?php endif; ?>
    <table class="category">
        <?php if ($this->params->get('show_headings')) : ?>
        <thead><tr>
            <th class="item-title">
                #
            </th>
            <th class="item-title">
                <?php echo JHtml::_('grid.sort', 'COM_CONTACT_NAME_HEADER', 'a.name', $listDirn, $listOrder); ?>
            </th>
            <?php if ($this->params->get('show_position_headings')) : ?>
            <th class="item-position">
                <?php echo JHtml::_('grid.sort', 'COM_CONTACT_POSITION', 'a.con_position', $listDirn, $listOrder); ?>
            </th>
            <?php endif; ?>
            <?php if ($this->params->get('show_email_headings')) : ?>
            <th class="item-email">
                <?php echo JText::_('JGLOBAL_EMAIL'); ?>
            </th>
            <?php endif; ?>
            <?php if ($this->params->get('show_telephone_headings')) : ?>
            <th class="item-phone">
                <?php echo JText::_('COM_CONTACT_TELEPHONE'); ?>
            </th>
            <?php endif; ?>

            <?php if ($this->params->get('show_mobile_headings')) : ?>
            <th class="item-phone">
                <?php echo JText::_('COM_CONTACT_MOBILE'); ?>
            </th>
            <?php endif; ?>

            <?php if ($this->params->get('show_fax_headings')) : ?>
            <th class="item-phone">
                <?php echo JText::_('COM_CONTACT_FAX'); ?>
            </th>
            <?php endif; ?>

            <?php if ($this->params->get('show_suburb_headings')) : ?>
            <th class="item-suburb">
                <?php echo JHtml::_('grid.sort', 'COM_CONTACT_SUBURB', 'a.suburb', $listDirn, $listOrder); ?>
            </th>
            <?php endif; ?>

            <?php if ($this->params->get('show_state_headings')) : ?>
            <th class="item-state">
                <?php echo JHtml::_('grid.sort', 'COM_CONTACT_STATE', 'a.state', $listDirn, $listOrder); ?>
            </th>
            <?php endif; ?>

            <?php if ($this->params->get('show_country_headings')) : ?>
            <th class="item-state">
                <?php echo JHtml::_('grid.sort', 'COM_CONTACT_COUNTRY', 'a.country', $listDirn, $listOrder); ?>
            </th>
            <?php endif; ?>

            </tr>
        </thead>
        <?php endif; ?>

        <tbody>
            <?php foreach ($this->items as $i => $item) : ?>
                <?php if ($this->items[$i]->published == 0) : ?>
                    <tr class="system-unpublished cat-list-row<?php echo $i % 2; ?>">
                <?php else: ?>
                    <tr class="cat-list-row<?php echo $i % 2; ?>" >
                <?php endif; ?>
                    <td class="item-count"><?php echo $i+1;?></div>
                    <td class="item-title">
                        <a href="<?php echo JRoute::_(ContactHelperRoute::getContactRoute($item->slug, $item->catid)); ?>">
                            <?php echo $item->name; ?></a>
                    </td>

                    <?php if ($this->params->get('show_position_headings')) : ?>
                        <td class="item-position">
                            <?php echo $item->con_position; ?>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_email_headings')) : ?>
                        <td class="item-email">
                            <?php echo $item->email_to; ?>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_telephone_headings')) : ?>
                        <td class="item-phone">
                            <?php echo $item->telephone; ?>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_mobile_headings')) : ?>
                        <td class="item-phone">
                            <?php echo $item->mobile; ?>
                        </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_fax_headings')) : ?>
                    <td class="item-phone">
                        <?php echo $item->fax; ?>
                    </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_suburb_headings')) : ?>
                    <td class="item-suburb">
                        <?php echo $item->suburb; ?>
                    </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_state_headings')) : ?>
                    <td class="item-state">
                        <?php echo $item->state; ?>
                    </td>
                    <?php endif; ?>

                    <?php if ($this->params->get('show_country_headings')) : ?>
                    <td class="item-state">
                        <?php echo $item->country; ?>
                    </td>
                    <?php endif; ?>

                </tr>
            <?php endforeach; ?>

        </tbody>
    </table>

    <?php if ($this->params->get('show_pagination')) : ?>
    <div class="pagination">
        <?php if ($this->params->def('show_pagination_results', 1)) : ?>
        <p class="counter">
            <?php echo $this->pagination->getPagesCounter(); ?>
        </p>
        <?php endif; ?>
        <?php echo $this->pagination->getPagesLinks(); ?>
    </div>
    <?php endif; ?>
    <div>
        <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>" />
        <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>" />
        <input type="hidden" name="task" value="" />        
         <input type="hidden" name="limitstart" value="" />

    </div>
</form>
<?php endif; ?>

Thứ Ba, 1 tháng 10, 2013

Bảo mật joomla căn bản mà hiệu quả

Thường thị bị hack bởi yếu tố sau: Dựa vào yếu tố sẽ ra cách xử lý
1. Tài khoản + Mật khẩu đơn giản: tài khoản dễ đoán như: admin, admin123, 123456, ....
Các tài khoản và password dễ đoán sẽ được lưu trong 1 danh sách, và sẽ được quét tự động. Nếu tài khoản nào vào được sẽ báo cho hacker.
Như vậy ở đây phải có 2 cách chống:

1 chống tự động : có thể dụng plugin KSECURE plugịn(tự tìm hiểu free), RS Fire wall extension (cái này có phí)
Thêm mật khẩu cấp 2(ý nói là muốn vào administrator thì qua 1 bước nữa). Dùng KSECURE http://diendan.joomlaviet.vn/threads/bao-ve-thu-muc-administrator-voi-ksecure.704/
2 tài khoản mật khẩu phức tạp hơn: cái này hãy đặt cả tài khoản và mật khẩu khác: vd webadmin, pass: Pass%2​
2. Lỗ hổng của Joomla (phiên bản) (không dùng joomla 1.5 nữa, bây giờ sử dụng 2.5, 3.1 - theo kế hoạch joomla năm 2014 thì 2.5 cũng không còn hỗ trợ)
Vd: Lỗ hổng phiên bản có thể hacker đăng ký tài khoản thường user nhưng có thể kèm theo group thuộc nhóm super admin.
.....
----------------------
Lỗi này thì nhiều thể loại nhưng mục đích cuối cùng là chiếm quyền admin.
Mấy lần đầu mình bị hack mình cũng đặt câu hỏi: giả sử là hacker vào được admin rồi thì sẽ làm gì để kiểm soát?
Thật ra thì vào được admin rồi thì hacker sẽ cố cấu hình website cho phép up file php (file php thường là shell, upload manager file php ...) cho phép xem tất cả các file,edit, download giống như FTP vậy.
Và rồi chỉ cần 1 đoạn code hoặc xóa file, redirect link đến site khác, thêm 1 đoạn js thay đổi event ....
Khi làm joomla mình cảm thấy giống như là 1 cuộc chạy đua phiên bản. Có thể 1-2 ngày là ra bản vá lỗi.
Cách ngăn chặn quyết định không cho truy cập admin (mật khẩu 2 cấp, chống tự động .... ) làm rất hiệu quả.