it-swarm-vi.com

Làm cách nào để truy xuất văn bản THAY ĐỔI từ Joomla Editor?

Tôi có một trang cho phép người dùng chỉnh sửa văn bản giới thiệu của một bài viết cụ thể và tôi đang sử dụng mã này để cho phép họ làm như vậy:

$editor = & JFactory::getEditor();
$params = array('smilies'=> '0' ,'style'  => '0' ,'layer'  => '0' ,'table'  => '0' ,'clear_entities'=>'0');
echo $editor->display('introtext',$this->introtext  , '96%', '100px', 250, 40, false, null, null, null, $params);

Vấn đề là khi tôi đi lưu các thay đổi với jQuery/AJAX, tôi chỉ có thể truy cập HTML gốc mà trình soạn thảo đã được khởi tạo. Tôi đã sử dụng trình soạn thảo TinyMCE trong khi phát triển, nhưng người dùng thích JCE, vì vậy các câu trả lời cụ thể của biên tập viên được tìm thấy với Google không phải là mẹo cho tôi.

Làm thế nào để một người truy cập vào đã chỉnh sửa văn bản mà người dùng muốn lưu, để được đăng? Tôi đã cho rằng điều này, hoặc tương tự, sẽ hoạt động, nhưng rõ ràng nó không:

var newHTML = $('#introtext').val();
7
GDP

Nếu tôi nhớ đúng, JCE sử dụng iframe cho nội dung. Do đó, trước tiên bạn cần có một tham chiếu đến iframe, sau đó truy cập vào tài liệu bên trong của iframe, nó sẽ cung cấp bên trongHTML như văn bản bạn đang tìm kiếm. Tôi đã làm điều này một lần, nhưng tiếc là tôi không thể truy cập mã cho đến Chủ nhật.

Tôi sẽ bắt đầu với một cái gì đó như thế này (đây là cách tôi nhớ nó, không thể kiểm tra nó ngay bây giờ):

var iframe = document.getElementById('jform_articletext_ifr');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
var currentText = innerDoc.innerHTML;

Với currentText là văn bản "mới".

3
elk

Câu hỏi của "GDP" là

"Làm thế nào để một người có được văn bản chỉnh sửa mà người dùng muốn lưu, để được đăng?.

"Nai sừng tấm" đã giúp tôi bắt đầu đi đúng hướng nhưng tôi đã nhờ đến jQuery để thực sự có được văn bản đã chỉnh sửa. Đây là những gì tôi đã làm:

jQuery ("# ​​Array_ifr"). nội dung (). find ("cơ thể"). find ("p"). html ();

Ở đâu "Array_ifr "là id của iframe the JCE editor uses. Tôi đã tìm thấy điều này bằng cách kiểm tra các yếu tố với Fireorms.

Điều này làm việc cho tôi trong một Joomla! môi trường nhưng tôi không thấy nó là một vấn đề ở bất kỳ ai khác. Hy vọng điều này sẽ giúp những người khác với mã hóa của họ.

2
Sheldon Seale

Không có phương pháp nào tôi biết, bạn sẽ phải lưu trữ văn bản gốc và sau đó thực hiện so sánh khi gửi.

Thêm chi tiết, do đó, nói chung Trình chỉnh sửa được đặt ở cấp Toàn cầu nhưng người dùng có thể chọn thay đổi cấu hình của mình để chọn trình chỉnh sửa ưa thích.

Thời đại Joomla 3.x + tải Trình chỉnh sửa bằng cách sử dụng JFormFieldEditor tải trình soạn thảo đã chọn. Người dùng thực hiện các thay đổi trong trình chỉnh sửa nhưng như bạn đã lưu ý rằng chúng không được phản ánh tới trường ngay lập tức. ví dụ. trong một bài viết sẽ là #jform_articletext thành phần.

Tuy nhiên, đối với hầu hết các biên tập viên theo thời gian mục được lưu, phần tử biểu mẫu jform[articletext] có nội dung cập nhật. (Điều này dường như không áp dụng cho các trình soạn thảo AJAX tôi đã thấy).

Tôi chỉ đang suy đoán ở đây, nhưng tôi tưởng tượng họ (các biên tập viên) đính kèm một sự kiện submit vào biểu mẫu chính và đưa nội dung của họ vào trường tại thời điểm đó. Nơi khác bạn có thể kiểm tra là liên kết "Toggle Editor" mà JCE và TinyMCE có.

Trong một bài viết, TinyMCE có điều này bấm trình kích hoạt sự kiện được đính kèm với nút "Toggle Editor":

function onclick(event) {
    tinyMCE.execCommand('mceToggleEditor', false, 'jform_articletext');
    return false;
}

Điều này làm cho nội dung của trình soạn thảo bị xóa sang trường #jform_articletext.

Một cách tiếp cận khác có thể là gửi một sự kiện submit đến trình soạn thảo đang hoạt động với hy vọng làm cho nó cập nhật trường với văn bản đã thay đổi.

Vì mỗi trình soạn thảo có thể triển khai xử lý submit theo một cách khác và không phải tất cả chúng đều có nút "Toggle Editor" của MCE, bạn có thể phải xây dựng trường hợp đặc biệt cho mỗi trình soạn thảo mà bạn muốn hỗ trợ.

1
Craig

cố gắng đặt ngay trước

<?php echo $editor->save('introtext'); ?>
var newHTML = $('#introtext').val();

hoặc là

var newHTML = <?php echo $editor->getContent('introtext'); ?>

vì vậy văn bản từ trình chỉnh sửa sẽ được sao chép vào đó newHTML biến

tất nhiên mã javascript của bạn phải ở cùng một tệp biểu mẫu php (không phải trong tệp js độc lập)

1

Chủ đề này khá cũ nhưng điều này có thể giúp người khác ...

câu trả lời của nai sừng tấm gần như chính xác, ngoại trừ việc tôi phải sửa đổi thành

var currentText = innerDoc.body.innerHTML;
0
mhall